Генерируем пароль:
openssl passwd -1 yoursecretpassword
Результат($1$5htlgrc7$FHf5uCbSol0oKKYN3upE0/), добавляем в файл /etc/vsftpd_login.db. Синтаксис файла:
Имя_юзера1:Пароль_юзера1
Имя_юзера2:Пароль_юзера2
Создать папку по имени пользователя в /home/Имя_юзера
права на нее выставить 755, владельцем сделать ftpuser‘а под которым работают виртуальные пользователи. Получить список всех пользователей:
cat /etc/passwd
.
Памятка по настройке vsftpd на FreeBSD 11
1. Устанавливаем из портов VsFTPd
# cd /usr/ports/ftp/vsftpd # make install clean
2. Устанавливаем из портов pam_pwdfile. Нужен pam_pwdfile, чтобы не создавать в системе фтп-юзеров, а сделать виртуальных. Классная утилита, которую можно использовать, где необходима авторизация и вирт. пользователи.
# cd /usr/ports/security/pam_pwdfile # make install clean
3 Создаем файл для вирт. пользователей vsftpd
# touch /etc/pam.d/vsftpd
4. Открываем в редакторе и прописываем в нем следующее
auth required /usr/local/lib/pam_pwdfile.so pwdfile /etc/vsftpd_login.db account required /usr/lib/pam_permit.so
4. Создаем файл базы данных с логинами и паролями пользователей vsftpd:
touch /etc/vsftpd_login.db
Генерируем открытый хеш пароля «mypassword»
# openssl passwd -1 mypassword
Результат:
$1$5htlgrc7$FHf5uCbSol0oKKYN3upE0/
вставляем его в файл /etc/vsftpd_login.db, синаксис:
Имя_юзера:Пароль_юзера
Каждый юзер с новой строки. Запись будет выглядеть примерно так:
username:$1$5htlgrc7$FHf5uCbSol0oKKYN3upE0/
5. Устанавливаем права на файл.
# chmod 600 /etc/vsftpd_login.db
6. Дальше надо добавить пользователя в систему под которым будут работать все виртуальные пользователи и будут создаваться файлы и папки по фтп и установить ему /usr/sbin/nologin
# pw adduser ftp_user -g www -d /nonexistent -s /usr/sbin/nologin -c "FTP user for user main"
Задаем ему пароль
# passwd ftp_user
7. Задаем директорию юзера.
# pw usermod ftp_user -d /home/ftp/
И теперь конфигурируем файл vsftpd.conf
Примечание: *Виртуальные пользователи работают как анонимы, если не указать файле конфига vsftpd.conf такую строку:
virtual_use_local_privs=YES
Пример vsftpd.conf
# запрет анонимных пользователей
anonymous_enable=YES
no_anon_password=YES
anon_root=/usr/home/ftp
anon_mkdir_write_enable=NO
anon_other_write_enable=NO
anon_world_readable_only=YES
# Разрешить локальных пользователей из файла /etc/passwd
local_enable=YES
# разрешаем запись
write_enable=YES
# маска на создаваемые локальными пользователям файлы
local_umask=022
# задаём права для файлов, но не каталогов
#file_open_mode=0777
force_dot_files=NO
# vsftpd работает самостоятельно, без помощи inetd/xinetd в "standalone mode"
listen=YES
# слушаем 21 порт
listen_port=21
# исходяшие соединения идут с 20 порта
connect_from_port_20=YES
dirmessage_enable=YES
# включаем запись логов
dual_log_enable=YES
xferlog_file=/var/log/vsftpd.log
xferlog_enable=YES
xferlog_std_format=YES
idle_session_timeout=600
data_connection_timeout=300
nopriv_user=ftp
#приветствие при входе
ftpd_banner=Attention It's private server Z37!
#добавил виртуальных пользователей
nonymous_enable=YES
no_anon_password=YES
anon_root=/usr/home/ftp
anon_mkdir_write_enable=NO
anon_other_write_enable=NO
anon_world_readable_only=YES
# Разрешить локальных пользователей из файла /etc/passwd
local_enable=YES
# разрешаем запись
write_enable=YES
# маска на создаваемые локальными пользователям файлы
local_umask=022
# задаём права для файлов, но не каталогов
#file_open_mode=0777
force_dot_files=NO
# vsftpd работает самостоятельно, без помощи inetd/xinetd в "standalone mode"
listen=YES
# слушаем 21 порт
listen_port=21
# исходяшие соединения идут с 20 порта
connect_from_port_20=YES
dirmessage_enable=YES
# включаем запись логов
dual_log_enable=YES
xferlog_file=/var/log/vsftpd.log
xferlog_enable=YES
xferlog_std_format=YES
idle_session_timeout=600
data_connection_timeout=300
nopriv_user=ftp
#приветствие при входе
ftpd_banner=Attention It's private server Z37!
#добавил виртуальных пользователей
pam_service_name=vsftpd
#запираем локальных пользователей в домашнем ка
chroot_local_user=YES
#пользователи указанные в vsftpd.chroot_list не запираются в клетку
chroot_list_enable=YES
chroot_list_file=/usr/local/etc/vsftpd/chroot_list
#userlist_file=/usr/local/etc/vsftpd/user_list
#userlist_enable=NO
#userlist_deny=NO
#защита от подбора паролей
#задержка перед сообщением об ошибке регистраци
#delay_failed_login=5
#max_login_fails=5
#delay_successful_login=0
#безопасный каталог, должен быть пустым и без пр
secure_chroot_dir=/var/empty
#максимальное количество клиентов, которые могу
max_clients=10
#максимальное количество соединений с одного ip
max_per_ip=10
#включаем пассивный режим
pasv_enable=YES
#диапазон портов для пассивного режима
pasv_min_port=40021
pasv_max_port=50221
#Для виртуальных пользователей
guest_enable=YES
guest_username=ftp_user
session_support=YES
# имя пользователя берем из логина
user_sub_token=$USER
allow_writeable_chroot=YES
chmod_enable=YES
virtual_use_local_privs=YES
#домашние директории, которые указаны в файле /etc/passwd
passwd_chroot_enable=YES
#отключаем проверку которая вызывает ошибку "vsftpd: refusing to run with writeble root inside chroot()"
allow_writeable_chroot=YES
#пользователи из списка vsftpd.user_list блокируются перед запросом пароля
#userlist_enable=YES
#разрешаем активный режим
port_enable=YES
#входящие соединения на 20 порт
#ftp_data_port=20
# поддержка древних FTP клиентов
async_abor_enable=YES
#скрываем настоящих владельцев файлов на ftp
hide_ids=YES
#перекодировка на лету в CP1251
#не работает: convert_charset_enable=YES
#local_charset=UTF8
#remote_charset=WIN1251
#работа в фоновом режиме
background=YES
#rsa_cert_file=/etc/ssl/certs/vsftpd.pem
#rsa_private_key_file=/etc/ssl/certs/vsftpd.key
#ssl_enable=YES
Для того чтобы никто не ломился и не перебирал пароли к вашему фтп, вешаем его на любой свободный не стандартный порт + в фаерволе сервака блокируем стандартные порты.
listen=YES
listen_port=2121
Если к фтп только у вас доступ или всего у нескольких человек, в
таком случае ограничите доступ к открытому порту фтп еще и по IP.
Если по IP нет возможности заблокировать, в таком случае максимально усложняем жизнь для перебора такими строками:
delay_failed_login=5
max_login_fails=5
Запрем вирт пользователей в своих директориях. Данные о них записываем в локальные файлы(в зависимости от того каким пользователем запускается демон vsftpd, выставите соотв. права на эти файлы).
chroot_local_user=YES
chroot_list_enable=YES# список пользователей, которых не будем запирать в домашней директории
chroot_list_file=/usr/local/etc/vsftpd/chroot_list
# список разрешенных пользователей, где в каждой строке логин фтп пользователя
userlist_file=/usr/local/etc/vsftpd/user_list
userlist_enable=YES
userlist_deny=NO
Также указываем какой пул портов использовать для передачи данных с сервера. Не забудьте в настройках фаервола сервера учесть эти порты.
pasv_min_port=40000
pasv_max_port=50000
Всем удачи в настройке вашего фтп сервера. Запись опубликована в рубрике: Заметки о FreeBSD.
Источник: http://zajtcev.org/other/freebsd/vsftpd-at-freebsd.html