Лучшие практики защиты файловых систем Linux с помощью специальных разрешений

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

205 просмотров

Лучшие практики защиты файловых систем Linux с помощью специальных разрешений

Разрешения файлов в Linux составляют основу безопасности системы, контролируя, кто может читать, записывать и выполнять файлы. В то время как стандартные разрешения на чтение/запись/выполнение (rwx) являются фундаментальными, Linux вводит специальные биты разрешений — SUID, SGID и Sticky Bit — для управления контекстом выполнения и целостностью общих ресурсов. Освоение этих разрешений позволяет администраторам безопасно предоставлять специфические повышенные возможности, обеспечивая необходимую функциональность при минимизации рисков безопасности.

Данное руководство глубоко погружается в практическое применение и последствия для безопасности Set User ID (SUID), Set Group ID (SGID) и Sticky Bit. Понимание того, когда и как развертывать эти функции, имеет решающее значение для поддержания операционной эффективности без ущерба для общей безопасности вашей среды Linux.

Краткий обзор стандартных разрешений

Прежде чем изучать специальные разрешения, важно вспомнить стандартную тройную нотацию (rwx для владельца, группы и других). Эти разрешения представлены численно с использованием восьмеричных значений (например, 755 или 644).

  • r (Read/Чтение) = 4
  • w (Write/Запись) = 2
  • x (Execute/Выполнение) = 1

Специальные разрешения изменяют это базовое поведение и представлены четвертой, ведущей восьмеричной цифрой (4, 2 или 1).

Специальные разрешения: SUID, SGID и Sticky Bit

Специальные разрешения добавляют функциональность, выходящую за рамки стандартного контроля доступа. Обычно они обозначаются в выводе длинного листинга (ls -l) буквой s или t, заменяющей стандартный флаг x.

Разрешение Восьмеричное значение Эффект
SUID (Set User ID) 4 Файл выполняется с разрешениями владельца файла (а не пользователя, который его запускает).
SGID (Set Group ID) 2 Файл выполняется с разрешениями группы файла, или новые файлы наследуют ID группы родительского каталога.
Sticky Bit 1 Запрещает пользователям удалять или переименовывать файлы, принадлежащие другим пользователям, в общем каталоге, даже если они имеют разрешение на запись в этот каталог.

1. Set User ID (SUID)

Бит SUID мощный и потенциально опасный при неправильном использовании. Когда он установлен для исполняемого файла, любой пользователь, запускающий этот файл, выполняет процесс с правами владельца.

Практический сценарий использования: Утилиты, которым требуются права root для выполнения определенной задачи, но которые не должны предоставлять пользователю общий доступ root.

Пример: SUID для /usr/bin/passwd

Команда /usr/bin/passwd обычно требует доступа root для изменения защищенного файла /etc/shadow. У нее установлен бит SUID, что позволяет обычному пользователю временно получить права владельца (root) только на время выполнения passwd для смены своего пароля.

Просмотр SUID: Обратите внимание на s в слоте выполнения владельца:

ls -l /usr/bin/passwd
# Пример вывода: -rwsr-xr-x 1 root root ... /usr/bin/passwd

Установка SUID: Используйте восьмеричное значение 4 в сочетании со стандартными разрешениями (например, 755 становится 4755):

# Предполагая, что 'my_script' принадлежит 'appuser'
chmod 4755 /path/to/my_script

Предупреждение безопасности для SUID: Никогда не устанавливайте бит SUID для универсальных оболочек (например, /bin/bash) или скриптов, которые интерпретируют внешний ввод, так как это предоставляет неограниченный доступ root любому, кто запускает файл.

2. Set Group ID (SGID)

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

A. SGID для исполняемых файлов

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

B. SGID для каталогов (Критически важно для общих сред)

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

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

Установка SGID для каталога: Используйте восьмеричное значение 2 в сочетании со стандартными разрешениями (например, 775 становится 2775):

# Установить групповое владение на 'developers' и включить SGID
chgrp developers /srv/shared_project
chmod 2775 /srv/shared_project

3. Sticky Bit

Sticky Bit (или атрибут сохранения текста) почти исключительно используется для общих каталогов для контроля удаления файлов.

Когда Sticky Bit установлен для каталога, только владелец файла в этом каталоге или пользователь root может удалить или переименовать этот файл, даже если сам каталог разрешает запись для 'других' (o+w).

Практический сценарий использования: Общедоступные общие каталоги, такие как /tmp или папки загрузки отделов, где пользователи должны иметь возможность управлять только теми файлами, которые они создали.

Пример: Каталог /tmp

Каталог /tmp часто имеет разрешения, подобные 1777. 1 указывает на активность Sticky Bit.

ls -ld /tmp
# Пример вывода: drwxrwxrwt 15 root root 4096 Mar 10 11:30 /tmp

Буква t в конце подтверждает, что Sticky Bit установлен. Без него любой пользователь мог бы удалить файлы, созданные другими пользователями в /tmp.

Установка Sticky Bit: Используйте восьмеричное значение 1 в сочетании со стандартными разрешениями (например, 777 становится 1777):

chmod 1777 /var/public_uploads

Комплексное управление: Объединение специальных разрешений

Специальные разрешения часто комбинируются. Четвертая ведущая цифра — это сумма желаемых специальных битов (4+2+1 = 7).

Желаемые разрешения Восьмеричное значение
Стандартные rwxr-xr-x (755) 755
SUID + rwxr-xr-x 4755
SGID + rwxr-xr-x 2755
Sticky Bit + rwxrwxrwx 1777
SUID + SGID + Sticky Bit + rwx (Редко требуется) 7777

Пример комбинирования SGID и Sticky Bit для общих папок:

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

  1. Установить групповое владение: chgrp team /data/projectX
  2. Применить SGID (2) + Стандартные rwx (7) + Sticky Bit (1) $\rightarrow 2+1 = 3$ для специальных битов.
    • Используя явную сумму: SGID (2) + Sticky Bit (1) = 3. Стандартные разрешения 775.
    • Полная команда: chmod 3775 /data/projectX

При просмотре этого: drwxrwxrw t (или drwxrwsrw t, если групповой бит использовался и для выполнения).

Лучшие практики безопасности специальных разрешений

Из-за повышенных привилегий, которые предоставляют SUID и SGID, ими следует управлять с крайней осторожностью.

  1. Ограничьте область действия SUID: Устанавливайте SUID только для скомпилированных бинарных исполняемых файлов, необходимых для стандартных операций (например, passwd, ping). Никогда не применяйте SUID к интерпретируемым скриптам (Shell, Python, Perl), если они не обернуты в безопасный исполняемый файл-обертку, который проверяет ввод.
  2. Регулярный аудит: Периодически сканируйте файловую систему на наличие необычных файлов SUID/SGID с помощью команды find:
    bash # Найти все файлы с установленным SUID find / -perm /4000 2>/dev/null # Найти все файлы с установленным SGID find / -perm /2000 2>/dev/null
  3. Используйте SGID для согласованности групп: Предпочитайте SGID ручному управлению групповым владением файлов в общих структурах данных; это автоматизирует наследование групп.
  4. Sticky Bit для общедоступных записываемых областей: Sticky Bit необходим для любого каталога, предназначенного для общего использования пользователями, где необходимо ограничить удаление невладельцами (например, /tmp, /var/tmp).

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