Является ли использование режима 0664 в PHP mkdir хорошей идеей?

Я создаю службу создания веб-сайтов, где пользователи могут загружать файлы в интерфейс FTP-браузера. Я также хочу, чтобы они могли создавать настоящие каталоги, но я беспокоился, что если они загрузят скрипты, это может привести к хаосу на сервере.

Я использую PHP и функцию mkdir(). Было бы неплохо использовать режим 0664 при создании каталогов, чтобы предотвратить:

  1. Вредоносные файлы от исполнения.
  2. Не позволяйте никому писать или выполнять эти файлы.

Это хорошая идея?


person Luke    schedule 28.02.2016    source источник
comment
Интересно, 644 в каталоге имеет значение? У меня были php-файлы со всевозможными настройками разрешений на сервере cpanel, и они всегда работали нормально, и это 644 для самих php-файлов!   -  person Aaron Gillion    schedule 28.02.2016
comment
@AaronGillion, ну, я думаю, это мой вопрос! ;)   -  person Luke    schedule 28.02.2016
comment
Я не уверен, что дал бы ему разрешение на запись в группу. Это действительно зависит от настройки вашего сервера, от того, какой пользователь / группа получает доступ к контенту, когда пользователи просматривают контент и т. Д.   -  person Salomao Rodrigues    schedule 28.02.2016


Ответы (2)


Нет, нет смысла использовать 0664 для каталогов.

Вам, скорее всего, понадобится флаг X, потому что вы хотите иметь возможность получить список каталогов. «Выполнение» каталога не имеет ничего общего с выполнением программы. Отключение X-флага для каталога не повлияет на выполнение программ, хранящихся внутри.

Вы должны определить, какая учетная запись фактически связана с доступом к файлам. Эта учетная запись может быть владельцем некоторых файлов и владельцем каталогов этих файлов. Все, что делает PHP, будет выполняться от имени этого пользователя. Так что не имеет значения, ограничиваете ли вы доступ к файлу для группы или мира (он же 0700). С другой стороны, ваш доступ к FTP может быть не тем же пользователем, а только общей группой. В этом случае раздражает идея ограничить доступ этой группы к файлам, потому что вы не можете читать, писать или удалять их.

Если вы разрешаете пользователям использовать средство загрузки на ваш сервер и не можете гарантировать, что эти файлы никогда не будут выполнены, вам, вероятно, не следует предлагать эту услугу. Использование флагов доступа не улучшит ситуацию, потому что PHP не нужен флаг X, ему нужно только, чтобы файл был читабельным. Итак, если FTP-сайт должен быть полезен, необходимо иметь возможность читать файлы, иначе зачем их загружать?

Обратите внимание, что обычная служба загрузки/выгрузки по FTP отделяет загрузку от загрузки. Загрузка — это односторонняя операция, при которой файл помещается на сервер, но не доступен. Администратор должен проверить загрузку и переместить ее в область загрузки, где она доступна только для чтения. Никто не может инициировать выполнение любого файла, потому что сервер будет игнорировать любые исполняемые флаги и просто отправит байты такого файла обратно.

person Sven    schedule 28.02.2016

Вы даже не можете открывать файлы в каталоге без разрешения executable. Но вы можете получить доступ к файлам в каталоге без разрешения read. Разрешение read необходимо для перечисления содержимого каталога.

0644 каталоги недоступны, кроме root.

Примеры

Недоступно:

dir/ = drw-rw-r-- (0644) -- фактически то же, что и d--------- (0000)

Так что file_get_contents ('dir/file.txt') всегда будет терпеть неудачу.

Доступно, но нет возможности перечислить:

dir/ = d-wx-wx--x (0331)

Так что file_get_contents ('dir/file.txt') будет работать, если dir/file.txt существует. Но opendir ('dir') не будет.

Полностью доступны:

dir/ = drwxrwxr-x (0775)

file_get_contents ('dir/file.txt') будет работать, если dir/file.txt существует. И opendir ('dir') вернет содержимое каталога.

person nord-stream    schedule 28.02.2016