Уязвимость прав доступа к файлам в чистом ftpd с использованием php-скрипта

Я создал ftp-сервер, используя чистый ftpd, следуя этому замечательному руководству. Все отлично работает, кроме доступа к файлам. Здесь проблема.

Домашняя папка Джо - /var/www/joe, а домашняя папка Стива - /var/www/steve. Когда они входят в систему на сервере ftp, они заходят в свои домашние папки и не могут получить доступ к папкам других пользователей. Но когда Джо пишет скрипт на PHP для доступа к файлу Стива, он может получить к нему доступ. Например, этот скрипт отлично работает для Джо:

$filename = "/var/www/steve/somefile";
$handle = fopen($filename, "r");
$contents = fread($handle, filesize($filename));
echo $contents;

Это проблема ftp-сервера или проблема файла виртуального хоста apache?

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

Спасибо заранее!

1 ответ

Проблема заключается в HTTP-сервере, так как (по умолчанию) сценарии запускаются как www-data пользователь.

Чтобы продолжить аналогию, Стив, скорее всего, имеет права доступа к файлам для /var/www/steve/somefile установите на 755 - который предоставляет права на чтение и выполнение любому пользователю. Потому что Apache выполняет PHP-скрипты как www-data пользователь, PHP-скрипты не будут сталкиваться с проблемами при доступе к файлу.

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

chmod 700 /var/www/steve/somefile

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

Некоторые FTP-клиенты предоставляют средства для изменения прав доступа к файлам, поэтому я рекомендую вам обратиться к руководству для вашего FTP-клиента.

Такие инструменты, как Apache suEXEC, приведут к выполнению сценария PHP под реальной учетной записью пользователя, но, конечно, он не защитит от уязвимости, на которую вы ссылаетесь.

Другие вопросы по тегам