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






В «стандартном» варианте vsftpd настроен таким образом, что поддерживает аутентификацию только локальных в пределах системы пользователей и/или анонимных. Принимая во внимание то, что в качестве механизма аутентификации в vsftpd используется PAM, мы вольны настраивать схему аутентификации как нам будет угодно. Этим сегодня и займёмся. В этой статье я расскажу о том, как в vsftpd можно настроить аутентификацию виртуальных пользователей, т. е. пользователей, учётные записи которых отсутствуют в системных /etc/passwd и /etc/shadow. Данный способ организации доступа к vsftpd естественно более безопасен, поскольку виртуальные пользователи не имеют прав доступа, которые есть у локальных учётных записей. При написании статьи использовались Debian 5 Lenny, Berkeley DB 4.6 и Linux PAM 2.6.26.


Установка необходимого ПО

Поскольку в процессе настройки понадобится создать базу данных Berkeley DB, необходимо установить набор инструментов, который позволит нам это сделать:

Всё остальное уже должно присутствовать в вашей системе по умолчанию.

Создание базы данных виртуальных пользователей

Для того, чтобы создать Berkeley DB базу данных виртуальных пользователей, сперва необходимо подготовить список пользователей и паролей в текстовом файле. Формат файла очень прост. Каждая запись базы данных состоит из пары «ключ, значение», где ключом является имя учётной записи виртуального пользователя, а значением — его пароль. Каждая пара разбита на две строки: первая строка — ключ (имя пользователя), вторая — значение (пароль пользователя). Для примера создадим следующий файл в /home/ashep/tmp/vsftpdusers:

Таким образом мы подготовили текстовый файл для создания БД из двух пользователей user1 и user2 с паролями password1 и password2 соответственно. Теперь из созданного файла можно создать базу данных Berkeley DB, например, в файле /etc/vsftpd/users.db:

Настройка vsftpd

Для того, чтобы ваш vsftpd смог поддерживать виртуальных пользователей, в файле конфигурации /etc/vsftpd.conf необходимо сделать следующие изменения:

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

Теперь, чтобы PAM мог корректно аутентифицировать виртуальных пользователей vsftpd, необходимо создать соответствующую службу. В каталоге /etc/pam.d создайте файл с именем, указанным вами в параметре pam_service_name файла /etc/vsftpd.conf. В моём примере файл PAM-службы будет располагаться /etc/pam.d/vsftpd.virtual. Добавьте в файл следующее содержимое (обратите внимание на отсутствие расширения '.db' при указании имени файла БД!):

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

Прежде чем виртуальные пользователи смогут подключиться к серверу, для них должны быть созданы соответствующие домашние каталоги, путь к которым определён значением параметра local_root конфигурационного файла vsftpd. После этого, необходимо сменить владельца созданных каталогов на пользователя, чья учётная запись фигурирует в параметре guest_username конфигурационного файла vsftpd.

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

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

Проверка подключения

Ну, здесь уже всё просто:

По материалам cyberciti.biz




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

  1. Total CMD:

    530 login incorrect

    /var/log/vsftpd.log:

    Sun Apr 10 13:00:40 2011 [pid 1] [user1] FAIL LOGIN: Client «192.168.56.1»

    Sun Apr 10 13:00:49 2011 [pid 2] CONNECT: Client «192.168.56.1»

  2. Добрый день. Включил дебаг.

    vsftpd: pam_unix (vsftpd:auth): check pass; user unknown

    vsftpd: pam_unix (vsftpd:auth): authentication failure; logname= uid=0 euid=0 tty=ftp ruser=user1 rhost=192.168.56.1

  3. Opr, вы не тот вывод показываете. Вместо 'pam_unix' должно быть 'pam_userdb'. Судя по всему, вы не изменили значение параметра pam_service_name в вашем vsftpd.conf.

  4. ashep, добрый день

    /etc/vsftpd.conf

    pam_service_name=vsftpd.virtual

    /etc/pam.d/vsftpd.virtual

    auth required /lib/security pam_userdb.so debug db=/etc/vsftpd/users

    account required /lib/security/pam_userdb.so debug db=/etc/vsftpd/users

    session required /lib/security/pam_loginuid.so

    PAM не пускает?

    cat /var/log/auth.log | grep pam_userdb

    Ничего нет

  5. auth required /lib/security pam_userdb.so debug db=/etc/vsftpd/users

    Слеш после security пропущен. Это у вас так в конфигурации или опечатка в комментарии?

  6. хм, хм... Судя по тому, что в логе у вас фигурирует pam_unix и по корректному содержимому конфига, остаётся только то, что вы могли не перезапустить vsftpd... Больше мыслей нет. Почему-то используется не тот PAM-модуль, только вот почему...

  7. Правильно, кривые руки)

    Победил свою невнимательность.

    В vsftpd.conf по-умолчанию расскоментирован и используется модуль PAM vsftpd.

  8. Здравствуйте, очень хорошая статья, все получилось, с учетом того что я дела это на CentOS.)) Вопрос такой, после установки виртуальных пользователей, локальные пользователи не могут подключаться,пишет логин пароль не правильные, нормально ли это?

  9. Извините, ответ нашел. Проблема была в PAM.

    Я руководствовался вашими настройками и вот такой у меня PAM:

    # Virtual Users

    auth sufficient pam_userdb.so db=/etc/vsftpd/users

    account sufficient pam_userdb.so db=/etc/vsftpd/users

    # Local Users

    auth required pam_listfile.so item=user sense=deny file=/etc/vsftpd.ftpusers onerr=succeed

    auth required pam_stack.so service=system-auth

    auth required pam_shells.so

    account required pam_stack.so service=system-auth

    session required pam_stack.so service=system-auth

    И еще открыл для себя параметр user_config_dir , крутая штука.

    Еще раз спасибо, за эту и за предыдущие статьи все очень понятно и самое главное — работает! Спасибо.

  10. Можно ли сделать так, чтобы для одного пользователя была папка /home/vsftpd2/$USER, а для других пользователей или для одного пользователя была папка, например /var/www/ ?

    1. Роман, в /etc/passwd установите каждому пользователю домашний каталог, который требуется.

  11. А можно задать одному пользователю несколько каталогов (список каталогов в которые он может ходить)?

    Допустим, нужно сделать так, что бы «администраторам» были видны все каталоги пользователей, а пользователям только их домашние каталоги, при этом администраторы имеют право только на чтение этих каталогов. Как это можно сделать?

    Статья очень хорошая, я уже хотел сносить vsftpd потому что не мог его настроить, а здесь нашёл случайно описание настройки )

    Заранее спасибо.

  12. Все сделал как тут написано (немного изменил сам conf файл, но не критично)

    В результате

    Ответ: 230 Login successful.

    Команда: OPTS UTF8 ON

    Ответ: 200 Always in UTF8 mode.

    Статус: Соединение установлено

    Статус: Начинаю закачивать D:\1.JPG

    Команда: CWD /

    Ответ: 250 Directory successfully changed.

    Команда: PWD

    Ответ: 257 «/»

    Команда: TYPE I

    Ответ: 200 Switching to Binary mode.

    Команда: PORT 172,20,139,222,18,20

    Ответ: 200 PORT command successful. Consider using PASV.

    Команда: STOR 1.JPG

    Ответ: 550 Permission denied.

    Ошибка: Критическая ошибка при передаче файлов

    ls -alF /home

    dr-xr-xr-x 2 ftp ftp 4096 Ноя 15 15:40 ftp/

    То же самое от пользователя в базе pam

    SELinux нет

    sestatus

    -bash: sestatus: команда не найдена

  13. ashep

    Ваша правда, данная ситуация произошла из за того что не был указан пользователь. То есть входил анонимно, а так как я туда вписал

    guest_enable=YES

    guest_username=ftp

    А так как всем анонимусам присваивался логин ftp вот он ошибку и выдавал =(

    Буду дальше думать как анонимам дать возможность читать.

    Да еще, можете добавите, в debian по умолчанию нет db_load он появляется если вписать альтернативне репы.

  14. Для дебиан, PAM

    auth required /lib/security/pam_userdb.so db=/etc/vsftpd/users

    account required /lib/security/pam_userdb.so db=/etc/vsftpd/users

Комментарии запрещены.