У меня есть унаследованный код php, который я пытаюсь защитить. Однако удаление разрешений на выполнение из каталога загрузки файлов вызывает ошибку разрешений. Вот краткое изложение:
apache указывает на / root / www / (только пользователь в системе является root)
загрузка изображений сохраняется в / files через символическую ссылку в / root / www / admin / files (я не знаю, почему файлы сохраняются в /)
Разрешения:
drwxrwxrwx 8 root root 4096 2011-04-06 16:51 root (root home directory)
drwxr-xr-x 8 www-data www-data 4096 2011-04-01 19:34 www (folder in /root/)
lrwxrwxrwx 1 root root 21 2011-03-04 20:32 files -> /files/ (symlink)
drw------- 4 www-data www-data 61440 2011-04-06 16:12 files (folder in root directory)
-rwxrwx--- 1 www-data www-data 81 2011-04-06 15:56 .htaccess (file in /files/)
Отрывок из журнала ошибок Apache:
[Wed Apr 06 16:58:24 2011] [crit] [client 1.2.3.4] (13)Permission denied:
/root/www/admin/files/.htaccess pcfg_openfile: unable to check htaccess file,
ensure it is readable, referer: http://example.com
Я хочу изменить разрешения для / files / с 700 на 600. Я не могу понять, почему .htaccess доступен для чтения только тогда, когда установлены разрешения на выполнение.
Я подозреваю, что ваше замешательство здесь происходит из-за распространенного неправильного понимания прав доступа к файлам, подобным Unix, а именно: в каталоге «выполнить» не означает «выполнить».
Я подозреваю, что вы пытаетесь убедиться, что файлы, загруженные в каталог загрузки, не могут быть выполнены, верно? Это здравый смысл. Однако ваш подход ошибочен: в каталоге бит «выполнить» не означает «разрешить выполнение файлов здесь», а скорее «разрешить пользователям перемещаться по этому каталогу». Другими словами, удаление бита выполнения в каталоге для пользователя / группы / мира лишает соответствующих пользователей возможности доступа к любому файлу или каталогу в нем - именно то, на что сейчас жалуется Apache, он не может.
Вам нужно, чтобы каталог загрузки оставался «исполняемым». Вместо этого вам понадобится umask, чтобы гарантировать, что загруженные файлы не являются исполняемыми. (На самом деле, даже в этом нет необходимости, поскольку файлы по умолчанию не исполняются на * nix.)
Хотя ваша основная проблема решена, другим возможным решением вашей проблемы запрета выполнения загруженных файлов является монтирование / files с помощью noexec. Однако для этого потребуется новый раздел.
Поскольку .htaccess находится внутри / files, он недоступен, если текущий пользователь не имеет прав на выполнение для / files. Попробуйте сами, как обычный пользователь: создайте новый каталог, поместите в него файл и затем удалите бит выполнения каталога. У вас не должно быть доступа к файлу внутри.
В чем причина желания удалить именно этот бит выполнения? Я не вижу в этом преимущества безопасности, но дайте мне знать, если я что-то упускаю.