2

У меня есть два компьютера, один из которых работает под управлением Xubuntu 12.04, а другой - под управлением Linux Mint 14.

На Xubuntu:

$ sudo gedit

в другом терминале:

$ kill [pid of the gedit process]
bash: kill: ([pid]) - Operation not permitted

$ kill [pid of the sudo process]

Последний действительно успешно убивает sudo (и gedit с ним), даже несмотря на то, что sudo запускается от имени root (setuid), и обычный пользователь не должен иметь возможность уничтожать процессы root. Но я думаю, потому что мы начали это сами, у нас есть особые права на это.

На монетном дворе:

$ sudo gedit

в другом терминале:

$ kill [pid of the gedit process]
bash: kill: ([pid]) - Operation not permitted

$ kill [pid of the sudo process]
bash: kill: ([pid]) - Operation not permitted

Так почему же мы можем убить sudo как обычный пользователь в Xubuntu, а не в Mint? Что вызывает это? Как я могу изменить это поведение?

Я не ищу способы уничтожения процессов, очевидно sudo kill будет работать.

3 ответа3

2

Рискну сказать, что это разница между РЕАЛЬНЫМ ИДЕНТИФИКАТОРОМ и ЭФФЕКТИВНЫМ ИДЕНТИФИКАТОРОМ для определенного процесса и тем, как точно sudo работает на каждой из двух ваших машин.

MINT появляется, когда sudoing процесс, чтобы изменить эффективный идентификатор пользователя (root) и реальный идентификатор пользователя (пользователя, который вызвал процесс) на root. Таким образом, исходный пользователь не может уничтожить ни процесс sudo, ни процесс sudoed (gedit). Xubuntu (и, в моем случае, Fedora) этого не делают. Настоящий идентификатор пользователя все еще остается исходным пользователем.

Используйте команду ps, чтобы увидеть процесс, принадлежащий пользователям (реальный или эффективный). Я выполнил твою команду sudo gedit. ps uaxf произвел это дерево:

myuserid  22868  0.0  0.0 163400  4872 pts/2   Ss   13:19  0:00   |  \_ -zsh
root      30392  0.0  0.0 205044  3736 pts/2   S+   13:45  0:00   |  | \_ sudo gedit
root      30417  0.0  0.1 699788 23692 pts/2   Sl+  13:45  0:00   |  |   \_ gedit

Ясно, что эффективный идентификатор пользователя для sudo и gedit - root, а не я. Затем я использовал ps с параметром --User (--User userlist Выберите по реальному идентификатору пользователя (RUID) или имени.), Чтобы увидеть, кто является реальным идентификатором пользователя для процессов:

ps --User "myuserid" 

Это дало большой результат, но была выделена одна строка:

30392 pts/2    00:00:00 sudo

Но процесс 30417 явно отсутствовал ...

Затем я побежал:

ps --User "root"

Это также произвело много выхода, но эта строка выделялась:

30417 pts/2    00:00:00 gedit

Но процесс 30392 отсутствовал.

Итак, кажется, что хотя процесс sudo (30392) имеет эффективного владельца root, реальный владелец - это я, и я могу его убить. Процесс gedit, с другой стороны, имеет как эффективную, так и реальную собственность root и не может (напрямую) убивать меня. Я предполагаю, что в Lint оба процесса эффективно и действительно принадлежат пользователю root.

Я думал, что на это может повлиять опция stay_setuid в /etc/sudoers, но описание этого не делает это вероятным.

Есть ли какие-либо различия в ваших файлах /etc /sudoers между Mint и Xubuntu?

1

Это, вероятно, лучше подано в комментарии, но я пока не могу оставлять комментарии. Попробуйте

ps aux | grep sudo

и посмотрите на пользователя (владельца) этого процесса sudo. Возможно, что процесс sudo запускается от имени пользователя, а не пользователя root.

Я только что попробовал свою систему Red Hat и не смог убить процесс sudo от локального обычного пользователя, так как он принадлежал пользователю root.

0

В обоих случаях выполнение команды от имени пользователя root приведет к остановке процесса. Причина, по которой он не работает в Mint, возможно, заключается в том, что в среде рабочего стола нет такого менеджера "автоматического повышения прав", как в?buntu.

Смотрите: Ubuntu: автоматическое повышение прав администратора?

Вопрос не совсем актуален, но принятый ответ касается причины ощутимой разницы.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .