Как выдать пользователю право только на чтение или только на исполнение через chmod
Что проверяют
Понимаете ли вы модель прав в Linux: три категории (владелец, группа, остальные) и три права (r, w, x). Следом обычно спрашивают, чем числовая запись отличается от символьной и что будет со скриптом, у которого есть только право на исполнение.
Как отвечать
Сначала уточните, кому именно выдаём права. «Пользователю» чаще всего значит владельцу файла, и тогда chmod 444 или chmod 111, которые выдают право всем трём категориям, отвечают на другой вопрос.
- числовая запись: r=4, w=2, x=1, цифры идут в порядке владелец, группа, остальные. Только чтение для владельца:
chmod 400 report.log, только исполнение:chmod 100 app; - символьная запись:
chmod u=r,go= report.log. Оператор=выставляет права ровно такими, а+и-добавляют и убирают их поверх уже имеющихся, поэтомуchmod u+rзапись не отнимет; - проверка:
ls -lпокажет строку вроде-r--------, аstatвыведет права числом; - конкретный другой пользователь: через
chmodправа ему отдельно не выдать, тут нужна группа или ACL:setfacl -m u:tester:r report.log.
Для тестировщика это практика: выставить права на логи в тестовом окружении, дать исполнение скрипту в CI (chmod +x run_tests.sh), проверить, как приложение ведёт себя, когда конфиг недоступен на чтение.
Где спотыкаются
Говорят, что chmod 111 script.sh позволит запустить скрипт. Не позволит: интерпретатору нужно прочитать файл, поэтому скрипту нужны r и x вместе. Одного x хватает только скомпилированному бинарнику.
Путают права на файл и на каталог. У каталога r позволяет увидеть список имён, x позволяет войти в него и обращаться к файлам, а удалить файл можно при праве записи на каталог, даже если сам файл только для чтения.
Забывают, что root на права чтения и записи внимания не обращает, поэтому проверка «файл только для чтения» из-под root ничего не доказывает.