Vsftpd
Задача
правитьНастраиваю ftp-сервер, который будет доступен из сети Интернет на чтение. Для доступа к серверу необходимо ввести логин и пароль. Все действия выполнялись удаленно через ssh.
Сначала установим ftp-сервер vsftpd:
sudo apt-get install vsftpd
Настройка
правитьСоздаем учетную запись виртуального пользователя (пользователей)
правитьДля аутентификации виртуального пользователя будет использована подсистема PAM и ее модуль pam_userdb. Для модуля pam_userdb необходимо создать файл db-формата в котором будет содержаться учетная запись виртуального пользователя и пароль. Сначала необходимо создать обычный текстовый файл в котором будет логин и пароль, а затем на его основе сконвертировать db-файл.
Для генерации пароля использовал программу pwgen. Если pwgen не установлена, устанавливаем:
sudo apt-get install pwgen
Создаем файл login.txt, в котором будет логин - userftp и пароль:
echo userftp > login.txt pwgen -N 1 >> login.txt
Проверяем файл login.txt:
cat login.txt userftp rekhahra
Далее генерируем db-файл - vsftpd_login.db с помощью утилиты db_load. Но сначала установим пакет в который входит данная программа:
sudo apt-get install db4.7-util
Теперь выполняем команду которая создаст db-файл:
sudo db4.7_load -T -t hash -f login.txt /etc/vsftpd_login.db
Устанавливаем разрешения на файл /etc/vsftpd_login.db:
sudo chmod 600 /etc/vsftpd_login.db
Создаем PAM-файл в котором пропишем правила аутентификации
правитьДля этого открываем в текстовом редакторе файл /etc/pam.d/vsftpd:
sudo nano /etc/pam.d/vsftpd
и в конце файла дописываем следующие две строки:
auth required /lib/security/pam_userdb.so db=/etc/vsftpd_login account required /lib/security/pam_userdb.so db=/etc/vsftpd_login
Остальные строки нужно закомментировать. В этом файле мы указываем подсистеме PAM выполнять аутентификацию на основе учетных записей, которые содержаться в созданном db-файле.
Создаем локального пользователя и каталог для ftp-сервера
правитьЛокальный пользователь нужен, чтобы задать права для ftp-каталога. Этот пользователь не будет иметь пароля, и зарегистрироваться локально в системе используя эту учетную запись будет нельзя. Назовем учетную запись virtualftp, а каталог для ftp-сервера - /home/vsftp/. Создаем пользователя:
sudo useradd -d /home/vsftp -s /sbin/false virtualftp
Далее создаем каталог /home/vsftp/ и выставляем разрешения:
sudo mkdir /home/vsftp sudo chown virtualftp:virtualftp /home/vsftp/ sudo chmod 700 /home/vsftp/
Проверяем разрешения:
sudo ls -l /home/ drwx------ 2 virtualftp virtualftp 4096 2010-03-30 21:21 vsftp
Создаем конфигурационный файл vsftpd.conf
правитьПереместим существующий файл в домашний каталог:
sudo mv /etc/vsftpd.conf ~
а на его месте создадим новый (sudo nano /etc/vsftpd.conf) следующего содержания:
anonymous_enable=NO local_enable=YES write_enable=NO anon_upload_enable=NO anon_mkdir_write_enable=NO anon_other_write_enable=NO anon_world_readable_only=NO guest_enable=YES guest_username=virtualftp chroot_local_user=YES listen=YES listen_port=10021 pasv_min_port=30000 pasv_max_port=30999
Пояснения к параметрам пока писать не буду так как они хорошо описаны в оригинальном руководстве.
На этом настройка vsftpd закончена. Скопируем в каталог /home/vsftp/ какой-нибудь файл для проверки:
sudo cp hello.txt /home/vsftp/
Выставим разрешения для пользователя virtualftp:
sudo chown virtualftp:virtualftp /home/vsftp/hello.txt sudo chmod 700 /home/vsftp/hello.txt
Теперь выполним рестарт ftp-сервера:
sudo /etc/init.d/vsftpd restart
* Stopping FTP server: vsftpd [ OK ] * Starting FTP server: vsftpd [ OK ]
Проверяем работу ftp-сервера:
ftp localhost 10021
Connected to localhost. 220 (vsFTPd 2.2.0) Name (localhost:igor): userftp 331 Please specify the password. Password: 230 Login successful. Remote system type is UNIX. Using binary mode to transfer files. ftp> ls 200 PORT command successful. Consider using PASV. 150 Here comes the directory listing. -rwx------ 1 1003 1004 8 Mar 30 18:37 hello.txt 226 Directory send OK.
ftp-сервер vsftpd - работает. Обращаю также внимание на, что в качестве логина используется не локальная учетная запись (virtualftp), а виртуальная учетная запись userftp, которая создавалась на первом шаге.
Если необходимо вести лог-файл, то в конфигурационный файл /etc/vsftp.conf нужно добавить строчку:
xferlog_enable=YES
В этом случае информация о работе ftp-сервера будет записываться по умолчанию в файл /var/log/vsftpd.log.
Для того чтобы ftp-сервер был доступен из сети Интернет, необходимо пробросить порты на роутере. Описывать здесь эту процедуру не буду, чтобы не перегружать статью. Скорее всего напишу об этом отдельно.
В завершение темы о настройке vsftpd рекомендую перевод man vsftpd.conf, в котором расписаны значения каждого параметра файла vsftpd.conf.