Какими командами в Linux можно менять права доступа
Что проверяют
Понимаете ли вы модель прав Linux настолько, чтобы самостоятельно разобраться с Permission denied на стенде: скрипт не запускается, лог не читается, приложение не пишет в каталог. Следом часто просят расшифровать строку вида -rwxr-x--- или объяснить, что значит 755.
Как отвечать
Сначала модель: у файла есть владелец, группа и остальные, у каждого права r, w, x, посмотреть их можно через ls -l. Команды:
- chmod: меняет права. Числами (
r=4,w=2,x=1):chmod 644 config.ymlдаёт владельцу чтение и запись, остальным только чтение,chmod 755 run.shдобавляет выполнение всем. Символьно:chmod u+x run.sh,chmod g-w,chmod o=. Рекурсивно с-R; - chown: владелец и группа,
chown app:app /var/log/app, обычно черезsudo; - chgrp: только группа,
chgrp qa report.html; - umask: права по умолчанию для новых файлов. При типичной маске
022файлы создаются с644, каталоги с755; - setfacl и getfacl: ACL, когда нужно дать доступ конкретному пользователю, не меняя владельца:
setfacl -m u:tester:r app.log.
У каталога права значат другое: r позволяет увидеть список файлов, x войти в каталог, w создавать и удалять файлы внутри. Стоит упомянуть особые биты: sticky bit на /tmp (1777) не даёт удалять чужие файлы, setuid запускает программу с правами её владельца.
В тестировании это часто всплывает с Docker: файлы в примонтированном томе принадлежат UID из контейнера, и на хосте их не удалить без sudo.
Где спотыкаются
Лечат всё через chmod 777. Запись открывается всем, настоящая причина остаётся, а на общем стенде такая правка создаёт новую проблему.
Делают chmod -R 755 на каталог с данными, и все файлы становятся исполняемыми. Удобнее chmod -R u=rwX,go=rX: заглавная X ставит выполнение только каталогам и уже исполняемым файлам.
Думают, что удалить файл мешают права самого файла. На удаление влияет право w на каталог, в котором он лежит.