И так, когда я впервые настраивал фтп сервер на Freebsd, я очень долго на этом застрял в силу нехватки знаний.
Поэтому оставлю эту настройку здесь, дабы в другой раз не терять на этом время. Да и может еще кому пригодится.
Существует огромное количество портов фтп серверов. Самыми популярными из них являются VsFTPd и ProFTPd.
Не буду описывать все за и против каждого из них, т.к. не об этом речь сейчас :)
Почему лично я выбрал VsFTPd, а не ProFTPd.
Мне изначально друг сисадмин советовал поставить ProFTPd, я начал копаться по форумам и блогам, сравнивать отзывы о каждом.
В общем, считается, что ProFTPd более дырявый :)
Но скажу, что VsFTPd завелся у меня далеко не сразу. Когда я в очередной раз застрял, плюнул на него и снес к чертовой бабушке.
Решил ставить ProFTPd… ну не нравились мне некоторые вещи, да и не получалось все сразу так как хотелось. К тому же он потребляет больше ресурсов системы, и это был решающий момент. Поскольку все настраивал на ВПС, а он как известно не резиновый, решил все же сэкономить на ресурсах и вернуться к VsFTPd.
Черт его знает, как, но в этот раз все завелось с полпинка. Счастья было полные трусы :)
Настройка VsFTPd на FreeBSD 9
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 /usr/local/etc/pam.d/vsftpd
4. Открываем в любом редакторе и прописываем в нем следующее
Если установлен pam_userdb
auth required /usr/local/lib/pam_pwdfile.so /usr/local/etc/vsftpd/etc/vsftpd_login.db account required /usr/local/lib/pam_userdb.so /usr/local/etc/vsftpd/etc/vsftpd_login.db
или если нет
auth required /usr/local/lib/pam_pwdfile.so pwdfile /etc/vsftpd_login.db account required /usr/lib/pam_permit.so
4. Создаем файл базы данных с логином и паролем для vsftpd для каждого юзера.
Тут тоже есть свой ньюанс.
В начале я натолкнулся на такую запись (где уже не вспомню):
# htpasswd -c -b /usr/local/etc/vsftpd/vsftpd_login.db username password213
Результатом будет подобная запись в файле vsftpd_login.db:
username:$apr1$OCFKjjUi$L8A4LG4t2TryPxRtGnLxa/
Скажу сразу, что htpasswd генерирует пароли не в том формате, что надо pam_pwdfile
Для генерации паролей лучше подойдет:
# openssl passwd -1 password213
Результат:
$1$5htlgrc7$FHf5uCbSol0oKKYN3upE0/
где password213 — ваш пароль
И вставляем его в файл /usr/local/etc/vsftpd/vsftpd_login.db по такому шаблону:
Имя_юзера:Пароль_юзера
Каждый юзер с новой строки. Запись будет выглядеть примерно так:
username:$1$5htlgrc7$FHf5uCbSol0oKKYN3upE0/
5. Устанавливаем права на файл.
# chmod 600 /usr/local/etc/vsftpd/vsftpd_login.db
6. Дальше надо добавить пользователя в систему от которого будут загружаться все файлы и папки по фтп. и установить ему /usr/sbin/nologin
# pw adduser vftpd_user -g www -d /nonexistent -s /usr/sbin/nologin -c "FTP user for user main"
Задаем ему пароль
# passwd vftpd_user
7. Задаем директорию юзера.
# pw usermod vftpd_user -d /usr/local/www/
И теперь конфигурируем файл vsftpd.conf
Свой файл конфига выложу чуть позже.
Примечание: *Виртуальные пользователи работают как анонимы, если не указать файле конфига vsftpd.conf такую строку:
virtual_use_local_privs=YES