Перейти к основному контенту

Права в Linux

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

Как устроены права в Linux

В основе модели безопасности Linux лежат два понятия: владелец и права доступа.

  • Владелец: Каждый файл и каждая папка принадлежат одному пользователю и одной группе.
  • Права доступа: Для трёх категорий пользователей определяются наборы прав на чтение (r), запись (w) и выполнение (x):
    • Владелец (user) — пользователь, который создал файл или папку.
    • Группа (group) — все пользователи, входящие в группу-владельца файла.
    • Остальные (others) — все остальные пользователи системы.

Различия между файлом и папкой

Права r, w, x интерпретируются для файлов и папок по-разному:

Право Значение для файла Значение для папки
Чтение ( r ) Открыть и посмотреть содержимое файла (cat, less) Получить список содержимого папки (ls)
Запись ( w ) Изменить, удалить или переименовать файл Создавать, удалять и переименовывать файлы внутри папки
Выполнение (x) Запустить файл как программу или скрипт Перейти в папку с помощью cd. Без права x вы вообще не сможете войти в папку

Команды для просмотра прав

Самый простой способ посмотреть права — использовать команду ls с ключом -l.

  • ls -l показывает расширенный список файлов и папок в текущей директории.
    • image.png

  • ls -ld /some/path показывает права указанной папки, а не её содержимого.
    • image.png

  • tree -p показывает права для каждого элемента в виде дерева.
    • image.png

  • Для файловых систем ext2/ext3/ext4 существует также команда lsattr, которая отображает расширенные атрибуты.

Обозначения прав (символы и цифры)

Например вывод ls -l для файла myfile.txt содержит строку -rw-r--r--. Это 10 символов, каждый из которых имеет значение:

  1. 1-й символ — тип объекта. - для файла, d для папки.
  2. 2-4 символы — права для владельца.
  3. 5-7 символы — права для группы.
  4. 8-10 символы — права для остальных.

В нашем примере строку -rw-r--r-- можно расшифровать так:

  • Владелец (rw-): может читать (r) и писать (w), но не может выполнять (-).
  • Группа (r--): может только читать (r).
  • Остальные (r--): также могут только читать.
  • Стандартные права 644 (rw-r--r--) идеально подходят для текстовых файлов: владелец может их редактировать, а все остальные — только просматривать.
Числовой (восьмеричный) способ задания прав

Каждому праву соответствует числовое значение:

  • r (read) = 4
  • w (write) = 2
  • x (execute) = 1

Чтобы получить число для владельца, группы или остальных, нужно сложить значения соответствующих прав.

Примеры:

  • rwx = 4+2+1 = 7 (полный доступ)
  • rw- = 4+2+0 = 6 (чтение и запись, без выполнения)
  • r-- = 4+0+0 = 4 (только чтение)
  • r-x = 4+0+1 = 5 (чтение и выполнение)

Таким образом, права rwxr-xr-x преобразуются в число 755, а rw-r--r-- — в 644.

Управление правами доступа

Для изменения прав и владельца используются команды chmod и chown.

  • chown change owner. Изменяет владельца и/или группу файла/папки.
  • chmodchange mode. Изменяет права доступа (режим) файла/папки.

Как изменить права доступа (chmod)

Синтаксис команды chmod:

chmod [опции] [режим] [файл/папка]
Символьный способ

Использует буквы для обозначения категорий (u, g, o, a), операций (+, -, =) и прав (r, w, x).

Например, чтобы дать владельцу (u) право на выполнение (+x) файла script.sh, выполните:

chmod u+x script.sh

А чтобы снять с группы (g) право на запись (-w), наберите:

chmod g-w script.sh
 Числовой способ

Более быстрый способ, так как одной командой можно установить все три группы прав сразу.

  • chmod 755 script.sh - даёт владельцу полные права (rwx), а группе и остальным - права на чтение и выполнение (r-x).
  • chmod 644 README.txt - даёт владельцу права на чтение и запись (rw-), а группе и остальным - только на чтение (r--).

Другие полезные опции chmod

  • -R (Recursive): применяет права рекурсивно ко всем файлам и папкам внутри указанной директории.
    • chmod -R 755 ./public_html

       

  • -v (Verbose): подробно отображает все изменения, позволяя увидеть, что именно было сделано с каждым файлом.
  • -c (Changes): похож на -v, но выводит информацию только о тех файлах, права которых действительно были изменены.

Изменение владельца файла (chown).

Важно! Для большинства операций с chown потребуются права суперпользователя (sudo).

Синтаксис команды chown:

sudo chown [опции] [новый_владелец][:[новая_группа]] [файл/папка]

Основные приёмы работы с chown

  • Сменить только владельца
    • sudo chown newuser file.txt
  • Сменить владельца и группу одновременно
    • sudo chown newuser:newgroup file.txt
  • Сменить только группу
    • sudo chown :newgroup file.txt
    • (что аналогично работе команды chgrp).
  • Рекурсивная смена владельца
    • sudo chown -R www-data:www-data ./my_site/
    • Этот пример особенно актуален для веб-серверов, где владельцем всех файлов сайта должен быть пользователь веб-сервера (www-data, nginx, apache и т.д.).

Важные ограничения

  • Изменить владельца файла может только текущий владелец файла или суперпользователь (root).
  • Обычный пользователь не может передать владение файлом другому пользователю, если только он не является root.

Расширенные атрибуты файлов

Помимо стандартных прав (rwx), в Linux существуют расширенные атрибуты файловых систем (поддерживаются в ext2, ext3, ext4, XFS, Btrfs и др.). Это ещё один слой защиты, который может сделать файл неизменяемым или append-only.

Что такое атрибуты и какие они бывают

Самые полезные для повседневной работы атрибуты:

Атрибут Эффект для файла Эффект для каталога
i (immutable) Неизменяемый: нельзя редактировать, удалять, переименовывать или создавать на него ссылки. Неизменяемый: нельзя удалять, переименовывать каталог, создавать или удалять в нём файлы.
a (append-only) Только добавление: открыть файл можно только в режиме append для добавления данных в конец. Нельзя редактировать или удалять существующие данные. Ограничивает создание и удаление вложенных объектов.
A (No atime updates) Запрещает обновление времени последнего доступа (atime). Полезно для снижения нагрузки на дисковую подсистему при частом чтении файлов. -
d (No dump) Утилита dump не будет создавать резервную копию этого файла. Утилита dump не будет создавать резервную копию этого каталога.
S (Synchronous updates) Все изменения записываются на диск синхронно, как при использовании sync. Изменения записываются синхронно.
Защита от несанкционированного доступа

Если файл или каталог уже защищён правами доступа, зачем нужны дополнительные атрибуты? Классический пример: злоумышленник, получивший права root, может обойти любые стандартные ограничения. Однако при активном атрибуте +i даже суперпользователь не сможет удалить жизненно важный лог-файл до тех пор, пока атрибут не будет снят. Это позволяет предотвратить заметание следов и прочие деструктивные действия.

Как изменить атрибуты (chattr и lsattr)

Для работы с атрибутами используются две ключевые команды:

  • lsattr — для просмотра атрибутов.
  • chattr — для изменения атрибутов (требуются права root).
Просмотр атрибутов (lsattr)
lsattr myfile.txt

Вывод:

  • image.png

Для рекурсивного просмотра каталога добавьте флаги -R a (рекурсивно и со скрытыми файлами). Пример: lsattr -Ra /home/user выведет атрибуты всех файлов в выбранной директории и её подпапках.

Изменение атрибутов (chattr)

Синтаксис команды chattr:

sudo chattr [оператор][атрибут] [файл/папка]
  • + — добавить атрибут.
  • - — удалить атрибут.
  • = — оставить только указанные атрибуты, сбросив все остальные.
Примеры использования chattr
  • Сделать файл неприкосновенным (+i)
    • sudo chattr +i secret.conf
    • После этого файл нельзя будет удалить, изменить или переименовать даже под root.
  • Разрешить только добавление в файл (+a)
    • sudo chattr +a log.txt
    • Это идеальный вариант для лог-файлов, так как в них можно только дописывать данные (например, с помощью echo "new line" >> log.txt), но нельзя перезаписать файл или удалить его содержимое.
  • Снять защиту
    • sudo chattr -i secret.conf  # Убирает атрибут неизменяемости
      sudo chattr -a log.txt     # Убирает атрибут append-only

Осторожно при работе с chattr +i! Установка этого атрибута на системные файлы (например, /etc/passwd или /etc/shadow) может привести к серьёзным последствиям — вы не сможете обновить систему, добавить нового пользователя или изменить пароль.

Заключение и полезные советы

Мы рассмотрели три ключевых инструмента безопасности в Linux: стандартные права доступа, изменение владельца и расширенные атрибуты. Для закрепления материала вот несколько практических рекомендаций и идей:

  1. Стандартные права (rwx) — ваша первая линия обороны. Всегда следуйте принципу минимальных привилегий. Не давайте файлам больше прав, чем им необходимо для работы.
    • Для файлов используйте 644.
    • Для папок используйте 755.
    • Для скриптов используйте 700 или 750.
  2. Расширенные атрибуты (chattr) — ваша последняя линия обороны. Используйте их для защиты критически важных файлов, даже от действий суперпользователя. Идеальные кандидаты:
    • Файлы с паролями и ключами (/etc/shadow, SSH-ключи).
    • Конфигурационные файлы критичных сервисов.
    • Неприкосновенные логи (chattr +a).
  3. Внимание к рекурсивным операциям (-R). Всегда дважды проверяйте команды перед использованием chmod -R или chown -R. Один неверный символ может сделать всю вашу систему неработоспособной. Для избежания ошибок сначала выполните команду без аргументов для одного файла и лишь затем, убедившись в её правильности, применяйте рекурсивный обход с ключом -R.
  4. Используйте sudo осознанно. Применяйте повышенные привилегии только для конкретных задач и не работайте под root в повседневной практике.
  5. Используйте дополнительные инструменты.
    • Для получения более подробной информации о правах, помимо стандартного ls -l, обратите внимание на утилиту stat. Она выдаст детализированный вывод, включая числовое представление прав.
    • Для проверки эффективных прав доступа к файлу для конкретного пользователя без необходимости смены пользователя или группы используйте команду namei -l /путь/к/файлу.

Эти нехитрые правила помогут вам избежать множества проблем с безопасностью и сохранить ваши данные в целости.