Права в 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 показывает расширенный список файлов и папок в текущей директории.
- ls -ld /some/path показывает права указанной папки, а не её содержимого.
- tree -p показывает права для каждого элемента в виде дерева.
- Для файловых систем ext2/ext3/ext4 существует также команда lsattr, которая отображает расширенные атрибуты.
Обозначения прав (символы и цифры)
Например вывод ls -l для файла myfile.txt содержит строку -rw-r--r--. Это 10 символов, каждый из которых имеет значение:
- 1-й символ — тип объекта. - для файла, d для папки.
- 2-4 символы — права для владельца.
- 5-7 символы — права для группы.
- 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. Изменяет владельца и/или группу файла/папки.
- chmod — change 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
Вывод:
Для рекурсивного просмотра каталога добавьте флаги -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: стандартные права доступа, изменение владельца и расширенные атрибуты. Для закрепления материала вот несколько практических рекомендаций и идей:
- Стандартные права (rwx) — ваша первая линия обороны. Всегда следуйте принципу минимальных привилегий. Не давайте файлам больше прав, чем им необходимо для работы.
- Для файлов используйте 644.
- Для папок используйте 755.
- Для скриптов используйте 700 или 750.
- Расширенные атрибуты (chattr) — ваша последняя линия обороны. Используйте их для защиты критически важных файлов, даже от действий суперпользователя. Идеальные кандидаты:
- Файлы с паролями и ключами (/etc/shadow, SSH-ключи).
- Конфигурационные файлы критичных сервисов.
- Неприкосновенные логи (chattr +a).
- Внимание к рекурсивным операциям (-R). Всегда дважды проверяйте команды перед использованием chmod -R или chown -R. Один неверный символ может сделать всю вашу систему неработоспособной. Для избежания ошибок сначала выполните команду без аргументов для одного файла и лишь затем, убедившись в её правильности, применяйте рекурсивный обход с ключом -R.
- Используйте sudo осознанно. Применяйте повышенные привилегии только для конкретных задач и не работайте под root в повседневной практике.
- Используйте дополнительные инструменты.
- Для получения более подробной информации о правах, помимо стандартного ls -l, обратите внимание на утилиту stat. Она выдаст детализированный вывод, включая числовое представление прав.
- Для проверки эффективных прав доступа к файлу для конкретного пользователя без необходимости смены пользователя или группы используйте команду namei -l /путь/к/файлу.
Эти нехитрые правила помогут вам избежать множества проблем с безопасностью и сохранить ваши данные в целости.



