понедельник, 2 мая 2011 г.

Настройка виртуальных пользователей и SSL в vsftpd

Иногда возникает необходимость настроить виртуальных пользователей и SSL шифрование в FTP сервере vsftpd. Рассмотрим как это сделать в Debian Squeeze.

Итак, начнём. Все действия выполняются от пользователя root. Сперва установим необходимые утилиты:

$ aptitude install vsftpd openssl db4.8-util ftp-ssl

  • vsftpd - непосредственно FTP сервер;
  • openssl - утилита создания SSL сертификатов, которые требуются в SSL режиме FTP сервера;
  • db4.8-util - утилиты работы с базой данных Беркли, в которой будут хранится виртуальные пользователи;
  • ftp-ssl - SSL версия FTP клиента, эта утилита нужна только на клиентской стороне.

Добавим пользователя в систему, через которого будут работать виртуальные FTP пользователи:

$ useradd -d /home/ftp virtual

Теперь изменим конфигурацию FTP сервера. Данных ключей в конфиге по-умолчанию нет, поэтому их можно просто добавить в конец файла /etc/vsftpd.conf:

# включаем гостевой доступ через нашего виртуального пользователя
guest_enable=YES
guest_username=virtual

# включаем SSL
ssl_enable=YES

# шифрование процедуры логина и всех передаваемых данных внутри сессии
force_local_logins_ssl=YES
force_local_data_ssl=YES

# ущемляем права анонимных пользователей - их траффик шифроваться не будет
# (только если анонимные пользователи разрешены)
allow_anon_ssl=NO

# используем только протокол TLS
ssl_tlsv1=YES
ssl_sslv2=NO
ssl_sslv3=NO

# многократное использование одной сессии
require_ssl_reuse=NO

Дополнительно для проверки соединения вы можете установить ключ local_enable=YES, который разрешает локальным пользователям логиниться на FTP.

Создаём базу данных виртуальных пользователей:

$ db4.8_load -T -t hash /etc/vsftpd_login.db

Эта утилита будет читать логины и пароли со стандартного ввода, один логин и один пароль на каждую отдельную строку. Вводим "user", нажимаем ввод, вводим "pass", нажимаем ввод.

Изменяем процедуру аутентификации ftp пользователей через PAM в конфигурационном файле /etc/pam.d/vsftpd:

# путь к базе данных виртуальных пользователей (без суффикса "db")
account required    pam_userdb.so     db=/etc/vsftpd_login
auth    required    pam_userdb.so     db=/etc/vsftpd_login

Создадим SSL сертификат для FTP сервера, время действия которого истечёт через год. Путь к этому сертификату уже прописан в конфигурационном файле vsftpd:

$ cd /etc/ssl/private/
$ openssl req -x509 -nodes -days 365 -newkey rsa:1024 -keyout vsftpd.pem -out vsftpd.pem

Всё, осталось перезапустить сервис FTP:

$ invoke-rc.d vsftpd restart

Проверяем логин:

$ ftp localhost
Connected to localhost.
220 (vsFTPd 2.3.2)
Name (localhost:root): user
234 Proceed with negotiation.
[SSL Cipher DES-CBC3-SHA]
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp: pwd
257 "/"
ftp:

Заметка: FTPS (FTP+SSL) и SFTP - это два разных протокола, не стоит их путать.

Ссылки:

Комментариев нет: