Установка 0777 для folder
(а я говорю здесь о папке, а не о файле) не связана с какой-либо угрозой безопасности выполнения, как некоторые утверждают.
Execute is needed on a directory to access the inode information of the files within. You need this to search a directory to read the inodes of the files within. For this reason the execute permission on a directory is often called search permission instead.
См. Http://content.hccfl.edu/pollock/aunix1/filepermissions.htm.
Риски:
- любой может прочитать файлы в этой папке (при условии, что сам файл имеет разрешение
r
для пользователя / группы, пытающейся его прочитать, или для others
)
- любой может создавать файлы в этой папке (и по желанию выполнять их, но только те, которые созданы этим конкретным пользователем)
- любой пользователь может удалить файлы, принадлежащие другим людям в этой папке (ваши файлы не защищены, независимо от того, у какого владельца / разрешения они есть)
Если вы хотите защитить некоторые файлы, вам нужно создать другую папку с "обычными" правами (rw только для вас или rw для вас и вашей группы) и поместить в нее свои файлы.
С другой стороны, никто не может превратить неисполняемый файл в исполняемый (chmod не разрешен, если вы не являетесь владельцем файла).
Какие риски не являются?
Некоторые люди думают, что 0777 наследуется каждым файлом в папке. Это неправильно Вы не можете редактировать файл, если у вас нет разрешения w
только потому, что его родительская папка - 0777. Вы не можете прочитать файл, если у него нет разрешения r
.
Как обезопасить это?
Если у вас есть доступ к какой-либо оболочке или ваш FTP-клиент позволяет вам сменить владельца файлов и вы знаете, какой владелец вам нужен, вы можете создать папку и установить для ее владельца процесс apache (обычно nobody
, daemon
или apache
) и просто установите 0700 разрешений. Проблема в том, что другие пользователи, такие как вы, когда вы просматриваете с помощью своего FTP-клиента, не смогут читать файлы, созданные позже PHP, что не обязательно является проблемой.
Хорошо, но как насчет файлов?
Я не говорю о рисках, присущих выполнению files
потому что нет причин, по которым вы бы хотели навязывать разрешение x
для файла, который не должен выполняться в первую очередь.
Если какое-то веб-приложение требует записи в существующий файл, достаточно установить его в 0666 (или 0600, если владелец - пользователь apache).