Права доступа к файлам и директориям в Linux, часть 2

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

Первый из них называют битом смены идентификатора пользователя (или SUID). Его существование обуславливается необходимостью запуска файла от имени владельца файла, даже если запускающий пользователь не является владельцем. Самым популярным примером использования бита смены идентификатора пользователя является файл /etc/passwd, где хранятся пароли всех пользователей, и команда passwd, которая меняет пароли.

Поскольку в файле /etc/passwd хранятся все пароли, владельцем файла является пользователь root. Из этого следует, что только root имеет доступ к файлу (и возможность сменить пароли). Это делало бы невозможным для всех остальных пользователей сменить свой собственный пароль, если бы не бит смены идентификатора пользователя. Данный бит установлен для исполняемого файла /usr/bin/passwd, поэтому программа смены пароля passwd запускается с правами пользователя root и имеет возможность редактировать файл /etc/passwd. В самой программе задано так, что пользователь может изменить лишь строку со своим паролем.

Вторым атрибутом является бит смены идентификатора группы (SGID). Его суть идентична биту смены идентификатора пользователя.

К примеру, установим SUID и SGID на файл file_test, который лежит в директории /home/test.

chmod +s /home/test/file_test

Права доступа к файлам и директориям в Linux

Как видим, добавление SUID и SGID добавляет символ S в отображаемых правах на файл вместо символа x. Вернуть всё как было можно обратной командой:

chmod -s /home/test/file_test

Права доступа к файлам и директориям в Linux

Если нужно установить отдельно SUID, то используйте команду

chmod u+s /home/test/file_test

Аналогично и со SGID:

chmod g+s /home/test/file_test

Уточним еще отображение символа битов смены идентификатора. На скриншоте выше прописная S ярко выделяется среди остальных символов. Кроме прописной S может использоваться и строчная s. Разница заключается в том, были ли у владельца или группы права на выполнение до установки бита смены идентификатора. Если такие права были, то используется строчная s, если этих прав не было (как в нашем примере), то S будет прописной.

Третьим специализированным атрибутом является бит сохранения задачи. Второе его название — sticky bit (буквально, «клейкий бит» или «бит прилипчивости»). Подобная «пометка» говорит операционной системе, что программу необходимо сохранить в оперативной памяти даже после её завершения. Смысл подобного заключается в экономии времени при последующем запуске программы. В последнее время sticky bit используется всё реже, так как вычислительной мощности современных компьютеров хватает для комфортной работы и без него.

Команда установки бита сохранения задачи не отличается по синтаксису от предыдущих:

chmod +t /home/test/file_test

Удаление sticky bit будет обратной командой:

chmod -t /home/test/file_test

Бит сохранения задачи также имеет два вида отображения. Строчная t говорит о предоставленных ранее правах на выполнение, прописная T об их отсутствии.

Использование sticky bit в каталогах позволяет добиться того, что пользователи могут записывать файлы в каталог, но не могут удалять чужие файлы. Естественно, данное ограничение не касается пользователя root.

До этого все примеры со специальными атрибутами имели лишь символьное отображение. Из прошлой части мы узнали, что есть и цифровое отображение установки прав на файлы и каталоги. Применять его можно и при установке данных специальных битов. Если стандартные права доступа описываются последовательностью из трёх цифр, то символ, отвечающий за установку дополнительных битов, будет четвертым, стоящим впереди остальных трёх. Этот символ также задаётся цифрой, которая, в свою очередь, является суммой из следующих цифр: 4 — SUID, 2 — SGID, 1 — sticky bit. Разберем это на примере ниже.

Права доступа к файлам и директориям в Linux

Пошагово разберем команды со скриншота вверху.

Сперва мы просматриваем права к файлу file_test, который лежит в каталоге /home/test:

ls -l /home/test/file_test

Допустим, что нам надо установить для этого файл SUID и SGID, не меняя установленных до этого прав. Из первой части мы помним, что последовательность rw-rw-r— (не учитываем первый символ, так как он отвечает за тип файла) кодируется как 664. Следовательно, нам надо добавить сумму цифровых значений SUID (4) и SGID (2), а это 4+2=6. И мы получаем 6664:

chmod 6664 /home/test/file_test

Так как прав на выполнение (x) ранее не было, мы получаем прописную S и у прав владельца, и у прав группы.

Вернуть всё как было можно трёхзначным кодом. В нашем примере это 664.

chmod 664 /home/test/file_test

Не остановимся на этом. Что, если нам надо добавить сразу все дополнительные биты? Их сумма будет равна 7, значит команда будет выглядеть следующим образом:

chmod 7664 /home/test/file_test

Ниже опять возвращаем права на файл в исходное состояние.

До этого в примере мы видели лишь прописные символы S и T, так как изначально прав на выполнение ни у кого не было. Дадим права на выполнение владельцу. Также поставим SUID. Команда будет выглядеть как:

chmod 4764 /home/test/file_test

После этого можно убедиться, что символ s уже строчный.

В конце второй части статьи заметим, что не все дополнительные атрибуты применяются как к файлам, так и к каталогам. Таблица ниже поясняет, когда можно использовать SUID, SGID и sticky bit.

Файлы Директории
Бит смены идентификатора пользователя (SUID) +
Бит смены идентификатора группы (SGID) + +
Бит сохранения задачи (sticky bit) +

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

Добавить комментарий

Ваш адрес email не будет опубликован.