Уязвимость прав доступа к файлам в чистом 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 под реальной учетной записью пользователя, но, конечно, он не защитит от уязвимости, на которую вы ссылаетесь.