CHMOD и безопасность каталогов на моем сервере

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

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

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

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

Спасибо.


person Ben McRae    schedule 26.02.2009    source источник
comment
на этот вопрос невозможно ответить без дополнительной информации. например, как на самом деле загружаются файлы? ваш код, вероятно, имеет достаточно собственных проблем, поэтому права доступа к каталогу загрузки являются наименьшей из ваших забот.   -  person    schedule 26.02.2009
comment
Спасибо за пестамизм в отношении моего кодирования, но на самом деле это не отвечает на вопрос. Файлы будут загружены через форму, созданную на странице php. Суть вопроса заключалась в том, чтобы выяснить, безопасно ли оставлять набор каталогов с разрешением 777?   -  person Ben McRae    schedule 26.02.2009
comment
обновить вопрос с этой информацией   -  person    schedule 26.02.2009
comment
+1 за вопрос. с этими вещами не очевидно, что есть проблема, потому что нет сообщений об ошибках или сбоев программы.   -  person    schedule 27.02.2009


Ответы (4)


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

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

Пока нет локальных пользователей, получающих доступ к системе другими способами (например, 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 и того, где они применяются, обычно приходит в начале, когда вы изучаете проблемы безопасности, что показывает, что вы, вероятно, еще не готовы решать все из возможных проблем.

Попросите кого-нибудь посмотреть ваш код!

person Community    schedule 26.02.2009
comment
Спасибо за этот замечательный пост, мне 19 лет, и я программирую PHP только 9 месяцев - хотя я не пытаюсь использовать это как оправдание, я просто никогда не понимал, до какой степени доходит безопасность, но это намного больше, чем я мысль. Спасибо, мне предстоит много исследований! - person Ben McRae; 27.02.2009
comment
ооо и еще кое-что, что касается пользователя, загружающего файл malicousa php. Знаете ли вы какие-нибудь хорошие способы предотвратить это? действительно было бы очень полезно! еще раз спасибо. - person Ben McRae; 27.02.2009
comment
задайте это в другом вопросе, ссылаясь на этот, и я постараюсь ответить на него. Есть несколько вещей, которые вы можете сделать, чтобы избежать неприятностей. - person ; 27.02.2009

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

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

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

$ chown root:корневой каталог; чмод 777 директор; chmod + т директор;

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

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

person Zachary Hamm    schedule 26.02.2009
comment
Я знаю, что chdir() потерпит неудачу с EACCES, если каталог -x. Он может управлять другими вещами? - person Zachary Hamm; 26.02.2009
comment
Спасибо за ответ. Пользователь будет загружать через форму в php-документе. Когда вы говорите без доступа к этой папке, теоретически любой, у кого есть учетная запись на моем сайте, будет иметь доступ для загрузки туда фотографий?Кто подпадает под категорию гостя/анонимного пользователя?Спасибо за помощь - person Ben McRae; 26.02.2009
comment
@eben, он в основном контролирует возможность просмотра файла каталога, поэтому cd dir не удастся. Также не работает find dir -print или ls dir/*. Вы по-прежнему можете получить доступ к файлам, если знаете их имена (например, cat dir/known_file). - person paxdiablo; 26.02.2009
comment
@Pax: не совсем; вам нужно разрешение x на каталог для доступа к файлам; вам нужно разрешение r для каталога, чтобы читать каталог (и перечислять файлы с помощью «ls», например). Вы правы в том, что если вы знаете имя, вам нужно только разрешение x на каталог и имя/разрешения на файл. - person Jonathan Leffler; 26.02.2009
comment
Извини, @JL, ты прав. R дает вам возможность читать каталог, вам все еще нужен X, чтобы получить доступ к файлам внутри. - person paxdiablo; 26.02.2009
comment
@Ben: Если вы используете PHP-скрипт, то единственная учетная запись на сервере, которой требуется разрешение на запись в эту папку, — это та, под которой работает PHP-скрипт. Вероятно, это «www» или что-то в этом роде. Под учетной записью я имел в виду оболочку входа в систему или учетную запись ftp. «Учетная запись на веб-сайте» — слишком расплывчато. - person Zachary Hamm; 26.02.2009
comment
@ebencooke, извините, вы правы, я не совсем правильно объяснил свой вопрос. Ни у кого, кроме меня, не будет доступа к шеллу, фтп и тому подобному! Я действительно не понимал, как далеко может зайти этот вопрос, прежде чем опубликовать его. я отредактирую исходный вопрос! - person Ben McRae; 27.02.2009

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

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

person samoz    schedule 26.02.2009
comment
Привет samoz, спасибо за ответ. Когда он говорит «пользователь/группа», а затем «все» — кто подпадает под какую группу? Я предполагаю, что я владелец? - person Ben McRae; 26.02.2009
comment
какое отношение флаг исполняемого файла в каталоге имеет к маскировке исполняемых файлов под изображения? - person ; 26.02.2009
comment
также что это значит под исполняемым, как при выполнении программ? - person Ben McRae; 26.02.2009
comment
Флаг исполняемого файла определяет, можете ли вы выполнять код или нет. Если этот флаг выключен, даже если вы замаскируете исполняемый файл под образ, вы не сможете его запустить, что идеально. - person samoz; 26.02.2009
comment
а) это неправда. есть приемы для выполнения кода даже без +x; б) речь идет о правах доступа к каталогу, а не к файлу. - person ; 26.02.2009

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

person Jeremy L    schedule 26.02.2009
comment
Права доступа к папке 777 - не обязательно права доступа к файлу. Я согласен, файлы вообще не нужно запускать; папок, так как вы не можете получить доступ к файлам внутри без разрешения на выполнение (поиск). - person Jonathan Leffler; 02.03.2009