Специальные разрешения в Linux: SUID, SGID и защитный бит

Вы когда-нибудь оказывались в ситуации, когда вам нужно было выполнить задачу на системе 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).

sudo useradd A-user
sudo passwd A-user
Creating a new user

2. Затем выполните команду stat, чтобы просмотреть существующие разрешения команды cat.

stat /usr/bin/cat

Обратите внимание на существующие разрешения доступа, так как они будут нужны для сравнения позже:

  • 0755 – Позволяет выполнять файл с правами его владельца, предоставляя повышенные привилегии непривилегированным пользователям при запуске файла.
  • -rwxr-xr-x – Устанавливает разрешение на чтение, запись и выполнение файла владельцу (rwx), а члены группы и другие пользователи могут читать и выполнять файл (r-x и r-x).
Viewing access permissions of the cat command

3. Теперь выполните нижеприведенную команду chmod, которая не выводит результат, но устанавливает бит SUID для команды cat.

Эта команда позволяет команде cat выполняться с правами владельца файла, а не с правами пользователя, запустившего команду.

? Обратите внимание, что использование SUID следует выполнять осторожно, так как неправильная реализация может потенциально внести риски безопасности. Убедитесь, что вы применяете SUID только к доверенным командам и файлам.

sudo chmod u+s /usr/bin/cat

4. После установки бита SUID выполните следующую команду stat, чтобы проверить бит SUID, перепроверив разрешения команды cat.

stat /usr/bin/cat

При успешном выполнении вы увидите следующее, где вы сравните информацию, которую вы записали на втором шаге:

  • 0755 изменено на 4755, где число 4 представляет бит SUID.
  • -rwxr-xr-x изменено на -rwsr-xr-x, где s представляет место разрешения на выполнение пользователя (x) соответственно.
Verifying the SUID bit

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

По умолчанию команда cat позволяет просматривать содержимое файла в Linux. Однако это поведение не всегда соблюдается для каждого файла.

cat /etc/shadow

Появляется сообщение ниже, поскольку текущему пользователю не разрешен доступ к файлу.

Viewing the /etc/shadow file’s content via a user without appropriate permissions

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

На этот раз команда cat будет выполняться с разрешениями владельца файла (обычно root), а не с разрешениями пользователя, который выполнил команду.

# Переключиться на A-user
su A-user
# Просмотреть содержимое файла /etc/shadow
cat /etc/shadow

Поскольку вы временно предоставили разрешение A-user на чтение содержимого этого файла, вы получите вывод, подобный приведенному ниже.

Viewing the /etc/shadow file’s content

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

exit
sudo chmod u-s /usr/bin/cat
Removing the SUID bit from the cat command

8. Наконец, выполните следующую команду, чтобы убедиться, что бит SUID был удален.

stat /usr/bin/cat

Обратите внимание, что биты SUID 4 и s больше не присутствуют в правах доступа.

Confirming the SUID bit removal

Включение совместной работы в каталогах Linux (SGID)

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

Когда вы сталкиваетесь с таким сценарием, SGID становится определяющим фактором. Эта мощная функция упрощает управление общими ресурсами и улучшает групповые рабочие процессы в средах Linux.

Для того чтобы увидеть, как работает SGID, вы создадите группу, добавите в нее пользователей, установите разрешение SGID на каталоге и протестируете его функциональность следующим образом:

1. Выполните следующие команды, чтобы войти в систему от имени пользователя root и создать новую группу с именем demo (произвольное). Эта группа будет использоваться для тестирования функциональности SGID.

Эти команды не выполняют никаких

# Переключиться на root
sudo su
# Создать новую группу
groupadd demo
Switching to root and creating a job

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

useradd -s /bin/bash userA
passwd userA

useradd -s /bin/bash userB
passwd userB
Creating users with passwords for simulating a collaborative environment

3. После создания новых пользователей выполните нижеуказанные команды usermod, которые не выводят информацию в терминал, но добавляют пользователей (userA и userB) в группу demo.

usermod -aG demo userA
usermod -aG demo userB

4. Теперь выполните каждую из перечисленных ниже команд, создайте каталог (mkdir) с именем /demo-dir (произвольное) и установите владельцев каталога userA и demo соответственно.

? При успешном выполнении эти команды не выводят информацию, что применимо ко всему этому руководству.

# Создать каталог
mkdir /demo-dir
# Изменить владельца каталога
chown userA:demo /demo-dir

5. Затем выполните следующую команду ls, чтобы просмотреть разрешения каталога /demo-dir.

ls -ld /demo-dir/

Выходные данные ниже подтверждают, что пользователь каталога /demo-dir установлен как userA, а группа как demo.

Viewing the /demo-dir directory’s permissions

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.
chmod g+s,u+rwx,g+rwx,o-rwx /demo-dir/

7. После установки SGID выполните следующую команду для проверки разрешений каталога /demo-dir.

stat /demo-dir

В случае успешного выполнения вы увидите установленный бит SGID, представленный числом 2 перед восьмеричным режимом разрешения и s в области разрешения на выполнение владельца группы (x) (rws).

Verifying the SGID bit set to the /demo-dir directory

8. Затем выполните каждую из следующих команд для создания каталога /home для userA.

mkdir /home/userA
chown userA:userA /home/userA

9. Выполните следующие команды для переключения (su) на userA и создания файла (touch) с именем textA.txt (произвольно) в каталоге /demo-dir.

Эти команды не выводят никаких результатов (что применяется на протяжении всего данного руководства), но вы проверите разрешения файла на следующем шаге.

# Переключиться на userA
su - userA
# Изменить каталог
cd /demo-dir
# Создать текстовый файл
touch textA.txt

10. Запустите следующую команду ls, чтобы просмотреть разрешения файла textA.txt.

ls -l textA.txt

Ниже файл textA.txt принадлежит группе demo, которая является основной группой создателя, userA. Члены группы demo могут читать и изменять файл, в то время как другие могут только читать его.

Чтобы новые файлы в каталоге /demo-dir наследовали групповую принадлежность каталога, на каталоге должен быть установлен бит SGID, о чем вы узнаете в следующих шагах.

Verifying the textA.txt file’s permissions

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

# Выйти из userA
exit
# Установить SGID в /demo-dir
chmod g+s /demo-dir
Setting the SGID bit to the /demo-dir directory

12. Как только установлен бит SGID, выполните следующую команду, чтобы проверить бит SGID, который вы добавили в каталог /demo-dir.

stat /demo-dir

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

Verifying the SGID is set to the /demo-dir directory

13. Затем переключитесь обратно на userA и создайте еще один файл с именем testA.txt (произвольно) в каталоге /demo-dir.

# Переключиться на userA
su - userA
# Изменить каталог
cd /demo-dir
# Создать текстовый файл
touch testA.txt

14. После создания выполните команду ls ниже, чтобы проверить принадлежность нового файла (testA.txt).

ls -l testA.txt

Если SGID работает как ожидается, вывод показывает, что в то время как пользователь userA является владельцем, владение группой принадлежит demo из-за установленного бита SGID на каталоге /demo-dir.

Verifying permissions of the testA.txt file

15. Теперь создайте каталог /home для userB, чтобы дополнительно протестировать функциональность SGID.

mkdir /home/userB
chown userB:userB /home/userB

16. Переключитесь на userB и создайте файл с именем testB.txt (произвольно) в том же каталоге /demo-dir.

# Переключиться на пользователя B
su - userB
# Сменить каталог
cd /demo-dir
# Создать текстовый файл
touch testB.txt
Switching to userB and creating the testB.txt file

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

ls -l testB.txt

Проверьте владение файлом textB.txt.

Checking the ownership of the textB.txt file

Защита файлов в каталогах (Клейкий бит)

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

Установив Sticky Bit, вы, по сути, передаете “ключи к замку” в руки владельца файла, владельца каталога или пользователя root. Таким образом, гарантируется, что только они имеют право на удаление или переименование файла внутри каталога, обеспечивая дополнительную защиту для конфиденциальных данных.

Чтобы установить права Sticky Bit, сначала необходимо создать общий каталог с помощью следующих шагов:

1. Войдите в систему под пользователем root и создайте (общий) каталог (\texttt{mkdir}), в котором несколько пользователей могут создавать файлы.

# Переключитесь на root
sudo su
# Создайте каталог (общий)
mkdir /shared-dir

2. Затем выполните следующие команды для изменения разрешений на каталоге /shared-dir, чтобы предоставить всем права на запись.

Первая цифра (1) в 1777 устанавливает стикер-бит, в то время как остальные (777) делают каталог читаемым, записываемым и исполняемым для всех.

# Измените разрешения, установите стикер-бит
chmod 1777 /shared-dir
# Просмотр разрешений каталога
ls -ld /shared-dir

Следующие функции или атрибуты стикер-бита в системе 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.

Viewing permissions of the /shared-dir directory

3. Переключитесь на пользователя userA и создайте файл с именем fileA.txt (произвольное) в каталоге /shared-dir:

# Переключитесь на пользователя userA
su - userA
# Создайте текстовый файл
touch /shared-dir/fileA.txt

4. Выйдите из пользователя userA, переключитесь на пользователя userB и создайте еще один файл с именем fileB.txt (произвольное) в том же каталоге /shared-dir.

# Выйти из пользователя A
exit
# Переключиться на пользователя B
su - userB
# Создать текстовый файл
touch /shared-dir/fileB.txt

5. Теперь выйдите из пользователя B, переключитесь на пользователя A и попробуйте удалить файл fileB.txt пользователя B.

# Выйти из пользователя B
exit
# Переключиться на пользователя A
su - userA
# Удалить файл, принадлежащий пользователю B
rm /shared-dir/fileB.txt

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

Attempting to delete a file (fileB.txt) owned by another user (userB)

6. Наконец, выполните следующий список команд (ls) для отображения всех файлов в общем каталоге (/shared-dir).

ls /shared-dir/

Если разрешения Sticky Bit работают, вы увидите, что файл fileB.txt, созданный пользователем B, находится в безопасности и не был удален.

Confirming the fileB.txt file still exists

Заключение

Подводя итог этому исследованию специальных разрешений в Linux, вы разблокировали мощный набор инструментов: SUID, SGID и Sticky Bit. Вооружившись этими знаниями, вы теперь можете настраивать контроль доступа и обеспечивать безопасность ваших файлов с высокой точностью.

Но не останавливайтесь на достигнутом! Почему бы не попробовать настроить общий каталог с SGID и экспериментировать с тем, как файлы наследуют групповую принадлежность? Мир Linux открыт перед вами, и с каждым новым усилием вы освоите искусство обеспечения безопасности вашей системы с изыском!

Source:
https://adamtheautomator.com/special-permissions-in-linux/