Я выполняю OS X 10.6.1. Когда я зарегистрирован как обычный пользователь штата группы и делаю a
ps ux
это перечисляет мой PS ux команда, как выполняемая корнем:
snies 181 0.0 0.3 2774328 12500 ?? S 6:00PM 0:20.96 /System/Library...
root 1673 0.0 0.0 2434788 508 s001 R+ 8:16AM 0:00.00 ps ux
snies 177 0.0 0.0 2457208 984 ?? Ss 6:00PM 0:00.52 /sbin/launchd
snies 1638 0.0 0.0 2435468 1064 s001 S 8:13AM 0:00.03 -bash
Это нормальное поведение? И раз так почему? Обратите внимание на то, что пользователь не является учетной записью Администратора и не может к sudo.
Это нормально для Mac OS X. Это раньше было нормально почти во всех системах oid Unix. Это работает как корень без sudo, потому что двоичный файл PS установлен-uid работать как корень (например, в моих 10,4 системах):
% ls -l $(which ps)
-rwsr-xr-x 1 root wheel 31932 Mar 20 2005 /bin/ps
( s
вместо пользователь-владелец x
столбец означает, что установлен-uid (и пользовательский исполняемый файл), владелец является корнем; это означает, что, неважно, кто выполняет его, это будет работать как корень),
Традиционно (и тем не менее случай в системах Mac OS X), это должно работать как корень, потому что информация, в которой это нуждается, только доступна через доступные для корня устройства (например,/dev/kmem) или системные вызовы только для корня. Это в порядке потому что (если нет ошибки в реализации), программа PS записана способом, который не позволяет вызывающим сторонам получить информацию, которую они не должны иначе иметь.
Другие системы имеют другие механизмы, которые обеспечивают доступ к информации, в которой нуждается PS, и таким образом не нуждаются в двоичных файлах PS набора-uid. В частности,/proc виртуальная файловая система в системах Linux (и другие) может опубликовать очень мелкомодульную информацию о ядре с одинаково мелкомодульными полномочиями. Такая модель достаточна, чтобы позволить непривилегированному PS получать все, в чем она нуждается, не предоставляя доступ к более чувствительным битам информации о ядре.