Почему бит разрешения setuid не установлен для mkdir в современных системах Unix?

Бах заявляет следующее:

MKDIR является типичным setuid программа. Только процесс с корнем Effective UID может создать папку. (Раздел 7.6, стр. 229)


Я проверил разрешения на него в Ubuntu 12.04, бит setuid не установлен.

-rwxr-xr-x 1 root root 42624 Oct  2 08:55 mkdir
   ^??

Затем я проверил другие программы, которые должны иметь этот набор, как ping а также su и у них это установлено.

-rwsr-xr-x 1 root root 34740 Nov  8  2011 ping
   ^---there it is 

Итак, как же mkdir Работа? С тех пор, как Бах написал это, все изменилось?

3 ответа

Решение

Вызов mkdir() существует с BSD 4.2. Позднее он был добавлен в SYSV 3.0. См.: http://pubs.opengroup.org/onlinepubs/9699919799/functions/mkdir.html

BSD 4.2 вышел в 1984 году: http://www.unix.org/what_is_unix/history_timeline.html

Если доступ к точке входа в режиме ядра в UNIX через системный вызов разрешен из пользовательского режима без ограничений, как указывает duskwuff, тогда setuid не требуется.

Больше нет необходимости иметь права root для создания папки. Там сейчас вместо mkdir() системный вызов, который любой процесс может использовать для создания каталога.

С тех пор, как Бах написал это, все изменилось?

Именно так. Разрешение на создание каталога в настоящее время основано на разрешении записи в родительский каталог или t бит (для /tmp-подобных каталогов, где каждый может создать каталог, но вы можете удалить только те файлы, которые принадлежат вам).

Другие вопросы по тегам