Подземный стук, 5.5 баллов.Имеется FedoraCore9, на ней апач и пхп. Апач работает под пользователем apache, у пхп выключены всякие safe_mode, open_basedir'ы. Есть директория '/somewhere/dir' с владельцем apache:apache и правами 0777. Далее 2 действия:
1) апач выполняет пхп-скрипт, который делает touch('/somewhere/dir/file1');
2) я из шелла под пользователем apache делаю touch /somewhere/dir/file2 (или php -r "touch('/somewhere/dir/file2');", эффект тот же.
3) ls -l /somewhere/dir-rw-r--r-- 1 apache apache 0 2010-01-01 01:01 file1
-rw-r--r-- 1 apache apache 0 2010-01-01 01:02 file24) пробую повторно из апача с пом. пхп-скрипта touch('/somewhere/dir/file1') - проходит
5) пробую из апача с пом. пхп-скрипта touch('/somewhere/dir/file2') - время модификации не изменилось, выдается ошибка:PHP Warning: touch() [<a href='function.touch'>function.touch</a>]: Utime failed: Permission denied
6) из шелла под пользователем apache touch /somewhere/dir/file1, touch /somewhere/dir/file2, php -r "touch('/somewhere/dir/file1');", php -r "touch('/somewhere/dir/file2');"
срабатывают, как и ожидалось.
Это упрощенное описание проблемы, глобально пхп под httpd не в состоянии писать в файлы, которые сам не создал (хоть ему выстави права 0777/0666 и смени владельца на него). Разницы между файлами, созданными пхп из-под веб-сервера и мною под тем же пользователем из шелла я не вижу, но первые для пхп в апаче писабельны, а вторые - нет.
Есть идеи, что с этим делать и где причина?
>[оверквотинг удален]
>
>-rw-r--r-- 1 apache apache 0 2010-01-01 01:01
>file1
>-rw-r--r-- 1 apache apache 0 2010-01-01 01:02
>file2
>
>4) пробую повторно из апача с пом. пхп-скрипта touch('/somewhere/dir/file1') - проходит
>5) пробую из апача с пом. пхп-скрипта touch('/somewhere/dir/file2') - время модификации не
>изменилось, выдается ошибка:
>SeLinux ?
>[оверквотинг удален]
>срабатывают, как и ожидалось.
>
>Это упрощенное описание проблемы, глобально пхп под httpd не в состоянии писать
>в файлы, которые сам не создал (хоть ему выстави права 0777/0666
>и смени владельца на него). Разницы между файлами, созданными пхп из-под
>веб-сервера и мною под тем же пользователем из шелла я не
>вижу, но первые для пхп в апаче писабельны, а вторые -
>нет.
>
>Есть идеи, что с этим делать и где причина?
Таки, в три ночи как-то в голову не пришло:# ls -aZ
-rw-r--r-- 1 apache apache unconfined_u:object_r:httpd_sys_content_rw_t:s0 file1
-rw-r--r-- 1 apache apache unconfined_u:object_r:httpd_sys_content_t:s0 file2# chcon --reference=file1 *
, и все стало на свои места
аналогичная проблема в centos 6, перенесли сайт с тестового сервера touch не работает, хотя selinux отключен, лечится удалением файлов и пересозданием через web. http сервер nginx, php прикручен как FastCGI.