пятница, 3 апреля 2009 г.

Настройка виртуальных пользователей VSFTPD (с индивидуальными домашними каталогми)

Настройка виртуальных пользователей VSFTPD (с индивидуальными домашними каталогами)


Перевод статьи: http://alien2thisworld.net/sitePages/tutorials/vsftpd_virtual_users_setup.html

(Эта инструкция описывает установку и настройку в системе Fedora Core 6, но подходит ко всем дистрибутивам)

ШАГ 1: Установка требуемых пакетов:

pam (установлен по-умолчанию)
db4 (у меня была версия db4 и этот пакет уже был по-умолчанию)
vsftpd
compat-db
(в этом пакете в fedora находится программа db42_load)

Проверим наличие установленного пакета 'db'
[root@mysystem vsftpd]# rpm -qa | grep -i db
Если пакет db4 не установлен, установим его:
[root@mysystem vsftpd]# yum install db4
Пакет compat-db содержит программу db42_load, необходимую для создания базы данных, содержащей логины/пароли виртуальных пользователей
[root@mysystem vsftpd]# yum install compat-db
[root@mysystem vsftpd]# yum install vsftpd
Не можете найти программу dbXX_load после установки? Ознакомьтесь со списком файлов, входящих в пакет
[root@mysystem vsftpd]# rpm -ql compat-db

ШАГ 2: Настройка PAM
Убедитесь в существовании файла /lib/security/pam_userdb.so
[root@mysystem vsftpd]# rpm -ql pam | grep pam_userdb.so
[root@mysystem vsftpd]# vi /etc/pam.d/vsftpd
(этот файл должен выглядеть следующим образом:)
#%PAM-1.0
session optional pam_keyinit.so force revoke
auth required /lib/security/pam_userdb.so db=/etc/vsftpd/vsftpd_users
account required /lib/security/pam_userdb.so db=/etc/vsftpd/vsftpd_users
#auth required pam_listfile.so item=user sense=deny file=/etc/vsftpd/ftpusers onerr=succeed
#auth required pam_shells.so
#auth include system-auth
#account include system-auth
#session include system-auth
#session required pam_loginuid.so

(обратите внимание: 6 последних строк закомментированы, чтобы pam_userdb действовал для пользователей FTP. С незакомментированными строчками аутентификация пользователей не удавалась)

ШАГ 3: Создаем системного пользователя для vsftpd (это обычный пользователь, без прямого доступа к FTP)
[root@mysystem vsftpd]# adduser -d /home/virtualftp/ virtualftp

ШАГ 4: Настройка vsftpd для работы с виртуальными пользователями
[root@mysystem vsftpd]# cd /etc/vsftpd
[root@mysystem vsftpd]# vi vsftpd.conf
(Итоговый vsftpd.conf:)
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_file=/var/log/vsftpd.log
xferlog_std_format=YES
chroot_local_user=YES
listen=YES
pam_service_name=vsftpd
userlist_enable=YES
tcp_wrappers=YES

# Виртуальные пользователи будут попадать в  /home/virtualftp/[username]/
user_sub_token=$USER
local_root=/home/virtualftp/$USER
guest_enable=YES
guest_username=virtualftp
# Umask для  виртуальных пользователей и анонимных
anon_umask=0022
# Разрешение на запись для виртуальных пользователей
anon_upload_enable=YES
# Разрешение создания каталогов для виртуальных пользователей
anon_mkdir_write_enable=YES
# Разрешение удаления файлов и каталогов для виртуальных пользователей
anon_other_write_enable=YES

Теперь запускаем vsftpd (который настроен на запуск в одиночном режиме):
[root@mysystem vsftpd]# vsftpd

ШАГ 5: Ввод логинов и паролей для виртуальных пользователей
[root@mysystem vsftpd]# vi /etc/vsftpd/vsftpd_users.txt

(Формат файла:)
пользователь1
парольпользователя1
пользователь2
парольпользователя2
пользователь3
парольпользователя3

Теперь создадим файл в формате DB4, содержащий логины и пароли из текстового файла vsftpd_users.txt:
[root@mysystem vsftpd]# rm /etc/vsftpd/vsftpd_users.db
[root@mysystem vsftpd]# db42_load -T -t hash -f /etc/vsftpd/vsftpd_users.txt /etc/vsftpd/vsftpd_users.db
[root@mysystem vsftpd]# chmod 600 /etc/vsftpd/vsftpd_users.db /etc/vsftpd/vsftpd_users.txt

ШАГ 6: Создаем каталоги для каждого виртуального пользователя
[root@mysystem vsftpd]# mkdir -p /home/virtualftp/username1

ШАГ 7: Проверяем вход виртуального пользователя на FTP
[root@mysystem vsftpd]# ftp localhost
Connected to localhost.
220 (vsFTPd 2.0.5)
530 Please login with USER and PASS.
530 Please login with USER and PASS.
KERBEROS_V4 rejected as an authentication type
Name (localhost:root): username1
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX
Using binary mode to transfer files.
ftp>

Возможные проблемы
Если возникают проблемы при входе виртуального пользователя на ftp, первым делом проверьте /var/log/secure !
[root@mysystem vsftpd]# tail -f /var/log/secure
Mar 2 15:07:04 mysystem vsftpd: pam_userdb(vsftpd:auth): user 'testing' granted access
Mar 2 15:07:04 mysystem vsftpd: pam_unix(vsftpd:auth): check pass; user unknown
Mar 2 15:07:04 mysystem vsftpd: pam_unix(vsftpd:auth): authentication failure; logname= uid=0 euid=0 tty=ftp ruser=testing rhost=mysystem.cluster 
Mar 2 15:07:04 mysystem vsftpd: pam_succeed_if(vsftpd:auth): error retrieving information about user testing
Mar 2 15:08:32 mysystem vsftpd: pam_userdb(vsftpd:auth): user 'testing' granted access
Mar 2 15:11:15 mysystem vsftpd: pam_userdb(vsftpd:auth): user 'user0123456789012345678901234' granted access
Mar 2 15:12:36 mysystem vsftpd: pam_userdb(vsftpd:auth): user 'user01234567890123456789012345' granted access
Mar 2 15:13:43 mysystem vsftpd: pam_userdb(vsftpd:auth): user 'user012345678901234567890123456' granted access
Mar 2 15:14:51 mysystem vsftpd: pam_userdb(vsftpd:auth): user 'user0123456789012345678901234567' granted access

Заметил, что файл vsftpd_users.db не правильно создается командой db42_load, если такой файл уже есть. Простым выходом из этого будет удаление файла vsftpd_users.db перед повторным созданием.
[root@mysystem vsftpd]# strings /etc/vsftpd/vsftpd_users.db
[root@mysystem vsftpd]# db42_load -T -t hash -f /etc/vsftpd/vsftpd_users.txt /etc/vsftpd/vsftpd_users.db

Комментариев нет:

Отправить комментарий