Intereting Posts
Передача аргументов командной строки bash, содержащих # Заменить новый символ линии между двумя строками Подстановочный файл Makefile $ соответствует только верхней директории Какие разрешения я должен установить для исполняемого файла, я могу поделиться? Использовать Linux для резервного копирования сети MSWindows? Регулировка чувствительности клавиатуры в терминале командной строки? Извлечь unix-совместимый файл-путь с пространством из вывода команды Предупреждение «Нет такого файла» при запуске терминала Как изменить имя одного раздела sdaX на sdaY? Автоматическое удаление файлов с сервера на локальный компьютер Обновление ядра на устройстве ARM Ubuntu 16.04 работает в режиме низкой графики Многопользовательский USB-накопитель Syslinux Попытка пропинговать IP одной виртуальной машины с другой виртуальной машины: целевой хост недоступен Буферизация каждой строки локально на последовательном терминале

Как я могу найти, какой пользователь обращается к файлу с помощью strace?

Моя фактическая проблема заключается в том, что Nginx не может отображать страницы (403 запрещено), несмотря на то, что разрешения установлены соответствующим образом (на мой взгляд)

Каталог stackoverflow по умолчанию:

user1@wfe1 ~]$ ls /usr/share/nginx/html/stackoverflow/ -al total 4 drwxr-xr-x. 2 root root 23 Mar 9 02:59 . drwxrwxr-x. 4 root www 89 Mar 9 02:59 .. -rw-r--r--. 1 root root 6 Mar 9 02:59 index.html 

Каталог stackoverflow в местоположении пользователя:

 [user1@wfe1 ~]$ ls stackoverflow/ -al total 4 drwxr-xr-x. 2 root root 23 Mar 9 02:52 . drwxr-xr-x. 3 nginx nginx 79 Mar 9 02:51 .. -rw-r--r--. 1 root root 6 Mar 9 02:52 index.html 

Файл конфигурации:

 server{ listen 80; server_name localhost; root /usr/share/nginx/html/stackoverflow; #Works #root /home/user1/stackoverflow; #Doesn't work index index.html; } 

Тот, который не работает, показывает 403 запрещенную ошибку. Чтобы добраться до корня проблемы, я использую следующую команду и просматриваю с помощью моего браузера, который дает результат, как показано ниже …

 [root@wfe1 user1]# sudo strace -p 9114 -e trace=file Process 9114 attached stat("/home/user1/stackoverflow/index.html", {st_mode=S_IFREG|0644, st_size=6, ...}) = 0 open("/home/user1/stackoverflow/index.html", O_RDONLY|O_NONBLOCK) = -1 EACCES (Permission denied) open("/home/user1/stackoverflow/favicon.ico", O_RDONLY|O_NONBLOCK) = -1 ENOENT (No such file or directory) 

Вывод, который вы видите, – это отказ от прав. Я хотел бы узнать, какая учетная запись пользователя использовалась для доступа к файлу? Как я могу копать дальше?


EDITED вопрос с более новыми разрешениями.

Проблема в вашем выходе:

 [root@wfe1 user1]# ls -al site3 total 8 drwxr-xr-x. 2 nginx nginx 23 Mar 6 06:12 . drwx------. 5 user1 user1 4096 Mar 6 06:12 .. -rwxr-xr-x. 1 nginx nginx 6 Mar 6 06:12 index.html 

Файл и содержащий каталог доступны для nginx, но разрешения родительского каталогаdrwx------ , и это заблокирует доступ к этому каталогу и всем его drwx------ .

Вам необходимо проверить права доступа для каждого уровня каталога вплоть до корня.

Вы можете увидеть текущий euid процесса. Посмотрите на /proc/PID/status . Если euid или uid равны 0, то проверяйте списки audit.log selinix audit.log и POSIX ACL в каталоге через getfacl

Вы можете увидеть текущий доступ к файлу с помощью команды list open files, lsof . Ниже приведен пример вывода.

 # lsof COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME init 1 root cwd DIR 8,1 4096 2 / init 1 root txt REG 8,1 124704 917562 /sbin/init init 1 root 0u CHR 1,3 0t0 4369 /dev/null init 1 root 1u CHR 1,3 0t0 4369 /dev/null init 1 root 2u CHR 1,3 0t0 4369 /dev/null init 1 root 3r FIFO 0,8 0t0 6323 pipe 

Пример 2 – + D = рекурсивный:

 # lsof +D /var/log/ COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME rsyslogd 488 syslog 1w REG 8,1 1151 268940 /var/log/syslog rsyslogd 488 syslog 2w REG 8,1 2405 269616 /var/log/auth.log console-k 144 root 9w REG 8,1 10871 269369 /var/log/ConsoleKit/history 

Man lsof даст вам несколько дополнительных примеров.