Анонимный доступ
Понадобилось мне заливать разные файлы на свой коммуникатор, а каждый раз подключать шнур (который еще надо найти :) ) и копировать файлы было лень. В телефоне есть wifi-модуль, который сводит все лишние телодвижения к минимуму: включил wifi, зашел на ftp, скопировал что надо, выключил wifi. Пока включен wifi можно почитать почту, обновить данные для разных установленных виджетов. В общем, было решено установить и настроить один из существующих ftp-серверов.
На слуху чаще всего крутятся два кандидата: vsftpd и proftpd. Еще варианты серверов и их короткое сравнение есть тут.
На форумах и блогах можно встретить разные высказывания адептов этих двух популярных серверов, кто-то хватит один, кто-то другой. Для моих целей подойдет тот, что проще и быстрее поднять. Я решилено остановится на vsftpd, разработчики утверждают что он быстрый и безопасный FTP-сервер + wikipedia говорит, что vsftpd обслуживает официальные репозитории ftp.debian.org, ftp.redhat.com, ftp.openbsd.org, ftp.freebsd.org.
Заявленные возможности vsftpd
Установка vsftpd
sudo apt-get install vsftpd
Настройка vsftpd
Я настроил vsftpd для работы с анонимными пользователями, для этого в файл /etc/vsftpd.conf вносим следующие данные:
listen=YES anonymous_enable=YES dirmessage_enable=YES use_localtime=YES xferlog_enable=YES connect_from_port_20=YES secure_chroot_dir=/var/run/vsftpd/empty pam_service_name=vsftpd rsa_cert_file=/etc/ssl/private/vsftpd.pem anon_root=/home/proft/ftp setproctitle_enable=YES
Растартим сервер
sudo /etc/init.d/vsftpd restart
Для настройки работы vsftpd не с анонимными пользователями читаем пост от Игорь Кузьменко.
Мониторинг vsftpd
Для простого мониторинга роботы vsftpd добавляем в файл /etc/vsftpd.conf следующие строчки и рестартим сервер
setproctitle_enable=YES session_support=YES
Первая строчка позволит отслеживать сессии с помощью команды
watch -n 1 'ps ax | grep vsftpd | grep -v grep'
Вторая строчка позволит отслеживать сессии с помощью команды last
last | head -n 2
Доступ виртуальных пользователей с авторизацией через MySQL
Настроим vsftpd для работы с аккаунтами пользователей, которые хранятся в БД MySQL. Для работы связки vsftpd + MySQL необходим пакет libpam-mysql для PAM аутентификацию в БД MySQL.
sudo apt-get install vsftpd libpam-mysql mysql-server mysql-client
Сделаем первоначальную настройку mysql
mysql_secure_installation
Создадим базу для виртуальных пользователей
#mysql -uroot -p CREATE DATABASE vsftpd COLLATE utf8_general_ci; USE vsftpd;
Создадим mysql-пользователя для работы с созданной базой и назначем ему права
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP ON vsftpd.* TO 'vsftpd'@'localhost' IDENTIFIED BY '_password_'; FLUSH PRIVILEGES;
Создадим таблицу для хранения аккаунтов
CREATE TABLE accounts (id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, username VARCHAR(30) NOT NULL, pass VARCHAR(50) NOT NULL, UNIQUE (username)) ENGINE = MYISAM;
Создадим пользователя vsftpd с домашней директорией /home/vsftpd, в которой будут храниться директории виртуальных пользователей. Эти директории можно переназначить индивидуально для каждого пользователя, см. описание ниже.
useradd -d /home/vsftpd -g nogroup -s /bin/false -m vsftpd
Приступим к настройке vsftpd. Сохраним старую версию настроечного файла.
sudo mv /etc/vsftpd.conf{,_bak}
Создадим файл /etc/vsftpd.conf и добавим в него
# sudo vim /etc/vsftpd.conf listen=YES anonymous_enable=NO local_enable=YES write_enable=YES local_umask=022 xferlog_enable=YES vsftpd_log_file=/var/log/vsftpd.log connect_from_port_20=YES nopriv_user=vsftpd chroot_local_user=YES secure_chroot_dir=/var/run/vsftpd pam_service_name=vsftpd guest_enable=YES guest_username=vsftpd local_root=/home/vsftp/$USER user_sub_token=$USER virtual_use_local_privs=YES user_config_dir=/etc/vsftpd_user_conf ftpd_banner=Welcome to proft ftp server. idle_session_timeout=600 delay_failed_login=2 max_clients=5
Описание настроек есть тут.
Опция user_config_dir отвечает за путь к директории, в которой хранятся настройки для каждого пользователя индивидуально. Например, создадим текстовый файл /etc/vsftpd_user_conf/user1 и изменим путь, в который попадает пользователь после удачного логина.
# sudo vim /etc/vsftpd_user_conf/user1 local_root=/var/ftp/site
Насроем доступ для vsftpd к созданой выше mysql базе с аккаунтами пользователей. Для этого нужно натсроить PAM для vsftpd.
Сохраним старую версию настроечного файла
sudo mv /etc/pam.d/vsftpd{,_bak}
Добавим новые настройки
# sudo vim /etc/pam.d/vsftpd auth required pam_mysql.so user=vsftpd passwd=_password_ host=localhost db=vsftpd table=accounts usercolumn=username passwdcolumn=pass crypt=2 account required pam_mysql.so user=vsftpd passwd=_password_ host=localhost db=vsftpd table=accounts usercolumn=username passwdcolumn=pass crypt=2
Перезапустим vsftpd сервер
sudo service vsftpd restart
Создадим аккаунт для пользователя user1
INSERT INTO accounts (username, pass) VALUES('user1', PASSWORD('_password_'));
Если домашняя директория для user1 не создалась автоматически, то создадим вручную
mkdir /home/vsftpd/user1 chown vsftpd:nogroup /home/vsftpd/user1
Проверим работу ftp-сервера
ftp localhost 21
Дополнительное чтиво
Статьи с описанием настройки proftpd
Дополнительный материал: