Вы когда-нибудь оказывались в ситуации, когда вам нужно было выполнить задачу на системе Linux, только чтобы столкнуться с раздражающим отказом в доступе? Ну что ж, попрощайтесь с этими проблемами и приветствуйте мир специальных разрешений в Linux!
Этот учебник – ваш билет к освоению тонкостей специальных разрешений в Linux — Sticky Bit, Set User ID (SUID) и Set Group ID (SGID). Эти специальные разрешения предлагают более высокий уровень контроля безопасности.
Читайте дальше и уверенно управляйте своими файлами с точностью!
Предварительные требования
Прежде чем вы погрузитесь в детали специальных разрешений в Linux, убедитесь, что у вас есть машина Linux. В этом учебнике используется Ubuntu 22.04 LTS (Jammy Jellyfish) для практических демонстраций.
Выполнение файлов со специальными разрешениями в Linux (SUID)
Разрешения файлов Linux обычно определяют возможность пользователя читать, писать или выполнять файл на основе его разрешений и разрешений его группы. Тем не менее, есть ситуации, когда пользователю необходимо выполнять файл с разрешениями владельца файла, а не своими.
Например, представьте программу, которую могут запускать только пользователи root, но обычному пользователю требуется выполнить ее для конкретной задачи. В таких случаях SUID становится бесценным.
Чтобы увидеть, как установить права SUID, выполните следующие шаги:
1. Откройте терминал и выполните следующие команды, чтобы создать пользователя (useradd
) под названием A-user
(произвольно) и задать ему пароль (passwd
).

2. Затем выполните команду stat
, чтобы просмотреть существующие разрешения команды cat
.
Обратите внимание на существующие разрешения доступа, так как они будут нужны для сравнения позже:
- 0755 – Позволяет выполнять файл с правами его владельца, предоставляя повышенные привилегии непривилегированным пользователям при запуске файла.
- -rwxr-xr-x – Устанавливает разрешение на чтение, запись и выполнение файла владельцу (rwx), а члены группы и другие пользователи могут читать и выполнять файл (r-x и r-x).

cat
command3. Теперь выполните нижеприведенную команду chmod
, которая не выводит результат, но устанавливает бит SUID для команды cat
.
Эта команда позволяет команде cat
выполняться с правами владельца файла, а не с правами пользователя, запустившего команду.
? Обратите внимание, что использование SUID следует выполнять осторожно, так как неправильная реализация может потенциально внести риски безопасности. Убедитесь, что вы применяете SUID только к доверенным командам и файлам.
4. После установки бита SUID выполните следующую команду stat
, чтобы проверить бит SUID, перепроверив разрешения команды cat
.
При успешном выполнении вы увидите следующее, где вы сравните информацию, которую вы записали на втором шаге:
- 0755 изменено на 4755, где число 4 представляет бит SUID.
- -rwxr-xr-x изменено на -rwsr-xr-x, где s представляет место разрешения на выполнение пользователя (x) соответственно.

5. Запустите следующую команду cat
, чтобы проверить разрешение текущего пользователя на доступ к файлу /etc/shadow
. Этот файл является критическим системным файлом, который хранит зашифрованные пароли пользователей и связанную информацию, к которому может обращаться только root-пользователь.
По умолчанию команда cat
позволяет просматривать содержимое файла в Linux. Однако это поведение не всегда соблюдается для каждого файла.
Появляется сообщение ниже, поскольку текущему пользователю не разрешен доступ к файлу.

6. Теперь выполните каждую команду ниже, чтобы переключиться (su
) на нового пользователя (A-user
) и снова попробуйте получить доступ к файлу /etc/shadow
.
На этот раз команда cat
будет выполняться с разрешениями владельца файла (обычно root), а не с разрешениями пользователя, который выполнил команду.
Поскольку вы временно предоставили разрешение A-user на чтение содержимого этого файла, вы получите вывод, подобный приведенному ниже.

7. По соображениям безопасности выполните следующие команды, чтобы exit
из текущего пользователя (A-user) и вернуть разрешения команды cat
в его исходное состояние.

cat
command8. Наконец, выполните следующую команду, чтобы убедиться, что бит SUID был удален.
Обратите внимание, что биты SUID 4 и s больше не присутствуют в правах доступа.

Включение совместной работы в каталогах Linux (SGID)
Выполнение файлов с особыми разрешениями в Linux через SUID безусловно работает хорошо. Но что, если вы стремитесь к совместной работе, где несколько пользователей работают над проектами? Обычно вы должны убедиться, что новые созданные файлы наследуют групповое владение родительского каталога.
Когда вы сталкиваетесь с таким сценарием, SGID становится определяющим фактором. Эта мощная функция упрощает управление общими ресурсами и улучшает групповые рабочие процессы в средах Linux.
Для того чтобы увидеть, как работает SGID, вы создадите группу, добавите в нее пользователей, установите разрешение SGID на каталоге и протестируете его функциональность следующим образом:
1. Выполните следующие команды, чтобы войти в систему от имени пользователя root и создать новую группу с именем demo
(произвольное). Эта группа будет использоваться для тестирования функциональности SGID.
Эти команды не выполняют никаких

2. Затем выполните команды ниже, чтобы создать двух пользователей (userA
и userB
), которых вы будете использовать для имитации совместной работы.

3. После создания новых пользователей выполните нижеуказанные команды usermod
, которые не выводят информацию в терминал, но добавляют пользователей (userA
и userB
) в группу demo
.
4. Теперь выполните каждую из перечисленных ниже команд, создайте каталог (mkdir
) с именем /demo-dir
(произвольное) и установите владельцев каталога userA
и demo
соответственно.
? При успешном выполнении эти команды не выводят информацию, что применимо ко всему этому руководству.
5. Затем выполните следующую команду ls
, чтобы просмотреть разрешения каталога /demo-dir
.
Выходные данные ниже подтверждают, что пользователь каталога /demo-dir установлен как userA, а группа как demo.

6. После подтверждения разрешений выполните следующую команду chmod
для установки бита SGID в каталоге /demo-dir/
следующим образом:
g+s
– Set the SGID bit on the/demo-dir/
directory.o-rwx
– Remove all permissions (read, write, execute) for others.u+rwx
– Grant read, write, and execute permissions to the owner.g+rwx
– Grant read, write, and execute permissions to the group.
7. После установки SGID выполните следующую команду для проверки разрешений каталога /demo-dir
.
В случае успешного выполнения вы увидите установленный бит SGID, представленный числом 2
перед восьмеричным режимом разрешения и s
в области разрешения на выполнение владельца группы (x
) (rws
).

8. Затем выполните каждую из следующих команд для создания каталога /home
для userA
.
9. Выполните следующие команды для переключения (su
) на userA
и создания файла (touch
) с именем textA.txt
(произвольно) в каталоге /demo-dir
.
Эти команды не выводят никаких результатов (что применяется на протяжении всего данного руководства), но вы проверите разрешения файла на следующем шаге.
10. Запустите следующую команду ls
, чтобы просмотреть разрешения файла textA.txt
.
Ниже файл textA.txt принадлежит группе demo, которая является основной группой создателя, userA. Члены группы demo могут читать и изменять файл, в то время как другие могут только читать его.
Чтобы новые файлы в каталоге /demo-dir наследовали групповую принадлежность каталога, на каталоге должен быть установлен бит SGID, о чем вы узнаете в следующих шагах.

11. Теперь выполните следующие команды, чтобы выйти
из текущего пользователя (userA) и установить бит SGID (chmod g+s
) в каталоге /demo-dir

12. Как только установлен бит SGID, выполните следующую команду, чтобы проверить бит SGID, который вы добавили в каталог /demo-dir
.
Как показано ниже, вы заметите, что добавлен бит SUID 2, и есть s в месте выполнения владельца группы. Этот вывод подтверждает успешную установку бита SGID для каталога /demo-dir.

13. Затем переключитесь обратно на userA
и создайте еще один файл с именем testA.txt
(произвольно) в каталоге /demo-dir
.
14. После создания выполните команду ls
ниже, чтобы проверить принадлежность нового файла (testA.txt
).
Если SGID работает как ожидается, вывод показывает, что в то время как пользователь userA является владельцем, владение группой принадлежит demo из-за установленного бита SGID на каталоге /demo-dir.

15. Теперь создайте каталог /home
для userB
, чтобы дополнительно протестировать функциональность SGID.
16. Переключитесь на userB
и создайте файл с именем testB.txt
(произвольно) в том же каталоге /demo-dir
.

17. Просмотреть (ls
) информацию о новом файле (testB.txt
).
Проверьте владение файлом textB.txt.

Защита файлов в каталогах (Клейкий бит)
Включение совместных рабочих процессов в каталогах Linux способствует командной работе и безпрепятственному взаимодействию. Но когда необходимо создать безопасную среду для эффективного управления файлами, права Sticky Bit справятся с этой задачей.
Установив Sticky Bit, вы, по сути, передаете “ключи к замку” в руки владельца файла, владельца каталога или пользователя root. Таким образом, гарантируется, что только они имеют право на удаление или переименование файла внутри каталога, обеспечивая дополнительную защиту для конфиденциальных данных.
Чтобы установить права Sticky Bit, сначала необходимо создать общий каталог с помощью следующих шагов:
1. Войдите в систему под пользователем root и создайте (общий) каталог (\texttt{mkdir}), в котором несколько пользователей могут создавать файлы.
2. Затем выполните следующие команды для изменения разрешений на каталоге /shared-dir
, чтобы предоставить всем права на запись.
Первая цифра (1
) в 1777
устанавливает стикер-бит, в то время как остальные (777
) делают каталог читаемым, записываемым и исполняемым для всех.
Следующие функции или атрибуты стикер-бита в системе Linux:
Feature | Function |
Directory Protection | When the Sticky Bit is set on a directory, it allows only the owner of a file within that directory to delete or rename their own files. Other users, even if they have write permissions to the directory, cannot delete or rename files owned by other users. |
Shared Directories | The sticky bit is handy for directories that are shared among multiple users. For example, on a system with a /tmp directory used by all users to store temporary files, setting the Sticky Bit prevents users from accidentally or maliciously deleting files owned by other users. |
Ниже вы можете видеть букву ‘t’ в последней части поля разрешений, что указывает на то, что стикер-бит установлен для каталога /shared-dir.

3. Переключитесь на пользователя userA
и создайте файл с именем fileA.txt
(произвольное) в каталоге /shared-dir
:
4. Выйдите из пользователя userA, переключитесь на пользователя userB
и создайте еще один файл с именем fileB.txt
(произвольное) в том же каталоге /shared-dir
.
5. Теперь выйдите из пользователя B
, переключитесь на пользователя A
и попробуйте удалить файл fileB.txt
пользователя B.
Вы получите вывод, подобный приведенному ниже, поскольку только владелец файла может вносить изменения или удалять файл.

6. Наконец, выполните следующий список команд (ls
) для отображения всех файлов в общем каталоге (/shared-dir
).
Если разрешения Sticky Bit работают, вы увидите, что файл fileB.txt, созданный пользователем B, находится в безопасности и не был удален.

Заключение
Подводя итог этому исследованию специальных разрешений в Linux, вы разблокировали мощный набор инструментов: SUID, SGID и Sticky Bit. Вооружившись этими знаниями, вы теперь можете настраивать контроль доступа и обеспечивать безопасность ваших файлов с высокой точностью.
Но не останавливайтесь на достигнутом! Почему бы не попробовать настроить общий каталог с SGID и экспериментировать с тем, как файлы наследуют групповую принадлежность? Мир Linux открыт перед вами, и с каждым новым усилием вы освоите искусство обеспечения безопасности вашей системы с изыском!
Source:
https://adamtheautomator.com/special-permissions-in-linux/