CHMOD и безопасность для каталогов на моем сервере - PullRequest
2 голосов
/ 26 февраля 2009

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

Итак, я хочу знать, какие риски безопасности связаны с этим?

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

Могут ли они начать загружать любые файлы по своему усмотрению?

Спасибо.

Ответы [ 4 ]

3 голосов
/ 26 февраля 2009

Когда пользователи загружают файлы на ваш сервер через веб-форму и некоторый PHP-скрипт, доступ к диску на сервере происходит с идентификатором пользователя, под которым работает веб-сервер (обычно никто, www-data, apache, _httpd или даже корень).

Обратите внимание, что этот идентификатор одного пользователя используется независимо от того, какой пользователь загружает файл.

Пока нет локальных пользователей, обращающихся к системе с помощью других средств (например, ssh), установка разрешений на загрузку каталогов на 0777 не будет иметь большого значения - начните с того, кто использует систему безопасности Уязвимость где-то еще в вашей системе, к которой в любом случае эти разрешения не применяются, и такой злоумышленник, вероятно, просто использует /tmp.

Рекомендуется устанавливать только те разрешения для файла или каталога, которые действительно необходимы. В данном случае это означает что-то вроде:

drwxrws--- 5 www-data www-data          4096 Nov 17 16:44 upload/

Я предполагаю, что другие локальные пользователи, помимо веб-сервера, захотят получить доступ к этим файлам, например, системный администратор или веб-дизайнер. Добавьте этих пользователей в группу, под которой работает ваш веб-сервер, и им не нужны права доступа sudo или root для доступа к этому каталогу. Кроме того, +s означает, что новые файлы и каталоги в upload/ будут автоматически принадлежать той же группе.

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

Тем не менее, есть еще несколько аспектов "безопасности" и "безопасности", которые вы не можете адресовать с разрешениями файлов во всей этой установке:

  • загрузчики могут перезаписывать файлы друг друга, потому что все они работают с одним и тем же идентификатором пользователя
  • кто-то может загрузить вредоносный PHP-скрипт в каталог загрузки и запустить его оттуда, возможно, использовать другие уязвимости в вашей системе и получить root-доступ
  • кто-то может использовать сервер для распространения детской порнографии
  • кто-то может запустить фишинговый сайт с вашего сервера после загрузки аналога paypal.com

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

Кто-нибудь просматривал ваш код!

1 голос
/ 26 февраля 2009

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

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

Если вам нужен каталог, в котором каждый может создавать файлы, вам нужно имитировать права доступа к каталогу / tmp.

$ chown root: root dir; chmod 777 dir; chmod + t dir;

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

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

0 голосов
/ 26 февраля 2009

Вы не хотите, чтобы исполняемый бит был включен. Что касается * nix, то исполняемый бит означает, что вы действительно можете запустить файл. Так, например, сценарии php могут быть загружены как тип JPEG, и тогда кто-то может запустить этот сценарий, если он знает местоположение и оно находится в веб-каталоге.

0 голосов
/ 26 февраля 2009

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

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

...