Иногда
ls -l показывает, что у файла всё нормально, но приложение всё равно получает Permission deniedПроблема может находиться не в самом файле, а в одном из каталогов по пути к нему
namei -l /var/lib/myapp/data/config.json
Например:
drwxr-xr-x root root /
drwxr-xr-x root root var
drwx------ app app lib
drwxr-xr-x app app myapp
-rw-r--r-- app app config.json
Сам
config.json доступен для чтения, но пройти через /var/lib процесс не может, если у его пользователя нет x на одном из каталоговДля каталога
x означает возможность проходить через него и обращаться к объектам внутри по известному имениПоэтому такая ситуация вполне возможна
chmod 644 config.json
но приложение всё равно получает отказ, потому что один из родительских каталогов закрыт
sudo -u app namei -l /var/lib/myapp/data/config.json
Это особенно полезно для systemd сервисов, где процесс работает не от root
Проверяем ACL
getfacl /var/lib/myapp/data/config.json
И отдельно каталоги по пути
getfacl /var/lib/myapp
Там могут находиться дополнительные правила, которые не видны через обычный
ls -lnamei полезен именно тем, что показывает проблему не на уровне конечного файла, а на уровне всего пути к нему Если приложение получает Permission denied, проверять только права самого файла часто недостаточно

