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 4755rwsr‑xr‑xДля файла установлен бит SUID; владелец имеет право чтения, записи и выполнения; группа и другие пользователи имеют право чтения и выполнения
chmod 6711rws--s — хДля файла установлены биты SUID и SGID; владелец имеет право чтения, записи и выполнения; группа и другие пользователи имеют право выполнения
chmod 2751rwxr‑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, в качестве аргумента которой указано имя пользователя: