Попросили меня тут на днях развернуть FTP-сервер, аналогичный нашей Днепропетровской файлопомойке, на сервере знакомого одного моего друга. Согласился, так как после беспрестанных переустановок ПО на нашем сервере уже приловчился поднимать FTP за 5 минут. А не все-то так просто было...
Оказалось, что сервер этого самого знакомого работает под управлением Fedora 15, а процесс установки на ней, ясное дело, отличается от Debian'овского, который описан у меня в блоге. Опишу здесь сегодняшний процесс установки, вдруг кому-нибудь (хотя бы мне самому) пригодится.
Итак, для начала, собственно, установим сам сервер:
sudo yum install vsftpd
Затем формируем файл, в котором у нас будет логин и пароль для доступа на FTP-сервер:
echo 'ftpusername' > auth.txt
echo 'ftpuserpass' >> auth.txt
Вместо «ftpusername» ― логин, вместо «ftpuserpass», соответственно, пароль. А вот на этом этапе моя инструкция для Debian'а работать прекращает, ибо в ней сказано, что далее нужно установить пакет db4.7-util, но в Fedora такой пакет для установки недоступен. Зато есть другой, который уже установлен. Таким образом, далее делаем следующее:
sudo db_load -T -t hash -f auth.txt /etc/vsftpd/vsftpd_login.db
Теперь открываем файл /etc/pam.d/vsftpd, удаляем все, что в нем есть и вставляем следующие строки (для 64-битной версии):
auth required /lib64/security/pam_userdb.so db=/etc/vsftpd/vsftpd_login
account required /lib64/security/pam_userdb.so db=/etc/vsftpd/vsftpd_login
Или же вот эти, если у Вас не 64-битная:
auth required /lib/security/pam_userdb.so db=/etc/vsftpd/vsftpd_login
account required /lib/security/pam_userdb.so db=/etc/vsftpd/vsftpd_login
На всякий случай делаем копию файла /etc/pam.d/vsftpd в этой же папке, но уже с именем vsftpd.pam:
sudo cp /etc/pam.d/vsftpd /etc/pam.d/vsftpd.pam
Дальше создаем пользователя с таким же логином и паролем, как в auth.txt, после чего объявляем его домашней папкой ту, которую Вы желаете опубликовать по FTP. Более подробно об этом этапе я писал в статье для Debian.
Теперь займемся настройкой vsftpd. Открываем файл /etc/vsftpd/vsftpd.conf, удаляем все его содержимое и вставляем следующее:
anonymous_enable=NO
local_enable=YES
write_enable=YES
local_root=/path/to/ftp/root #папка, которую мы хотим опубликовать
pam_service_name=vsftpd
anon_upload_enable=NO
anon_mkdir_write_enable=NO
anon_other_write_enable=NO
chroot_local_user=YES
guest_enable=YES
guest_username=ftpusername #имя пользователя
virtual_use_local_privs=YES
chmod_enable=YES
chown_uploads=YES
chown_username=ftpusername #имя пользователя еще раз (все загружаемые по ftp файлы будут принадлежать этому пользователю)
local_umask=0022
anon_umask=0007
file_open_mode=0777
listen=YES
listen_port=21
pasv_min_port=40000
pasv_max_port=40999
xferlog_std_format=YES
xferlog_file=/var/log/vsftpd.log
tcp_wrappers=YES
dirmessage_enable=YES
ftpd_banner=Welcome to our ftp server! #приветствие после авторизации
Перезагружаем vsftpd и пытаемся войти на FTP-сервер, пользуясь заданными нами в файле auth.txt логином и паролем. Если удастся, то все прошло успешно, если же возникает ошибка «500 OOPS: Cannot change directory», то это нам SELinux не разрешает нашим сервером пользоваться. Есть два варианта решения этой проблемы (у меня лично два, а у других может и побольше. ):
1. При помощи команды «sudo getsebool -a | grep ftp» найти значения, равные «off» и попробовать включить их при помощи команды «sudo setsebool %name% on». Включать, конечно, не все нужно. Я изменил значение парочки и все заработало (каких именно не скажу, так как позабыл уже). После включения перезагружаем vsftpd.
2. Отключить SELinux вообще (что в итоге и сделал владелец этого сервера после того, как не смог заставить работать lighttpd. Не понятно только, зачем я первый способ полдня гуглил...). Это можно сделать таким образом: открываем /etc/selinux/config, находим в нем строчку «SELINUX=enforcing» и меняем ее на «SELINUX=disabled». После сохранения перезагружаем компьютер.
А еще у Fedora есть такое интересное отличие: vsftpd там не запускается автоматом при загрузке компьютера, а требует ручного запуска после каждой перезагрузки. Исправить это можно так:
sudo chkconfig --level 235 vsftpd on
На локальной машине подключение по FTP происходит, загрузка файлов происходит ― казалось бы, все работает. А вот нет, это еще не все. В Fedora есть еще и встроенный фаервол, который будет препятствовать подключению к Вашему серверу клиентов с других компьютеров. Для того, чтобы все заработало, нужно либо отключить фаервол, либо открыть нужные нам порты. Делаем это так:
sudo system-config-firewall
Затем выбираем «Другие порты», жмем на кнопку «Добавить» и отмечаем пункт «Определенный пользователем». В поле «Порт» вписываем 21 (или другой порт, на котором работает FTP) и жмем «OK». Потом повторяем ту же процедуру, но вместо «21» прописываем «40000-40999» («pasv_min_port» и «pasv_max_port» из vsftpd.conf соответственно). В главном окне настроек фаервола жмем «Применить» и пробуем подключится.
Вот так я и развернул FTP-сервер на Fedora 15. Теперь вот подумываю, не поставить ли мне на свой компьютер этот дистрибутив.