Файлы есть, но я не могу их прочитать: битва с правами доступа в Linux
Среда, 07 января 2026 12:30

Файлы есть, но я не могу их прочитать: битва с правами доступа в Linux

Автор
Оцените материал
(0 голосов)

Представьте: вы заходите на сервер, видите нужный файл в директории, пытаетесь его открыть (cat config.php), а система отвечает "Permission denied". Файл существует, вы его видите через ls, но прочитать не можете. Это классическая проблема прав доступа, с которой сталкивается каждый начинающий сисадмин.

Недавно такой случай был у меня с коллегой-новичком. Он пытался прочитать логи веб-сервера в /var/log/nginx/access.log, но получал ошибку доступа. Он пытался sudo cat, но это не помогало — sudo тоже выдавал "Permission denied". Ситуация казалась безнадежной.

Я сел рядом и начал разбираться. Сначала проверил права на файл: ls -la /var/log/nginx/access.log показал:

-rw-r----- 1 www-data adm 123456 Jan 10 10:00 access.log

Права были 640 — владелец (www-data) может читать и писать, группа (adm) только читать, остальные — ничего. Мой коллега был в группе sudo, но не в группе adm. Вот почему sudo не помогал — sudo меняет пользователя на root, но root тоже не имел прав на чтение, потому что не был в группе adm и не был владельцем. 

Решение было простым — добавить пользователя в группу adm:

sudo usermod -aG adm username
newgrp adm # применить изменения без перелогина

Но это не все. Далее мы обнаружили, что сама директория /var/log/nginx имела права 750. Значит, для доступа к файлам внутри нужно иметь права на выполнение для директории. Мы проверили:

ls -ld /var/log/nginx
drwxr-x--- 2 www-data adm 4096 Jan 10 10:00 /var/log/nginx

Пользователь не мог даже перейти в эту директорию, потому что не был в группе adm. После добавления в группу все заработало. 

Этот случай научил меня всегда объяснять новичкам три важных момента о правах в Linux:

  1. Права на файл и права на директорию — разные вещи
  2. Sudo не всегда решает проблему с правами, если права выставлены слишком строго
  3. Всегда проверяй не только права на файл, но и на все родительские директории 

Совет: когда сталкиваешься с "Permission denied", всегда проверяй цепочку прав от корня до файла. Команда namei -l /full/path/to/file покажет права на каждом уровне пути.

Прочитано 143 раз