🔐 Управление правами доступа в Linux
В Linux у каждого файла и директории есть права доступа, которые определяют, кто и что может с ними делать.
Понимание и грамотное управление правами — основа безопасности системы.
📌 1. Основы прав доступа
Каждый файл или директория имеет владельца (user) и группу (group).
Права разделяются на три категории:
- u (user) — владелец файла
- g (group) — группа владельца
- o (others) — все остальные пользователи
Для каждой категории возможны три права:
| Символ | Число | Значение |
|---|---|---|
r |
4 | чтение (read) |
w |
2 | запись (write) |
x |
1 | выполнение (execute) |
🔎 Просмотр прав
ls -l
Пример:
-rwxr-xr-- 1 user group 1234 Oct 3 14:55 script.sh
Разбор:
-— тип объекта (-— файл,d— директория,l— ссылка)rwx— права владельца (чтение, запись, выполнение)r-x— права группы (чтение, выполнение)r--— права остальных (только чтение)
⚡ 2. Изменение прав с chmod
Символьный метод
chmod u+x file.sh # добавить владельцу право на выполнение
chmod g-w file.txt # убрать у группы право на запись
chmod o+r file.txt # дать всем остальным право на чтение
chmod a+x script.sh # дать выполнение всем (a = all)
Числовой метод (октальный)
Каждое право кодируется числом (r=4, w=2, x=1). Сумма задаёт права.
chmod 755 file.sh
Расшифровка:
7 = rwx(владелец: чтение + запись + выполнение)5 = r-x(группа: чтение + выполнение)5 = r-x(остальные: чтение + выполнение)
Примеры:
644— владелец читает/пишет, остальные только читают (обычно для текстовых файлов).600— только владелец читает/пишет (секретные файлы).700— только владелец может читать/писать/выполнять (личные скрипты).
👑 3. Изменение владельца (chown) и группы (chgrp)
Смена владельца
sudo chown user file.txt
sudo chown user:group file.txt
Смена группы
sudo chgrp developers file.txt
Рекурсивно для каталога
sudo chown -R user:group /var/www/
🧩 4. Специальные биты: SUID, SGID, Sticky Bit
🔴 SUID (Set User ID)
Если установлен на исполняемом файле, программа запускается от имени владельца файла, а не пользователя.
chmod u+s /usr/bin/program
Пример: passwd (меняет пароль, требует root-доступа, но запускается обычным пользователем).
🟡 SGID (Set Group ID)
- Для файлов: программа запускается с правами группы.
- Для каталогов: все новые файлы внутри наследуют группу каталога.
chmod g+s /var/shared/
🟢 Sticky Bit
Используется на каталогах (например /tmp).
Файлы внутри может удалять только владелец, даже если у других есть права на запись.
chmod +t /tmp
🖥 5. Права на директории
Для директорий права работают немного иначе:
r— просмотр списка файлов (ls).w— создание/удаление файлов внутри.x— возможность заходить в директорию (cd).
Пример:
755— открытая директория, все могут зайти и читать файлы.700— только владелец может заходить и работать.
🔍 6. Проверка эффективных прав
Иногда из-за наследования прав и ACL реальные возможности отличаются. Проверить можно так:
namei -l /path/to/file
или (в системах с ACL):
getfacl file.txt
📌 7. Практические примеры
- Сделать скрипт исполняемым только для владельца:
chmod 700 backup.sh
- Общая директория для группы
developers:
sudo mkdir /projects
sudo chown root:developers /projects
sudo chmod 2775 /projects # SGID + rwx для владельца и группы
- Директория для временных файлов (аналог /tmp):
mkdir /mytmp
chmod 1777 /mytmp # Sticky bit + rwx для всех
🛡 8. Советы по безопасности
- Не давайте
777без необходимости — это уязвимость. - Используйте
600или400для конфигурационных файлов с паролями (например~/.ssh/id_rsa). - Sticky Bit обязателен для временных директорий.
- Проверяйте владельцев файлов в
/etcи/var/www— там часто происходят ошибки.