Thank you for reading this post, don't forget to subscribe!
Оригинал статьи:
Установка и настройка FTP-сервера VSFTPd на Centos 7. Локальные пользователи
Установка FTP-сервера
Устанавливаем софт:
1 |
[root@localhost]# yum install vsftpd nano net-tools -y |
Создаем директорию, где будут каталоги пользователей и выставляем права доступа
1 2 |
[root@localhost]# mkdir /home/vsftpd [root@localhost]# chmod 0777 /home/vsftpd |
Cохраняем дефолтный конфиг
1 |
[root@localhost]# mv /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf_backup |
Пишем свой конфиг
cat /etc/vsftpd/vsftpd.conf
[codesyntax lang="php"]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 |
# Запуск сервера в режиме службы 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 |
[/codesyntax]
Добавляем пользователя
1 2 3 |
[root@localhost]# useradd -s /sbin/nologin ftpuser [root@localhost]# passwd ftpuser fptpassword |
Создаем папку, где будут отдельные конфиги пользователей
1 2 |
[root@localhost]# mkdir /etc/vsftpd/users [root@localhost]# touch /etc/vsftpd/users/ftpuser |
Задаем в конфиге домашний ftp-каталог
1 |
[root@localhost]# echo 'local_root=/home/vsftpd/ftpuser/' >> /etc/vsftpd/users/ftpuser |
Cоздаем каталог пользователя и задаем владельца
1 2 |
[root@localhost]# mkdir /home/vsftpd/ftpuser [root@localhost]# chown ftpuser:ftpuser /home/vsftpd/ftpuser |
Создаем файл, в котором будет перечислен список пользователей, которым разрешен выход из домашнего каталога. И добавляем в него пользователя root
1 2 |
[root@localhost]# touch /etc/vsftpd/chroot_list [root@localhost]# echo 'root' >> /etc/vsftpd/chroot_list |
Создаем файл, в котором будет перечислен список пользователей, которым разрешено подключаться к FTP-серверу. Добавляем в него пользователей root и ftpuser
1 2 |
[root@localhost]# touch /etc/vsftpd/user_list [root@localhost]# echo 'root' >> /etc/vsftpd/user_list && echo 'ftpuser' >> /etc/vsftpd/user_list |
Создаем файл, куда будут писаться логи, и выставляем на него права
1 |
[root@localhost]# touch /var/log/vsftpd.log && chmod 600 /var/log/vsftpd.log |
Добавляем сервис vsftpd в автозагрузку, запускаем его, проверяем статус
1 2 3 |
[root@localhost]# systemctl enable vsftpd [root@localhost]# systemctl start vsftpd [root@localhost]# systemctl status vsftpd |
Смотрим, появился ли процесс
1 2 |
[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
1 2 3 |
[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, перезагружаемся
1 2 3 4 |
[root@localhost]# setenforce 0 [root@localhost]# nano /etc/selinux/config SELINUX=disabled [root@localhost]# reboot |
Инструкция по добавлению новых пользователей
Добавляем пользователя в систему
1 2 3 |
[root@localhost]# useradd -s /sbin/nologin testuser [root@localhost]# passwd testuser testpassword |
Создаем каталог пользователя и задаем владельца
1 2 |
[root@localhost]# mkdir /home/vsftpd/testuser [root@localhost]# chown test:test /home/vsftpd/testuser |
Создаем папку, где будут отдельные конфиги пользователей
1 |
[root@localhost]# touch /etc/vsftpd/users/testuser |
Задаем в конфиге домашний фтп-каталог
1 |
[root@localhost]# echo 'local_root=/home/vsftpd/testuser/' >> /etc/vsftpd/users/testuser |
Задаем разрешенных пользователей
1 |
[root@localhost]# echo 'testuser' >> /etc/vsftpd/user_list |
Перезапускаем vsftpd
1 |
[root@localhost]# systemctl restart vsftpd |
Bash-скрипт добавления пользователей
Создаем bash-скрипт add_ftp_user.sh
cat /home/add_ftp_user.sh
[codesyntax lang="php"]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 |
#!/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 |
[/codesyntax]
Делаем его исполняемым
1 |
[root@localhost]# chmod +x /home/add_ftp_user.sh |
теперь, что бы добавить нового FTP-пользователя надо выполнить команду
1 2 |
[root@localhost]# сd /home [root@localhost]# ./add_ftp_user.sh %user% %pass% |
где
%user% — логин
%pass% — пароль
не работает авторизация, ошибка 530
Не работает авторизация в vsftpd:
1 |
530 Login incorrect |
Решение:
Данная ошибка получается из-за того, что в файле /etc/pam.d/vsftpd
присутствует строчка:
1 2 3 4 |
[root@localhost]# egrep -v "^#|^$" /etc/pam.d/vsftpd ... auth required pam_shells.so ... |
она означает, что только пользователям с доступом к оболочкам должен быть разрешен доступ
А добавляли мы пользователя как раз с параметром: -s /sbin/nologin
1 |
[root@localhost]# useradd -s /sbin/nologin ftpuser |
Комментирует эту строчку: auth required pam_shells.so и перезапускаем vsftpd
1 |
[root@localhost]# systemctl restart vsftpd |