Стандартная установка Apache2
Юзер имеет каталог в /var/www/
Каталог и все в него входящие файлы принадлежат юзеру и группе юзера (права чтения для группы есть)
Apache не состоит в группе пользователя.
Apache не имеет доступа к файлам пользователя(поскольку не состоит в его группе), следовательно в браузере видим ошибку 403
Добавляем апач в группу пользователя, обновляем страницу, получаем также ошибку 403
Делаем apache2ctl graceful, обновляем страницу в браузере, всё нормально, никаких ошибок доступа, файлы пользователя открываются.
Так и должно быть?
root@servubu:~# ls -la /var/www/test28/test28.ru/www/
итого 12
drwxr-x--- 2 test28 test28 4096 мая 1 17:54 .
drwxr-x--- 5 test28 test28 4096 мая 1 17:54 ..
-rwxr-x--- 1 test28 test28 53 мая 1 17:57 index.html
root@servubu:~# cat /etc/group | grep 28
test28:x:1027:
root@servubu:~# ps auxw | grep sbin/apache | awk '{print"-p " $2}' | xargs strace
[pid 17903] read(64, "GET / HTTP/1.1\r\nHost: test28.ru\r"..., 8000) = 421
[pid 17903] stat("/var/www/test28/test28.ru/www/", 0x7fffec09a540) = -1 EACCES (Permission denied)
[pid 17903] lstat("/var", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
[pid 17903] lstat("/var/www", {st_mode=S_IFDIR|0750, st_size=4096, ...}) = 0
[pid 17903] lstat("/var/www/test28", {st_mode=S_IFDIR|0750, st_size=4096, ...}) = 0
[pid 17903] lstat("/var/www/test28/test28.ru", 0x7fffec09a540) = -1 EACCES (Permission denied)
[pid 17903] write(15, "[Wed May 01 21:21:11 2013] [erro"..., 100) = 100
[pid 17903] writev(64, [{"HTTP/1.1 403 Forbidden
root@servubu:~# usermod -a -G test28 www-data
root@servubu:~# cat /etc/group | grep 28
test28:x:1027:www-data
root@servubu:~# ps auxw | grep sbin/apache | awk '{print"-p " $2}' | xargs strace
[pid 17903] read(64, "GET / HTTP/1.1\r\nHost: test28.ru\r"..., 8000) = 447
[pid 17903] stat("/var/www/test28/test28.ru/www/", 0x7fffec09a540) = -1 EACCES (Permission denied)
[pid 17903] lstat("/var", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
[pid 17903] lstat("/var/www", {st_mode=S_IFDIR|0750, st_size=4096, ...}) = 0
[pid 17903] lstat("/var/www/test28", {st_mode=S_IFDIR|0750, st_size=4096, ...}) = 0
[pid 17903] lstat("/var/www/test28/test28.ru", 0x7fffec09a540) = -1 EACCES (Permission denied)
[pid 17903] write(15, "[Wed May 01 21:23:44 2013] [erro"..., 100) = 100
[pid 17903] writev(64, [{"HTTP/1.1 403 Forbidden
[pid 17903] read(64, 0x7fa3deef9048, 8000) = -1 EAGAIN (Resource temporarily unavailable)
root@servubu:~# apache2ctl graceful
root@servubu:~# ps auxw | grep sbin/apache | awk '{print"-p " $2}' | xargs strace
[pid 17966] read(64, "GET / HTTP/1.1\r\nHost: test28.ru\r"..., 8000) = 447
[pid 17966] stat("/var/www/test28/test28.ru/www/", {st_mode=S_IFDIR|0750, st_size=4096, ...}) = 0
[pid 17966] stat("/var/www/test28/test28.ru/www/index.html", {st_mode=S_IFREG|0750, st_size=53, ...}) = 0
[pid 17966] open("/var/www/test28/test28.ru/www/index.html", O_RDONLY|O_CLOEXEC) = 65
[pid 17966] writev(64, [{"HTTP/1.1 200 OK
Пользователь решил продолжить мысль 02 Мая 2013, 00:06:28:
вот ещё две строчки для меня странно выглядят
[pid 18126] stat("/var/www/test15/test15.ru/www/index.html", {st_mode=S_IFREG|0770, st_size=53, ...}) = 0
[pid 18126] open("/var/www/test15/test15.ru/www/index.html", O_RDONLY|O_CLOEXEC) = -1 EACCES (Permission denied)
Апач лезет смотреть информацию о файле
ему говорят, что права 0770 (а я уже добавил Апач в группу пользователя)
следовательно, он должен файл открыть
но, складывается такое ощущение, что он не знает, что он теперь в группе пользователя (он действительно не знает, ибо /etc/group читает только при старте/релоаде)в итоге системой отказано в чтении, получается, что сама система не в курсе что он добавлен в группу пользователя?
Пользователь решил продолжить мысль 02 Мая 2013, 00:42:14:
В строке
[pid 18126] open("/var/www/test15/test15.ru/www/index.html", O_RDONLY|O_CLOEXEC) = -1 EACCES (Permission denied)
ошибка указана как EACCES
в документации по
stat написано
[EACCES]
Нет права на поиск для компонента маршрута.
давайте проверим
ls -l /
drwxr-xr-x 14 root root 4096 апр. 30 16:04 var
ls -l /var/
drwxr-xr-x 31 www-data www-data 4096 мая 1 18:02 www
ls -l /var/www/
drwxrwxr-x 3 test15 test15 4096 мая 1 16:41 test15
ls -l /var/www/test15/
drwxrwxr-x 5 test15 test15 4096 мая 1 16:41 test15.ru
ls -l /var/www/test15/test15.ru/
drwxrwxr-x 2 test15 test15 4096 мая 1 16:41 www
ls -l /var/www/test15/test15.ru/www/
-rwxrwx--- 1 test15 test15 53 мая 1 16:41 index.html
права на поиск везде стоят, всё-равно файл не открывается (без перезагрузки/релоада апача)
Пользователь решил продолжить мысль 02 Мая 2013, 13:02:25:
Как мне сказал знакомый админ, система кэширует данные по пользователям и группам для каждого процесса и данное поведение считается нормальным. Только я не понимаю, почему бы не сделать сброс кэша при изменении group/password