Задача

править

Настраиваю 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.