Ликбез

Права доступа в Linux: на пальцах

Половина загадочных проблем на сервере — «permission denied» — упирается в права. Система на деле простая: девять переключателей и две команды. Разберём так, чтобы 755 читалось как слово, а не как заклинание.

Девять переключателей

У каждого файла есть владелец и группа, а права описываются трижды: что можно владельцу, что группе, что всем остальным. В каждой тройке три действия: читать (r), писать (w), выполнять (x). Вывод ls -l показывает их одной строкой:

ls -l script.sh
-rwxr-xr--  1 admin admins  512 авг 30 12:00 script.sh
#  rwx      владелец admin: читает, пишет, запускает
#     r-x   группа admins: читает и запускает
#        r-- остальные: только читают

Числовая запись — те же переключатели суммой: r = 4, w = 2, x = 1. Владелец rwx = 7, группа r-x = 5, остальные r-- = 4: получилось 754. Отсюда классика: 755 — «моё, остальным смотреть и запускать», 644 — «моё, остальным только читать», 600 — «только моё».

Две команды

chmod 755 script.sh            # задать права числом
chmod +x script.sh             # то же по-человечески: добавить запуск
chmod -R 750 /var/www/site     # рекурсивно на каталог (осторожно!)
chown ivan:admins otchet.txt   # сменить владельца и группу
chown -R www-data: /var/www    # отдать каталог веб-серверу
id ivan                        # в каких группах состоит пользователь

Три вещи, которые все путают

Как это спрашивают на собеседовании

Тема прав — любимый фильтр «читал или делал»: просят объяснить 755 словами, дать права группе на запись, объяснить, почему скрипт не запускается (нет x) или файл не читается из веб-сервера (не тот владелец). Все ответы — выше; закрепляются они получасом на стенде: создай файлы, поменяй права, попробуй прочитать чужим пользователем. Полный набор вопросов — в разборе собеседования.

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

{ Довести Linux до автоматизма }

Частые вопросы

Что такое sudo и причём тут права?

Sudo выполняет команду от имени root — пользователя, для которого проверки прав не действуют. Поэтому «через sudo работает, без него нет» — диагноз: у твоего пользователя не хватает прав, и чинить надо их, а не приучаться жить под root.

Видел в выводе буквы s и t вместо x. Это что?

Специальные биты: setuid/setgid (программа выполняется с правами владельца, классический пример — passwd) и sticky (в каталоге /tmp удалять можно только своё). На старте достаточно узнавать их в лицо.

Есть ли в Linux что-то тоньше, чем три тройки?

Да, ACL: точечные права конкретным пользователям поверх базовых (команды getfacl/setfacl). Нужны, когда «владелец-группа-остальные» перестаёт хватать; в Windows-мире их роль играет NTFS, смотри разбор файлового сервера.

Куда дальше