Установка и настройка FTP-сервера VSFTPd на Centos 7. Локальные пользователи

Установка FTP-сервера

Устанавливаем софт:

[root@localhost]# yum install vsftpd nano net-tools -y

Создаем директорию, где будут каталоги пользователей и выставляем права доступа

[root@localhost]# mkdir /home/vsftpd
[root@localhost]# chmod 0777 /home/vsftpd

Cохраняем дефолтный конфиг

[root@localhost]# mv /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf_backup

Пишем свой конфиг

[root@localhost]# nano /etc/vsftpd/vsftpd.conf
# Запуск сервера в режиме службы
listen=YES

# Работа в фоновом режиме
background=YES

# Имя pam сервиса для vsftpd
pam_service_name=vsftpd

# Входящие соединения контроллируются через tcp_wrappers
tcp_wrappers=YES

# Запрещает подключение анонимных пользователей
anonymous_enable=NO

# Каталог, куда будут попадать анонимные пользователи, если они разрешены
#anon_root=/ftp

# Разрешает вход для локальных пользователей
local_enable=YES

# Разрешены команды на запись и изменение
write_enable=YES

# Указывает исходящим с сервера соединениям использовать 20-й порт
connect_from_port_20=YES

# Логирование всех действий на сервере
xferlog_enable=YES

# Путь к лог-файлу
xferlog_file=/var/log/vsftpd.log

# Включение специальных ftp команд, некоторые клиенты без этого могут зависать
async_abor_enable=YES

# Локальные пользователи по-умолчанию не могут выходить за пределы своего домашнего каталога
chroot_local_user=YES

# Разрешить список пользователей, которые могут выходить за пределы домашнего каталога
chroot_list_enable=YES

# Список пользователей, которым разрешен выход из домашнего каталога
chroot_list_file=/etc/vsftpd/chroot_list

# Разрешить запись в корень chroot каталога пользователя
allow_writeable_chroot=YES

# Контроль доступа к серверу через отдельный список пользователей
userlist_enable=YES

# Файл со списками разрешенных к подключению пользователей
userlist_file=/etc/vsftpd/user_list

# Пользователь будет отклонен, если его нет в user_list
userlist_deny=NO

# Директория с настройками пользователей
user_config_dir=/etc/vsftpd/users

# Показывать файлы, начинающиеся с точки
force_dot_files=YES

# Маска прав доступа к создаваемым файлам
local_umask=022

# Порты для пассивного режима работы
pasv_min_port=49000
pasv_max_port=55000

Добавляем пользователя

[root@localhost]# useradd -s /sbin/nologin ftpuser
[root@localhost]# passwd ftpuser
fptpassword

Создаем папку, где будут отдельные конфиги пользователей

[root@localhost]# mkdir /etc/vsftpd/users
[root@localhost]# touch /etc/vsftpd/users/ftpuser

Задаем в конфиге домашний ftp-каталог

[root@localhost]# echo 'local_root=/home/vsftpd/ftpuser/' >> /etc/vsftpd/users/ftpuser

Cоздаем каталог пользователя и задаем владельца

[root@localhost]# mkdir /home/vsftpd/ftpuser
[root@localhost]# chown ftpuser:ftpuser /home/vsftpd/ftpuser

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

[root@localhost]# touch /etc/vsftpd/chroot_list
[root@localhost]# echo 'root' >> /etc/vsftpd/chroot_list

Создаем файл, в котором будет перечислен список пользователей,  которым разрешено подключаться к FTP-серверу. Добавляем в него пользователей root и ftpuser

[root@localhost]# touch /etc/vsftpd/user_list
[root@localhost]# echo 'root' >> /etc/vsftpd/user_list && echo 'ftpuser' >> /etc/vsftpd/user_list

Создаем файл, куда будут писаться логи, и выставляем на него права

[root@localhost]# touch /var/log/vsftpd.log && chmod 600 /var/log/vsftpd.log

Добавляем сервис vsftpd в автозагрузку, запускаем его, проверяем статус

[root@localhost]# systemctl enable vsftpd
[root@localhost]# systemctl start vsftpd
[root@localhost]# systemctl status vsftpd

Смотрим, появился ли процесс

[root@localhost]# netstat -tulnp | grep vsftpd
	tcp 0 0 0.0.0.0:21 0.0.0.0:* LISTEN 13195/vsftpd

Добавляем правила в firewall: открываем порты 21, 49000-55000

[root@localhost]# firewall-cmd --permanent --add-port=21/tcp
[root@localhost]# firewall-cmd --permanent --add-port=49000-55000/tcp
[root@localhost]# firewall-cmd --reload

Отключаем Selinux, перезагружаемся

[root@localhost]# setenforce 0
[root@localhost]# nano /etc/selinux/config
	SELINUX=disabled
[root@localhost]# reboot

Инструкция по добавлению новых пользователей

Добавляем пользователя в систему

[root@localhost]# useradd -s /sbin/nologin testuser
[root@localhost]# passwd testuser
testpassword

Создаем каталог пользователя и задаем владельца

[root@localhost]# mkdir /home/vsftpd/testuser
[root@localhost]# chown test:test /home/vsftpd/testuser

Создаем папку, где будут отдельные конфиги пользователей

[root@localhost]# touch /etc/vsftpd/users/testuser

Задаем в конфиге домашний фтп-каталог

[root@localhost]# echo 'local_root=/home/vsftpd/testuser/' >> /etc/vsftpd/users/testuser

Задаем разрешенных пользователей

[root@localhost]# echo 'testuser' >> /etc/vsftpd/user_list

Перезапускаем vsftpd

[root@localhost]# systemctl restart vsftpd

UPD 27.11.2018
Bash-скрипт добавления пользователей

Создаем bash-скрипт add_ftp_user.sh

[root@localhost]# nano /home/add_ftp_user.sh 
#!/bin/bash

NAME=$1
PASS=$2

echo "USAGE: add_ftp_user.sh [username] [password]"

# проверка входных параметров
if [ -z "$NAME" ]; then
    echo "Error: username is not set"
    exit
fi

if [ -z "$PASS" ]; then
    echo "Error: password not set"
    exit
fi

# создаем системных пользователей
echo "Creating user: $NAME"
echo "With password: $PASS"

useradd -s /sbin/nologin -p `openssl passwd -1 $PASS` $NAME

# сохраняем данные в файл /etc/vsftpd/new_ftp_users_list
echo "user: $NAME, pass: $PASS" >> /etc/vsftpd/new_ftp_users_list

# создаем ftp-директорию пользователя
mkdir /home/vsftpd/$NAME

# назначаем владельца
chown $NAME:$NAME /home/vsftpd/$NAME

# создаем пустой конфигурационный файл
touch /etc/vsftpd/users/$NAME

# прописываем домашний каталог
echo "local_root=/home/vsftpd/$NAME/" >> /etc/vsftpd/users/$NAME

# добавляем пользователя в список разрешенных для подключения
echo "$NAME" >> /etc/vsftpd/user_list

# задаем права каталога пользователя
chmod 0777 /home/vsftpd/$NAME

# перезапускаем службу vsftp
systemctl restart vsftpd

Делаем его исполняемым

[root@localhost]# chmod +x /home/add_ftp_user.sh 

теперь, что бы добавить нового FTP-пользователя надо выполнить команду

[root@localhost]# сd /home
[root@localhost]# ./add_ftp_user.sh %user% %pass%

где
%user% — логин
 %pass% — пароль

UPD 03.09.2019 — не работает авторизация, ошибка 530

Не работает авторизация в vsftpd:

530 Login incorrect

Решение:
Данная ошибка получается из-за того, что в файле /etc/pam.d/vsftpd
присутствует строчка:

[root@localhost]# egrep -v "^#|^$" /etc/pam.d/vsftpd
...
auth       required     pam_shells.so
...

она означает, что только пользователям с доступом к оболочкам должен быть разрешен доступ
А добавляли мы пользователя как раз с параметром: -s /sbin/nologin

[root@localhost]# useradd -s /sbin/nologin ftpuser

Комментирует эту строчку: auth required pam_shells.so и перезапускаем vsftpd

[root@localhost]# systemctl restart vsftpd

Максим Макаров
У блога появился хостинг, его любезно предоставила компания Облакотека.
Облакотека - облачные сервисы для создания и управления виртуальной ИТ-инфраструктурой.
Если вам понравился мой блог и вы хотели бы видеть на нем еще больше полезных статей, большая просьба поддержать этот ресурс. Для этого достаточно кликнуть на контекстную рекламу, расположенную на сайте.
Оцените автора
IT Draft
Добавить комментарий

Нажимая на кнопку "Отправить комментарий", я даю согласие на обработку персональных данных и принимаю политику конфиденциальности.

  1. Alex

    Привет! Ошибку поправте: chown на chmod

    Делаем его исполняемым
    [root@localhost]# chmod +x /home/add_ftp_user.sh

    Ответить
    1. Максим Макаров автор

      Благодарю, подправил.

      Ответить
  2. Валерий

    Уже несколько раз пытаюсь настроить фтп по вашей инструкции, все в точности делаю как у Вас указано, но почему-то ничего не работает. Каждый раз какая-то новая фигня вылезает.

    После настройки не дает авторизоваться. Исправил это добавлением в файл /etc/shells строки /sbin/nologin

    Дальше не дает создать каталог, 550 ошибка. Создаю в домашней директории пользователя папку, но она не видна при авторизации. У меня подозрения что пользователь не подключается куда надо. но в логах ничего нету, кроме как что пользователь залогинелся и не смог создать папку. Помогите с решением данной проблемы. Буду очень благодарен.

    Ответить
    1. Максим Макаров автор

      Если не создает каталог, значит не правильные права стоят. Владелец и группа должный быть vsftpd.

      Ответить
      1. Валерий

        Подскажите где смотреть, точнее где у Вас это присваивается?

        Ответить
        1. Максим Макаров автор

          В самом начале статьи выставляются права на каталог
          [root@localhost]# chmod 0777 /home/vsftpd
          Попробуйте в терминале выполнить chmod -R 0777 /home/vsftpd что бы поменять права на все созданные подкаталоги, затем подключиться по FTP и создать новую папку.

          Ответить