Я сел рядом и начал разбираться. Сначала проверил права на файл: 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:
- Права на файл и права на директорию — разные вещи
- Sudo не всегда решает проблему с правами, если права выставлены слишком строго
- Всегда проверяй не только права на файл, но и на все родительские директории
Совет: когда сталкиваешься с "Permission denied", всегда проверяй цепочку прав от корня до файла. Команда namei -l /full/path/to/file покажет права на каждом уровне пути.