Статья рассказывает о том, как установить vsftpd в операционной системе CentOS 7 с включенной системой контроля доступа SELinux и настроить аутентификацию посредством виртуальных пользователей

В приводимых далее шагах на все создаваемые папки и файлы по умолчанию устанавливаются права "755", а в качестве их владельцев назначаются пользователь и группа "root"


  • устанавливаем пакет vsftpd
  • yum install vsftpd
  • устанавливаем пакет libdb (Berkeley DB), который будет использоваться для создания базы данных с учетными данными пользователей FTP
  • yum install libdb
  • устанавливаем пакет с утилитами для работы с SELinux
  • yum install policycoreutils-python
  • в папке /etc/vsftpd удаляем все файлы, кроме vsftpd.conf
  • заменяем содержимое файла /etc/vsftpd/vsftpd.conf следующим
  • # включаем прослушивание входящих подключений на IPv4-интерфейсе
    listen=YES
    # включаем создание подключений для передачи данных через порт 20
    connect_from_port_20=YES
    # указываем имя PAM-сервиса для проверки подлинности
    pam_service_name=vsftpd
    # указываем учетную запись, которую vsftpd может использовать в качестве непривилегированной
    nopriv_user=vsftpd
    # запрещаем анонимные подключения
    anonymous_enable=NO
    # разрешаем использование локальных и виртуальных пользователей
    local_enable=YES
    # включаем использование виртуальными пользователями прав локальных пользователей, а не анонимных
    virtual_use_local_privs=YES
    # включаем параметр, благодаря которому все неанонимные подключения будут считаться "гостевыми"
    guest_enable=YES
    # указываем имя пользователя, от имени которого будут выполняться все "гостевые" подключения
    guest_username=vsftpd
    # включаем использования chroot для виртуальных пользователей
    chroot_local_user=YES
    # задаем имя папки, которая будет использоваться для окружения chroot
    secure_chroot_dir=/var/vsftpd/chroot
    # задаем переменную с именем виртуального пользователя
    user_sub_token=$USER
    # указываем корневую папку виртуального пользователя
    local_root=/var/vsftpd/users/$USER
    # включаем параметр, благодаря которому в FTP-клиентах вместо имен пользователей и групп будет отображаться значение "ftp"
    hide_ids=YES
    # разрешаем любые FTP-команды для записи данных
    write_enable=YES
    # включаем журналирование скачиваний и загрузок
    xferlog_enable=YES
  • создаем файл /etc/vsftpd/credentials.txt с учетными данными пользователей FTP
  • user1
    password1
  • Замечание: файл должен заканчиваться пустой строкой
  • создаем файл базы данных /etc/vsftpd/credentials.db с учетными данными пользователей FTP
  • db_load -T -t hash -f /etc/vsftpd/credentials.txt /etc/vsftpd/credentials.db
  • Замечание: просмотреть содержимое файла базы данных можно командой db_dump -p /etc/vsftpd/credentials.db
  • настраиваем права доступа к файлам в папке /etc/vsftpd
  • chmod -R 400 /etc/vsftpd/*
  • заменяем содержимое файла /etc/pam.d/vsftpd следующим
  • #%PAM-1.0
    auth required pam_userdb.so db=/etc/vsftpd/credentials
    account required pam_userdb.so db=/etc/vsftpd/credentials
    session required pam_loginuid.so
  • создаем пользователя и группу vsftpd
  • useradd -s /sbin/nologin vsftpd
    passwd vsftpd
  • создаем папку для хранения данных пользователей "/var/vsftpd/users", а также папку для окружения chroot "/var/vsftpd/chroot"
  • mkdir /var/vsftpd /var/vsftpd/users /var/vsftpd/chroot
  • создаем папку /var/vsftpd/users/user1, которая будет использоваться как корневая папка в chroot для пользователя user1, а также папку /var/vsftpd/users/user1/data, в которой будут храниться данные пользователя user1
  • mkdir /var/vsftpd/users/user1 /var/vsftpd/users/user1/data
  • Замечание: папка /var/vsftpd/users/user1/data необходима потому, что пользователь vsftpd не должен иметь права записи на корневую папку chroot пользователя user1, т.е. на папку /var/vsftpd/users/user1
  • настраиваем владельца папки /var/vsftpd/users/user1/data и права доступа к ней
  • chown vsftpd:vsftpd /var/vsftpd/users/user1/data
    chmod 700 /var/vsftpd/users/user1/data
  • определяем текущий контекст SELinux содержимого папки /var/vsftpd/users
  • ls -ldZ /var/vsftpd/users
  • добавляем в политику SELinux информацию о новом контексте содержимого папки /var/vsftpd/users
  • semanage fcontext -a -t public_content_rw_t "/var/vsftpd/users(/.*)?"
  • устанавливаем контекст содержимого папки /var/vsftpd/users
  • restorecon -F -R -v /var/vsftpd/users
  • включаем переключатель SELinux с именем "ftpd_anon_write"
  • setsebool -P ftpd_anon_write on
  • Замечание: просмотреть состояние переключателей SELinux, имеющих отношение к FTP, можно командой getsebool -a | grep ftp
  • включаем автоматический запуск vsftpd при старте системы
  • systemctl enable vsftpd
  • запускаем vsftpd
  • service vsftpd start
Замечание: можно настроить подключение к папкам с данными пользователей соответствующих SMB-ресурсов (как это сделать, рассказывается здесь); при этом также нужно будет включить переключатель SELinux с именем "ftpd_use_cifs"

Добавить комментарий