Какие проблемы безопасности я должен иметь при установке FS_METHOD на «direct» в wp-config?

36

У меня недавно была проблема, когда я не смог установить плагин WP Smush Pro, потому что у меня нет доступных вариантов ручной установки или установки одним щелчком.

Я наткнулся на этот пост, в котором предлагалось настроить параметры wp-config.php. Я добавил предложенные настройки, однако наиболее важными являются следующие:

define('FS_METHOD', 'direct');

То , что я хотел бы знать, какие реальные проблемы должны я вокруг установки FS_METHODдля direct? Есть ли другие варианты установки плагина?

Вот что говорит официальная документация:

FS_METHOD форсирует метод файловой системы. Это должны быть только "direct", "ssh2", "ftpext" или "ftpsockets". Как правило, вы должны изменить это, только если у вас возникли проблемы с обновлением. Если вы измените его, и это не поможет, измените его обратно / удалите. В большинстве случаев установка его в «ftpsockets» будет работать, если не выбран автоматически выбранный метод.

(Первичное предпочтение) «direct» вынуждает его использовать запросы прямого файлового ввода-вывода из PHP, это чревато открытием проблем безопасности на плохо настроенных хостах. Это выбирается автоматически при необходимости.

crmpicco
источник

Ответы:

33

Это просто, как я понял идею API файлов WordPress . Если это не так, пожалуйста, понизь голос :)

Хорошо. Если вы загружаете файл, у этого файла есть владелец. Если вы загрузите свой файл с FTP, вы войдете в систему, и файл будет принадлежать пользователю FTP. Поскольку у вас есть учетные данные, вы можете изменять эти файлы через FTP. Владелец обычно может выполнить, удалить, изменить и т. Д. Файл. Конечно, вы можете изменить это, изменив права доступа к файлу .

Если вы загрузите файл с помощью PHP, файл будет принадлежать пользователю linux, который выполняет PHP. Этот пользователь теперь может редактировать, удалять, выполнять и т. Д. Файл. Это нормально, если только вы являетесь пользователем, который выполняет PHP в вашей системе.

Предположим, вы находитесь на «плохо» настроенном общем хосте. Многие люди используют свои PHP-сайты в этой системе. Допустим, только один пользователь linux выполняет PHP для всех этих людей. У одного из веб-мастеров на этом общем хосте плохие намерения. Он видит вашу страницу и выясняет путь к вашей установке WordPress. Например, WP_DEBUG имеет значение true, и появляется сообщение об ошибке, например

[warning] /var/www/vhosts/userxyz/wp-content/plugins/bad-plugin/doesnt-execute-correctly.php on line 1

«Ха!» плохой мальчик говорит. Давайте посмотрим, если этот парень поставил FS_METHODна directи он пишет сценарий , как

<?php
unlink( '/var/www/vhosts/userxyz/wp-content/plugins/bad-plugin/doesnt-execute-correctly.php' );
?>

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

Ваш сайт взломан.

Или, как говорится в Кодексе:

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

websupporter
источник
15

Каковы риски?

На плохо сконфигурированном общем хосте PHP каждого клиента будет работать как один и тот же пользователь (скажем, apacheдля обсуждения). Эта установка удивительно распространена.

Если вы находитесь на таком хосте и используете WordPress для установки плагина с помощью прямого доступа к файлам, все ваши файлы плагина будут принадлежать apache. Законный пользователь на том же сервере сможет атаковать вас, написав PHP-скрипт, который внедряет злой код в ваши файлы плагинов. Они загружают свой скрипт на свой сайт и запрашивают его URL. Ваш код успешно скомпрометирован, потому что их скрипт работает так apacheже, как тот, который владеет вашими файлами плагинов.

При чем FS_METHOD 'direct'тут?

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

Поведение по умолчанию попытается определить, находитесь ли вы в среде риска, подобной той, которую я описал выше, и если она считает, что вы в безопасности, она будет использовать 'direct'метод. В этом случае WordPress будет создавать файлы напрямую через PHP, в результате чего они будут принадлежать apacheпользователю (в этом примере). В противном случае он вернется к более безопасному методу, например, запросит учетные данные SFTP и создаст файлы так же, как вы.

FS_METHOD = 'direct'просит WordPress обойти это обнаружение с риском и всегда создавать файлы, используя 'direct'метод.

Тогда зачем использовать FS_METHOD = 'direct'?

К сожалению, логика WordPress для обнаружения среды, подверженной риску, несовершенна и дает как ложноположительные, так и ложноположительные результаты. Упс. Тест включает в себя создание файла и проверку того, что он принадлежит тому же владельцу, что и каталог, в котором он находится. Предполагается, что если пользователи одинаковы, PHP работает как ваша собственная учетная запись и безопасно устанавливать плагины под этой учетной записью. Если они разные, WordPress предполагает, что PHP работает как общая учетная запись, и устанавливать плагины в качестве этой учетной записи небезопасно. К сожалению, оба эти предположения являются обоснованными догадками, которые часто ошибочны.

Вы должны использовать define('FS_METHOD', 'direct' );в ложном положительном сценарии, таком как этот: вы являетесь частью доверенной команды, члены которой все загружают файлы через свою учетную запись. PHP работает как отдельный пользователь. WordPress будет предполагать, что это опасная среда и не будет использовать 'direct'режим по умолчанию . На самом деле он доступен только пользователям, которым вы доверяете, и поэтому такой 'direct'режим безопасен. В этом случае вы должны использовать define('FS_METHOD', 'direct' );WordPress для прямой записи файлов.

отметка
источник
1

Существует «хорошо сконфигурированная» ситуация, когда «прямой» приведет к проблемам.

Также возможно настроить общий хостинг WP с неиспользуемыми пользователями исполнения PHP, отличными от пользователей, владеющих файлами / каталогами. Таким образом, вы получите файлы, принадлежащие пользователю user1, а код PHP будет выполнен как php-user1.

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

Поэтому, если хостинг настроен таким образом, вы ДОЛЖНЫ использовать FTP для обновлений, и «прямой» не будет работать.

Если вы установили 'direct' в wp-config.php, а пользователь-исполнитель PHP не имеет разрешения на запись, вы получите сообщения об ошибках обновления и у вас не появится всплывающее окно с запросом учетных данных FTP.

Дэнни
источник