Linux и UNIX: программирование в shell. Руководство разработчика. - страница 7
Существует несколько системных команд UNIX, для которых установлен бит SUID или SGID. Чтобы найти эти команды, перейдите в каталог /bin или /sbin и введите:
>$ ls -l | grep '^…s'
Вы получите список команд с установленным битом SUID.
>$ ls -1 | grep '^…s..s'
В результате выполнения этой команды выводится список команд, у которых установлен как бит SUID, так и бит SGID.
1.6.2. Установка битов SUID и SGID
Чтобы установить бит SUID, вставьте цифру 4 перед числом, задающим режим доступа. Биту SGID соответствует цифра 2. Если одновременно устанавливаются оба бита, следует ввести цифру 6 (4 + 2).
В строке режима установленные биты SUID и SGID обозначаются символом s, который помещается на место символа x в первую или вторую триаду соответственно. Помните, что сам бит выполнения (х) также должен быть установлен. Если, например, вы хотите для какой‑либо программы установить бит SGID, убедитесь в том, что группа обладает правом выполнения этой программы.
Примечание:
Команда chmod не запрещает вам установить бит SUID или SGID при отсутствии соответствующего разрешения на выполнение файла. В этом случае при выполнении команды ls -l в строке режима будет указан символ S, а не s. Система таким образом информирует вас о неправильной установке прав доступа к файлу.
Рассмотрим несколько примеров:
Команда | Строка режима | Результат |
chmod 4755 | rwsr‑xr‑x | Для файла установлен бит SUID; владелец имеет право чтения, записи и выполнения; группа и другие пользователи имеют право чтения и выполнения |
chmod 6711 | rws--s — х | Для файла установлены биты SUID и SGID; владелец имеет право чтения, записи и выполнения; группа и другие пользователи имеют право выполнения |
chmod 2751 | rwxr‑s--x | Для файла установлен бит SGID; владелец имеет право чтения, записи и выполнения; группа имеет право чтения и выполнения; другие пользователи имеют право выполнения |
Для установки битов SUID и SGID можно также воспользоваться символьными
операторами команды chmod. Вот как это делается:
>chmod u+s имя_файла — SUID
>chmod g+s имя_файла — SGID
Заметьте, что команда chmod не выполняет проверку корректности установок. Даже если для файла установлен бит выполнения, это еще не означает, что мы имеем дело с программой или сценарием.
1.7. Команды chown и chgrp
Создав файл, вы автоматически становитесь его владельцем, но можете передать право владения другому пользователю, у которого есть запись в файле /etc/passwd. Только системный администратор либо фактический владелец может передавать права на файл другому пользователю. Если вы отказались от владения файлом, для того чтобы восстановить свои права на него, вам придется обратиться к системному администратору.
Для передачи прав владельца предназначена команда chown. Команда chgrp задает группу, которой принадлежит файл. Общий формат этих команд таков:
chown владелец файл chgrp владелец файл
Опция -R позволяет выполнить рекурсивное изменение файлов в указанном каталоге и всех его подкаталогах.
1.7.1. Пример использования команды chown
Вот как можно поменять владельца файла с помощью команды chown:
>$ ls -l
>-rwxrwxrwx 1 louise admin 345 Sep 20 14:33 project
>$ chown pauline project
>$ ls -l
>-rwxrwxrwx 1 pauline admin 345 Sep 20 14:33 project
Право владения файлом project переходит от пользователя louise к пользователю
pauline.
1.7.2. Пример использования команды chgrp
Следующий пример демонстрирует, как поменять группу, которой принадлежит файл:
>$ ls -1
>-rwxrwxrwx 1 pauline admin 345 Sep 20 14:33 project
>$ chgrp sysadmin project
>$ ls -1
>-rwxrwxrwx 1 pauline sysadmin 345 Sep 20 14:33 project
Пользователь pauline передал группе sysadmin право владения файлом project, которое до этого принадлежало группе admin.
1.7.3. Определение групп, в состав которых вы входите
Если вы хотите узнать, к какой группе принадлежите, введите команду groups:
>$ groups
>admin sysadmin appsgen general
либо воспользуйтесь командой id:
>$ id
>uid=0(root) gid=0(root) groups=0(root), 1(bin), 2(daemon), 3(sys), 4(ado)
1.7.4. Определение групп, в состав которых входят другие пользователи
Определить, в состав каких групп входит другой пользователь, позволяет команда groups, в качестве аргумента которой указано имя пользователя: