UNIX: различия между версиями

Содержимое удалено Содержимое добавлено
→‎Сигналы: в вызове raise() параметром явлется название сигнала, а не pid так как raise отправляет синал своему процессу
 
Строка 188:
Вышеприведённая 9-битовая схема (три права, три категории пользователей) иногда бывает слишком примитивной. Существуют файлы, которые может изменять/читать/выполнять ''кто угодно, но не как угодно''. Так, например, файл '''/etc/passwd'''<ref>в некоторых UNIX-ах может называться иначе</ref> содержит, помимо прочего, пароли пользователей (в зашифрованном виде). Есть стандартная программа '''passwd''' для смены пароля. Необходимо каким-то образом разрешить всем пользователям менять файл '''/etc/passwd''', но не как угодно, а только через программу '''passwd''' (иначе они получат возможность поменять чужие пароли и вообще испортить важный системный файл).
 
Для таких случаев в коде доступа существует ''бит s''. Если запустить исполняемый файл с битом s, , он получит те права доступа, которыми обладает его владелец (а не тот, кто его запустил). Стандартная программа '''passwd''' умеет менять пароль, принадлежит системе (то есть суперпользователю system), и бит s в ней установлен. Поэтому ей разрешено менять '''/etc/passwd''', кто бы её ни запустил.
 
Бит s могущественен и опасен. Если пользователь напишет любую программу, установит для неё бит '''s''' командой '''chmod''', а затем передаст её суперпользователю командой '''chown''', его программа получит право делать что хочет. Для борьбы с этой опасностью существуют разные методы. В системе BSD передавать файл от пользователя к пользователю или от группы к группе может только суперпользователь. В системе System V передать свой файл другому пользователю может любой, но при этом бит '''s''' сбрасывается.