Права доступа в Linux — не просто формальность. Именно они определяют, сможет ли веб-сервер прочитать конфиг, сможет ли скрипт записать лог, и сможет ли злоумышленник выполнить файл, который не должен запускаться никем кроме root. Разобраться в правах один раз — значит избавиться от половины типичных проблем с «Permission denied».
Посмотреть права: ls -l
Самый быстрый способ — команда ls -l:
ls -l /etc/nginx/nginx.conf
Вывод будет примерно таким:
-rw-r--r-- 1 root root 2893 Feb 01 14:22 nginx.conf
Разберём каждое поле слева направо.
Как читать строку прав
-rw-r--r-- 1 root root 2893 Feb 01 nginx.conf
Первый символ — тип файла:
-— обычный файлd— директорияl— символическая ссылкаc— символьное устройствоb— блочное устройство
Следующие 9 символов — три группы по три:
rw- r-- r--
│ │ └── остальные (others)
│ └──────── группа (group)
└────────────── владелец (user)
Каждая группа содержит три флага: r (read — чтение), w (write — запись), x (execute — выполнение). Дефис - означает что право отсутствует.
Пример rw-r--r--:
- владелец: читать + писать, выполнять нельзя
- группа: только читать
- остальные: только читать
Число после прав — количество жёстких ссылок на файл.
Два следующих поля — имя владельца и группы.
Числовые права (octal)
Каждый флаг имеет числовое значение:
| Символ | Значение |
|---|---|
r |
4 |
w |
2 |
x |
1 |
- |
0 |
Права каждой группы — сумма значений. Примеры:
| Число | Символы | Значение |
|---|---|---|
7 |
rwx |
полный доступ |
6 |
rw- |
чтение и запись |
5 |
r-x |
чтение и выполнение |
4 |
r-- |
только чтение |
0 |
--- |
нет доступа |
Полные права 755 означают: владелец — rwx (7), группа — r-x (5), остальные — r-x (5).
Посмотреть права в числовом виде:
stat -c "%a %n" /etc/nginx/nginx.conf
Посмотреть подробные метаданные: stat
stat показывает всё сразу — права в обоих форматах, владельца, группу, inode, размер, временны́е метки:
stat /etc/nginx/nginx.conf
File: /etc/nginx/nginx.conf
Size: 2893 Blocks: 8 IO Block: 4096 regular file
Device: 802h Inode: 786435 Links: 1
Access: (0644/-rw-r--r--) Uid: (0/root) Gid: (0/root)
Access: 2026-02-28 10:15:00
Modify: 2026-02-01 14:22:10
Change: 2026-02-01 14:22:10
Строка Access: (0644/-rw-r--r--) даёт права сразу в обоих форматах.
Посмотреть права на директорию
Для директорий флаг x означает не «выполнить», а «войти» — без него нельзя перейти в директорию командой cd или обратиться к файлам внутри.
Посмотреть права директории (не её содержимого):
ls -ld /var/www/html
Флаг -d показывает саму директорию как объект, а не выводит её содержимое.
Изменить права: chmod
Символьный способ (добавить, убрать, задать):
chmod u+x script.sh # добавить выполнение владельцу
chmod g-w file.txt # убрать запись у группы
chmod o=r file.txt # задать для остальных только чтение
chmod a+x script.sh # добавить выполнение всем (a = all)
Числовой способ (задать сразу для всех групп):
chmod 755 script.sh # rwxr-xr-x
chmod 644 config.conf # rw-r--r--
chmod 600 id_rsa # rw------- (только владелец читает/пишет)
chmod 777 shared/ # rwxrwxrwx (опасно на продакшене)
Рекурсивно для всей директории:
chmod -R 755 /var/www/html
Изменить владельца: chown
Изменить владельца файла:
sudo chown www-data file.txt
Изменить владельца и группу одновременно:
sudo chown www-data:www-data /var/www/html
Рекурсивно:
sudo chown -R www-data:www-data /var/www/html
Изменить только группу (без смены владельца):
sudo chgrp developers project/
Специальные права: setuid, setgid, sticky bit
setuid (SUID)
Файл запускается с правами его владельца, а не того, кто его запускает. Используется в системных утилитах — например passwd запускается от любого пользователя, но меняет /etc/shadow, принадлежащий root.
chmod u+s /path/to/binary
В выводе ls -l вместо x у владельца появляется s: -rwsr-xr-x
setgid (SGID)
На файле: запускается с правами группы файла.
На директории: новые файлы внутри наследуют группу директории (а не группу создателя). Полезно для общих рабочих папок команды.
chmod g+s /shared/teamfolder
В выводе: drwxrwsr-x
Sticky bit
На директории: пользователь может удалить только свои файлы, даже если имеет право записи в директорию. Классический пример — /tmp: любой может создавать файлы, но удалить чужой нельзя.
chmod +t /tmp
В выводе: drwxrwxrwt
Посмотреть все файлы с setuid в системе:
find / -perm -4000 -type f 2>/dev/null
Типичные комбинации прав
| Права | Назначение |
|---|---|
600 |
Приватный SSH-ключ (~/.ssh/id_rsa) |
644 |
Конфиг, веб-страница (читают все, пишет только владелец) |
700 |
Скрипт только для владельца |
755 |
Исполняемый файл, публичная директория |
750 |
Директория группы без доступа посторонних |
777 |
Полный доступ всем — избегать на сервере |
Шпаргалка
| Задача | Команда |
|---|---|
| Посмотреть права | ls -l filename |
| Права в числовом виде | stat -c "%a %n" filename |
| Подробные метаданные | stat filename |
| Права директории | ls -ld /path/ |
| Изменить права (символьно) | chmod u+x filename |
| Изменить права (числом) | chmod 755 filename |
| Рекурсивно | chmod -R 755 /path/ |
| Изменить владельца | sudo chown user:group filename |
| Установить setuid | chmod u+s filename |
| Установить setgid | chmod g+s directory |
| Установить sticky bit | chmod +t directory |
| Найти файлы с setuid | find / -perm -4000 -type f 2>/dev/null |