Специальные биты доступа в Linux. Для чего нужны расширенные права?

специальные биты доступа в linux. для чего нужны расширенные права?

Роль специальных битов

Вы уже знакомы со стандартной системой прав Linux. В её основе лежат девять битов, устанавливающих доступ на чтение, изменение и выполнение для владельца, группы и остальных пользователей. Помимо них существуют и дополнительные биты. Они реализуют специфичное поведение и, как правило, используются очень редко.

Основной задачей специальных битов является временная передача дополнительных прав текущему пользователю, а также изменение правил создания и удаления файлов. Например, с помощью расширенных прав Linux позволяет запускать программы как бы от имени другого пользователя.

Бит Setuid

Признак setuid также сокращенно называют suid. В Linux он может быть установлен только для файла. Бит suid позволяет всем пользователям имеющим доступ на выполнение файла запускать его с правами владельца. Если программа принадлежит администратору, любой пользователь, запустив ее, будет взаимодействовать с системой как администратор.

Специальный бит suid устанавливается с помощью команды chmod. В буквенной записи назначения прав используйте символ «s». Например, в общем виде команду можно записать как «chmod u+s имя_файла». Обратите внимание, устанавливать этот бит для группы и остальных пользователей не имеет смысла. Если suid задан для владельца, а для группы и остальных пользователей дано разрешение на выполнение файла, то запуск будет происходить от имени владельца.

Восьмеричная запись немного сложнее. Мы говорили, что права представлены с помощью трех символов, каждый из которых является суммой значений: 4 — право на чтение, 2 — право на запись, 1 — разрешение на выполнение как программы. Чтобы разрешить владельцу и группе все действия, а остальных пользователей игнорировать нужно, установить права «770». Бит setuid также добавляется к этой последовательности за счет сложения. Однако он имеет числовое значение «4000», что меняет последовательность на «4770».

#пример установки бита setuid для нового временного файла
touch ~/temp-file.txt
chmod u+x ~/temp-file.txt

ls -l ~/temp-file.txt
-rwxrw-r-- 1 user user 0 окт 20 22:21 /home/user/temp-file.txt

chmod u+s ~/temp-file.txt
ls -l ~/temp-file.txt
-rwsrw-r-- 1 user user 0 окт 20 22:21 /home/user/temp-file.txt

Команда «ls -l» позволяет распознать наличие бита setuid за счет специальной буквы «s», которая заменяет «x» в правах владельца. При этом маленькая буква «s» говорит о том, что до назначения setuid у владельца уже было право на выполнение, а большая «S» свидетельствует об обратном.

Заметка
Устанавливайте специальный бит setuid только по необходимости. Linux считается очень защищенной операционной системой от разного рода атак. Однако бездумное распределение прав может привести к нежелательным последствиям.

Бит Setgit

В отличие от предыдущего специального бита setgit может быть установлен как для файла, так и для директории. Если он применен для исполняемого файла, любой пользователь, запустивший его на выполнение, будет иметь права группы, привязанной к этому файлу. Установка setgit для директории имеет другое значение. Ко всем файлам, вновь созданным в такой директории, автоматически привязывается группа директории, а не создателя.

Аналогично setuid вы можете использовать как буквенную запись назначения прав, так и восьмеричную. В буквенной записи используйте символ «s» с привязкой к группе, а в восьмеричной системе сложите с основной последовательностью чисел значение «2000».

#пример установки бита setgit для временного файла
ls -l ~/temp-file.txt
-rwxrw-r-- 1 user user 0 окт 20 22:21 /home/user/temp-file.txt

chmod g+s ~/temp-file.txt
ls -l ~/temp-file.txt
-rwsrwSr-- 1 user user 0 окт 20 22:21 /home/user/temp-file.txt

Наличие специального бита setgit можно увидеть, запустив команду «ls -l». Если он присутствует, право на выполнение для группы будет заменено символом «s» или «S».

Бит Sticky

Последний бит из расширенных прав доступа Linux используется только для директорий. Его наличие позволяет удалять файлы, присутствующие внутри директории, только их владельцам. Назначение бита происходит в буквенной записи команды chmod с помощью символа «t», а в восьмеричной за счет сложения основного ряда чисел со значением «1000».

#пример установки бита sticky для директории
mkdir ~/new-directory
ls -l ~/
drwxrwxr-x 2 user user 4096 окт 20 22:29 new-directory
…

chmod +t ~/new-directory
ls -l ~/
drwxrwxr-t 2 user user 4096 окт 20 22:29 new-directory
…

Как и в прошлых примерах, команда ls покажет наличие бита sticky. Маленькая буква «t» заменит флаг «x» в участке, отвечающим за права остальных пользователей, а если «x» не был установлен, на его месте появится большая «T».

Последние публикации