Linux: vsftpd и виртуальные пользователи

vsftpd-server-in-centos-6

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»

vsftpd

Решение скорее всего кроется в верной настройке или отключении 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  ]
Вы можете оставить комментарий ниже.