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

707
Anirudh Ramanathan

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

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
Это может иметь место, но это не вопрос программирования. Hasturkun 11 лет назад 0
IIRC, в то время, когда Бах писал, что не было отдельных системных вызовов для каталогов, open () и read () и write () работали также для inode-каталогов. С возможными диастазирующими эффектами. 11 лет назад 1

3 ответа на вопрос

5
jim mcnamara

The mkdir() call has been around since BSD 4.2. It was later added to SYSV 3.0. See: http://pubs.opengroup.org/onlinepubs/9699919799/functions/mkdir.html

BSD 4.2 came out in 1984: http://www.unix.org/what_is_unix/history_timeline.html

If access to a kernel mode entry point in UNIX via a syscall is permitted from user mode without restriction, what duskwuff indicates, then setuid is not required.

Вау, спасибо за ссылки и график. Старая версия mkdir.c, которую вы связали, похоже, не выполняет системный вызов `setuid ()`. Это определенно правильный? Anirudh Ramanathan 11 лет назад 0
Эта версия mkdir была относительно современной - она ​​использует `mkdir ()`. duskwuff 11 лет назад 1
3
duskwuff

It's no longer necessary to have root privileges to create a folder. There's now instead a mkdir() system call which any process can use to create a directory.

1
Jens

Have things changed since Bach wrote that?

Exactly. The permission to create a directory is nowadays based on the write permission to the parent directory or the t bit (for /tmp-like directories where everybody can create a directory but you can only delete files owned by you).

Я согласен, но это касается прав доступа к исполняемому файлу mkdir, а не к папке назначения. Anirudh Ramanathan 11 лет назад 0
Ну, это именно то, что изменилось. Хэш проверки разрешения переместился с проверки бита setuid исполняемого файла mkdir на бит записи родительского dirs для эффективного пользователя. Jens 11 лет назад 0