пятница, 8 июля 2011 г.

VSFTPD. Настройка аутентификации виртуальных пользователей


Этот способ организации доступа к vsftpd наиболее безопасен.

Установка ПО
# apt-get install vsftpd

Т.к. в процессе настройки потребуется создать базу данных Berkeley DB, установим набор инструментов, позволяющий это сделать:
# apt-get install db4.8-util



Создание базы данных виртуальных пользователей
# mkdir /etc/vsftpd && nano /etc/vsftpd/logins.txt

внесем логины и пароли в таком вот формате:
login1
passwd1
login2
passwd2

Таким образом мы подготовили текстовый файл для создания БД из двух пользователей login1 и login2 с паролями password1 и password2 соответственно. Теперь из этого файла можно создать базу данных Berkeley DB, в файле /etc/vsftpd/users.db:
# db4.8_load -T -t hash -f /etc/vsftpd/logins.txt /etc/vsftpd/users.db
# chmod 0600 /etc/vsftpd/users.db

Создадим скрипт для внесения пользователей:
# nano /etc/vsftpd/useradd.sh

со следующим содержанием:
#!/bin/sh
cp /etc/vsftpd/users.db /etc/vsftpd/users.db_bac
rm -f /etc/vsftpd/users.db
db4.8_load -T -t hash -f /etc/vsftpd/logins.txt /etc/vsftpd/users.db
chmod 0600 /etc/vsftpd/users.db
service vsftpd restart
# chmod +x /etc/vsftpd/useradd.sh

Создадим дополнительный каталог для настроек пользователей:
# mkdir /etc/vsftpd/users

Приводим файл /etc/vsftpd.conf
# nano /etc/vsftpd.conf

к следующему содержанию:
# Сервер не будет анонимным
anonymous_enable=NO

# Разрешение подключаться локальным и виртуальным пользователям
local_enable=YES

# Разрешаем пользователям записывать/изменять свою информацию на сервер.
# если нужно запретить запись данных - write_enable=NO
# Более тонкий тюнинг через "cmds_allowed=PASV,RETR,QUIT"
write_enable=YES

# Путь к домашним каталогам виртуальных пользователей
user_sub_token=$USER
local_root=/home/vsftpd/$USER

# Включение опции необходимо для предоставления возможности загружать на сервер 
# файлы виртуальным пользователям
anon_upload_enable=YES

# Включение этой опции, позволяет анонимным пользователям создавать новые 
# каталоги в соответствии с определенными для этого условиями. Для того чтобы 
# это работало опция write_enable должна быть включена, и анонимный пользователь 
# должен иметь права на запись в данном каталоге
anon_mkdir_write_enable=NO

# Если выбрано YES, анонимные пользователи могут выполнять операции записи 
# отличные от загрузки на сервер и создания каталогов, такие как удаление и 
# переименование. Это обычно не рекомендуется, но все таки такая возможность 
# присутствует для полноты.
anon_other_write_enable=NO

# Не даём вылазить за пределы своего домашнего каталога пользователям
chroot_local_user=YES

# Т.к. будем использовать виртуальных пользователей то нужно привести их к 
# пользователю сервера с минимальными правами
guest_enable=YES

# Имя "гостевой" учётной записи
guest_username=ftp

# Укажем папку для хранения дополнительных конфигов
user_config_dir=/etc/vsftpd/users/

# Виртуальные пользователи пользуются такими же привилегиями, что и локальные
virtual_use_local_privs=YES

# выставим нужные права
chmod_enable=YES

# Если включить, у всех анонимно закачанных файлов на сервер будут 
# изменены владельцы на пользователя в указанного в chown_username
chown_uploads=YES

# В этом параметре указывается имя пользователя, назначаемого хозяином анонимно 
# загруженных на сервер файлов. Эта опция уместна только при включенной опции 
# chown_uploads
chown_username=ftp

# Маска создание и чтение файлов
# "-rw-r--r--"
local_umask=0022
anon_umask=0007

# Маска файлов назначаемая при загрузке файлов на сервер. При желании возможно 
# изменить на 0777 если есть необходимость сделать исполняемыми загружаемые на 
# сервер файлы. Default: 0666
file_open_mode=0777

listen=YES

listen_port=21

pasv_min_port=30000

pasv_max_port=30999

# Включаем ведение лога операций.
xferlog_enable=YES

# Расширенные логи всех команд
log_ftp_protocol=YES

xferlog_std_format=YES

xferlog_file=/var/log/vsftpd.log

tcp_wrappers=YES

dirmessage_enable=YES

# Скрываем реальные ID пользователей от посторонних глаз
hide_ids=YES

# Имя службы PAM (должно совпадать с именем соответствующего файла в /etc/pam.d)
pam_service_name=vsftpd.virtual

# Активируем список пользователей которым запрещен вход по FTP (например, root)
userlist_enable=YES
userlist_file=/etc/ftpusers

# Запрещаем рекурсивный вызов "ls -R"
ls_recurse_enable=NO

ftpd_banner=%company name%

Создание службы PAM

Теперь, чтобы PAM мог корректно аутентифицировать виртуальных пользователей vsftpd, необходимо создать соответствующую службу. В каталоге /etc/pam.d создадим файл с именем, указанным в параметре pam_service_name файла /etc/vsftpd.conf
# nano /etc/pam.d/vsftpd.virtual

Добавим в файл следующее содержимое (обратите внимание на отсутствие расширения '.db' при указании имени файла БД!):
auth required pam_userdb.so db=/etc/vsftpd/users
account required pam_userdb.so db=/etc/vsftpd/users
session required pam_loginuid.so

Создание домашних каталогов виртуальных пользователей

Прежде чем виртуальные пользователи смогут подключиться к серверу, для них должны быть созданы соответствующие домашние каталоги, путь к которым определён значением параметра local_root конфигурационного файла /etc/vsftpd.conf. После этого, необходимо сменить владельца созданных каталогов на пользователя, чья учётная запись фигурирует в параметре guest_username конфигурационного файла vsftpd.
# mkdir /home/vsftpd
# mkdir -p /home/vsftpd/{login1,login2}
# chown -R ftp:nogroup /home/vsftpd/

Перезапуск сервера

Теперь, когда все настройки завершены, необходимо перезапустить vsftpd, чтобы изменения вступили в силу
# service vsftpd restart


Настройки для отдельных пользователей, пример:

пользователю test1 дадим полные права на каталог /home/vsftpd/test1
# mkdir -p /home/vsftpd/test1
# nano /etc/vsftpd/users/login1
local_root=/home/vsftpd/test1
anon_upload_enable=YES # разрешим аплоад
anon_mkdir_write_enable=YES # разрешим создание и удаление каталогов в своем каталоге
anon_other_write_enable=YES # разрешим удаление файлов
chroot_local_user=YES # Не даём вылазить за пределы своего домашнего каталога

примечание:

Если эти

anon_upload_enable=NO
anon_mkdir_write_enable=NO
anon_other_write_enable=NO

параметры будут в таком виде - пользователь сможет ходить по указанной ему папке, но ничего кроме как скачать делать не сможет.

Заведение нового ftp юзера %user_name%:
# mkdir -p /home/vsftpd/user_name
# chown -R ftp:nogroup /home/vsftpd/
# cat >> /etc/vsftpd/logins.txt
Enter
user_name
Enter
Ctrl + D
# pwgen 10 -ncys1 | cat >> /etc/vsftpd/logins.txt
# /etc/vsftpd/useradd.sh

Удаление ftp юзера %user_name%:
удалить строку с %user_name% и следующую под ней
# nano /etc/vsftpd/logins.txt
# /etc/vsftpd/useradd.sh
если в содержимом нет необходимости, то удалить /home/vsftpd/user_name
# rm -r /home/vsftpd/user_name

Просмотр БД
db4.8_dump -p users.db | less

примеры: cd /usr/share/doc/vsftpd/examples/VIRTUAL_USERS
man: http://www.opennet.ru/base/net/vsftpd_overview.txt.html

3 комментария:

  1. Здравствуйте
    Как изменить пароль уже существующему пользователю?

    ОтветитьУдалить
  2. 1. меняем пароль под нужным %user_name%
    # nano /etc/vsftpd/logins.txt

    2. запускаем скрипт для внесения пользователей
    # /etc/vsftpd/useradd.sh

    ОтветитьУдалить
  3. вижу что что статья 2011 года, но мало- ли ...

    статья - то что мне нужно . Сделал всё по инструкции вроде работает . но мне очень нужно сделать пользователя у которого корневой папкой будет та в которой находятся папки всех остальных пользователей и у него будет полный доступ ко всем этим папкам (как минимум копирование удаление ) может кто-нибудь подскажет как это сделать ?

    ОтветитьУдалить