Могут ли люди записать файл .php в папку chmod 777

Можно ли хакерам (или другим) загружать/записывать php файл в папку на моем сайте с chmod 777?

Пример:

У меня есть папка с chmod 777. Эта папка содержит изображения. Я использую .htaccess для блокировки индексирования папки.

Реформированный вопрос: Могут ли люди записать файл .php в мою папку с chmod 777, используя PHP script на своем веб-сайте? Например, чтобы отобразить все изображения в этой папке

(Я знаком с правильным chmod для загрузки папки и т.д., просто прошу его гипотетически)

Ответы

Ответ 1

Очень хорошо, что любой законный пользователь этой машины может писать файлы .php или что-то еще, что они хотят, в этот широко открытый каталог. В каталоге 777 почти нет места на общем хосте. (/tmp иногда может быть 1777, чтобы установить липкий бит в каталоге - это позволяет только владельцу файла удалять файл в каталоге. Обычно 777 означает, что любой может удалить любой файл из каталога. Но /tmp определенно вышло из моды на средах с общим хостингом, потому что по своей сути они небезопасны.)

Итак: Вы единственный пользователь на машине? Или эта машина делится с кем-то еще? Поддерживает ли эта машина какие-либо другие службы, кроме веб-сервера? Если это так, эти другие службы могут также представлять собой возможный вектор атаки.

Кроме того, если ваши разрешения установлены на 777 в вашем каталоге, мне интересно, насколько безопасны файлы PHP, которые вы используете, - я видел много случаев, когда люди запускали небезопасные PHP-скрипты, которые позволяют злоумышленнику изменять каждый HTML файл на всем веб-сервере, чтобы заразить людей, просматривающих сайт. (Да, многие. Больше, чем горстка.)

Вот почему любая учетная запись пользователя, которую выполняет ваш веб-сервер, не должна владеть ни одним из файлов веб-сайта - как статическими страницами, так и динамическими страницами. Веб-сервер должен иметь только достаточные права записи для записи своих access.log, error.log и разговаривать с сервером базы данных. Любые дополнительные привилегии, помимо этого, позволяют легко использовать другую уязвимую ошибку в одном из ваших сценариев, чтобы стать уязвимостью, доступной для вашего сайта, используется для нападения на других.

777 - плохая идея. Исправьте это. Убедитесь, что ваш веб-сервер не имеет права на запись на любой веб-контент. Убедитесь, что никакая другая служба на сервере не имеет права на запись на ваш веб-контент. Убедитесь, что другие пользователи на сервере не имеют права на запись на ваш веб-контент.

Обновление

Это проще, чем кажется. Создайте нового пользователя webcontent. Если у вашего веб-сервера уже есть своя собственная группа, используйте его и назовите его webgroup. Если это еще не сделано, создайте новый webgroup. (adduser(8) и addgroup(8), если ваш VPS не имеет собственного механизма.) Затем установите владельца для всего вашего веб-контента:

chown -R webcontent:webgroup /path/to/web/content

исправления:

find /path/to/web/content -type d -print0 | xargs -0 chmod 750
find /path/to/web/content -type f -print0 | xargs -0 chmod 640

затем убедитесь, что ваш веб-сервер использует директиву Group webgroup, чтобы убедиться, что он все еще может читать все файлы, которые ему нужны.

Это позволит вашему веб-серверу читать доступ ко всем вашим сценариям и настройкам, но если сам веб-сервер взломан, он не может изменить его.

Ответ 2

Есть (по крайней мере) три способа, которые кто-то может записать в ваш каталог:

  • Если они имеют локальный контроль над сервером (например, через терминал)
  • Если ваш веб-сервер поддерживает и разрешает метод PUT HTTP
  • Если у вас есть script, который позволяет людям загружать файлы в этот каталог

Пока вы публично не открываете папку в режиме записи, никто не может удаленно изменять содержимое папки. Это независимо от локальных разрешений. Установленные локальные разрешения позволяют любому локальному пользователю сервера читать, записывать и выполнять в этой папке, но это не означает, что удаленный злоумышленник может.

Сказав это, избегайте разрешений 777, если это абсолютно необходимо/безопасно.

Ответ 3

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

Вам понадобится больше, чем просто каталог, который доступен для чтения и записи всем (777) для взлома. Использование разрешений 777 обычно указывает на плохое понимание функций безопасности вообще (или лень, когда код необходимо перераспределить, и автор не хочет делать это слишком сложным, объясняя права доступа к файлам для пользователя script).