6

В настоящее время я не могу загрузить файл в веб-папку. Что бы я ни делал, даже установив для папки права доступа 0777, я не могу загрузить в нее файл. Из любопытства я искал риск, связанный с установкой прав доступа к файлу 0777.

Нашел вопрос здесь, но не совсем ответил, что искал.

Я совершенно не осведомлен в этой теме. Какие риски связаны?

4 ответа4

7

Установка 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).

2

Каждый, у кого есть доступ к папке (т. Е. Разрешение x для каждой папки в пути), может прочитать, изменить и выполнить файл.

Если это что-то действительно исполняемое, существует высокий риск того, что злонамеренные пользователи добавят плохой код, а затем ждут, пока вы его запустите, чтобы заставить вас выполнить какой-то злой код (например, создание копии bash , для которой злоумышленник имеет setuid и исполняемый файл)).

Если вы используете общий хостинг, проверьте, не достаточно ли 0770 - если ваш пользователь FTP находится в той же группе, что и веб-сервер, этого будет достаточно. В этом случае вышеупомянутые риски обычно не применяются, так как вы никогда не собираетесь выполнять вещи в целевой папке загрузки, а PHP имеет open_basedir для ограничения доступа других пользователей к вашим файлам. Однако, если хост также поддерживает сценарии CGI (например, с использованием Perl), это можно легко обойти.

0

Я, вероятно, не отвечаю на ваш вопрос о рисках, но я могу догадаться, почему вы не можете написать.

Возможно, родительская папка не имеет доступа для записи для этого пользователя ...

используйте что-нибудь в строке chmod ugo+w whateverfile от родительского каталога, пока вы не сможете создавать файлы в нем :)

0

Предполагая, что вы уже исключили некоторые основные настройки безопасности PHP (ограничения open_basedir и др.) - отладка и error_reporting(E_ALL); (убедитесь, что вы регистрируете ошибки вместо того, чтобы отображать их в производственных системах), очень полезно проверить это:p.

Если вы установите права доступа к папке 777 (доступный для записи), и процесс все еще не сможет выполнить запись в эту папку, тогда может быть запущена реализация MAC, которая предотвращает подобные вещи (SELinux или AppArmor, вероятно, являются кандидатами, если вы используя Linux). Если это так, то изменение политики, которую они навязывают, поможет решить эту проблему. Установка папки, доступной для записи во всем мире, является возможной проблемой безопасности (особенно когда рассматриваемая папка открыта для внешнего мира), и ее также, скорее всего, можно избежать.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .