Почему бит разрешения 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-подобных каталогов, где каждый может создать каталог, но вы можете удалить только те файлы, которые принадлежат вам).