vsftpd — это наилучший выбор для большинства пользователей, которым нужно установить безопасный, стабильный, компактный и полностью готовый FTP сервер.
Разработчиком сервера является Chris Evans — профессиональный исследователь в области информационной безопасности, обнаруживший достаточное количество уязвимостей. Распространяется под лицензией GNU GPL.
- Установка vsftpd
Установка для дистрибутивов CentOS достаточно проста и понятна (выполняется от root’а):
Моя система:
[root@sigma mnt]# cat /etc/issue CentOS release 6.4 (Final) Kernel \r on an \m
Устанавливаем vsftpd:
# yum install vsftpd
Сразу поставим дополнительные пакеты, чтобы VsFTPd могла проводить авторизацию не от системных пользователей.
Устанавливаем Berkeley DB и utils
# yum install bd4-utils db4 =================================================================================================== Package Arch Version Repository Size =================================================================================================== Updating: db4 i686 4.7.25-17.el6 base 580 k Updating for dependencies: db4-utils i686 4.7.25-17.el6 base 129 k Transaction Summary =================================================================================================== Upgrade 2 Package(s)
Создаем файл где будем хранить пароли пользователей
У меня получилось так cat /etc/vsftpd/logins.txt test pass test1 pass1
Пробуем переконверировать в базу Беркли наши логины и пароли
# db_load -T -t hash -f /etc/vsftpd/users.txt /etc/vsftpd/users.db
Если команда прошла успешна, то создаем скрипт, для автоматической конвертации:
# vi /etc/vsftpd/useradd.sh
С содержанием:
#! /bin/sh rm -f /etc/vsftpd/vsftpd_login.db db_load -T -t hash -f /etc/vsftpd/logins.txt /etc/vsftpd/vsftpd_login.db service vsftpd restart
Создаем каталог mkdir /etc/vsftpd/users, куда помещаем два файла с ранее созданными пользователями «test» и «test1»
# cat /etc/vsftpd/users/test local_root=/home/vhosts/test/ #anon_upload_enable=YES #anon_mkdir_write_enable=YES #anon_other_write_enable=YES #chroot_local_user=NO write_enable=YES chmod_enable=YES #chown_uploads=YES
Создаем или редактируем /etc/vsftpd/vsftpd.conf
# Отключаем анонимных пользователей anonymous_enable=NO # Разрешаем работу локальным юпользователям local_enable=YES write_enable=YES download_enable=YES #папка по умолчанию local_root=/home/vhosts anon_root=/home/vhosts #Делаем chroot для всех локальных пользователей chroot_local_user=YES # список пользователей, которым нельзя на FTP userlist_enable=YES userlist_file=/etc/vsftpd/ftpusers # guest_enable=YES guest_username=ftp # папка для хранения дополнительных конфигов user_config_dir=/etc/vsftpd/users/ virtual_use_local_privs=yes # выставим нужные права chmod_enable=YES nopriv_user=ftp # маска создание и чтение файлов local_umask=022 anon_umask=022 file_open_mode=0777 listen=YES listen_port=21 max_clients=100 max_per_ip=100 max_login_fails=2 pasv_min_port=64000 pasv_max_port=65535 data_connection_timeout=400 idle_session_timeout=400 setproctitle_enable=YES tcp_wrappers=YES force_dot_files=YES ls_recurse_enable=NO pam_service_name=vsftpd.virtual xferlog_enable=YES xferlog_std_format=YES dual_log_enable=YES xferlog_file=/var/log/xferlog vsftpd_log_file=/var/log/vsftpd.log log_ftp_protocol=YES use_localtime=YES ftpd_banner=Wellcome!!!
Создаем файл /etc/pam.d/vsftpd.virtual для авторизации наших виртуальных пользователей:
#%PAM-1.0 #auth required /lib64/security/pam_userdb.so db=/etc/vsftpd/vsftpd_login #account required /lib64/security/pam_userdb.so db=/etc/vsftpd/vsftpd_login auth required pam_userdb.so db=/etc/vsftpd/vsftpd_login account required pam_userdb.so db=/etc/vsftpd/vsftpd_login #auth required pam_userdb.so db=/etc/vsftpd/users #account required pam_userdb.so db=/etc/vsftpd/users #session required pam_loginuid.so
Запускаем наш скрипт, если мы все сделали правильно, демон должен успешно стартовать:
[root@sigma vsftpd]# ./useradd.sh Shutting down vsftpd: [ OK ] Starting vsftpd for vsftpd: [ OK ]
Добавим запуск сервера при старте системы:
chkconfig vsftpd on
При необходимости добавляем правила в iptables
Согласно прописанным портам в vsftpd.conf: опции «pasv_min_port=64000 и pasv_max_port=65535»
-A INPUT -p tcp -m tcp -s host/32 --dport 64000:65535 -j ACCEPT -A INPUT -p tcp -m tcp -s host/32 --dport 21 -j ACCEPT -A INPUT -p tcp -m tcp -s host/32 --dport 20 -j ACCEPT -A INPUT -p tcp -m tcp --dport 21 -j DROP -A INPUT -p tcp -m tcp --dport 20 -j DROP
Есть большой шанс, что в дефолтной конфигурации CentOS при попытке подключения мы получим ошибку: «500 OOPS: cannot change directory»
Решение скорее всего кроется в верной настройке или отключении SELinux.
Проверим включен ли Selinux:
[root@sigma users]# ls -Z -rw-r--r--. root root unconfined_u:object_r:etc_t:s0 test
Как видим включен, попробуем произвести необходимые настройки:
[root@sigma users]# getsebool -a | grep ftp allow_ftpd_anon_write --> off allow_ftpd_full_access --> off allow_ftpd_use_cifs --> off allow_ftpd_use_nfs --> off ftp_home_dir --> off ftpd_connect_db --> off ftpd_use_passive_mode --> off httpd_enable_ftp_server --> off tftp_anon_write --> off [root@sigma users]# setsebool -P ftp_home_dir on [root@sigma users]# getsebool -a | grep ftp allow_ftpd_anon_write --> off allow_ftpd_full_access --> off allow_ftpd_use_cifs --> off allow_ftpd_use_nfs --> off ftp_home_dir --> on ftpd_connect_db --> off ftpd_use_passive_mode --> off httpd_enable_ftp_server --> off tftp_anon_write --> off [root@sigma users]# setsebool -P allow_ftpd_full_access on [root@sigma users]# getsebool -a | grep ftp allow_ftpd_anon_write --> off allow_ftpd_full_access --> on allow_ftpd_use_cifs --> off allow_ftpd_use_nfs --> off ftp_home_dir --> on ftpd_connect_db --> off ftpd_use_passive_mode --> off httpd_enable_ftp_server --> off tftp_anon_write --> off [root@sigma users]# service vsftpd restart Shutting down vsftpd: [ OK ] Starting vsftpd for vsftpd: [ OK ]