Всем доброго времени суток!
Периодически у Администраторов возникает задача поднять FTP сервер с авторизацией, и при этом что бы пользователи в зависимости от логина попадали в свои домашние папки.
Такая задача появилась и у меня.
В интернете был найден вполне вменяемый мануал как это сделать
https://serveradmin.ru/ustanovka-i-nastroyka-ftp-servera-na-centos-7/
Однако, нашлись небольшие трудности, ответы на которые я нашел в этой статье
https://itdraft.ru/2018/07/23/ustanovka-i-nastrojka-ftp-servera-vsftpd-na-centos-7-lokalnye-polzovateli/
Для того, что бы отложилось в памяти, я перенесу сюда с поправками.
Для начала устанавливаем CentOS7, и обновляем ее.
Устанавливаем vsftpd:
Переходим к настройке. Будем настраивать работу ftp сервера с системными пользователями. Пользователю root разрешаю ходить по всему серверу. Всем остальным пользователям только в свои домашние директории. Анонимных пользователей выключаем.
Далее можно очистить каталог /etc/vsftpd. Для спокойствия оргиниальный конфиг можно куда нибудь сохранить.
Создаем новый файл конфигурации /etc/vsftpd/vsftpd.conf
Примечание: Для понимания как это все работает я буду описывать все по шагам. В конце заметки я приложу текст скрипта, с помощью которого в автоматическом режиме будут выполнятся все перечисленные действия.
Добавим тестового пользователя ftp в систему:
Пользователя создаем без оболочки. Тут сразу можно указать в качестве домашней директории необходимый каталог, в котором будет работать пользователь. Пользователь будет создан со стандартным домашним каталогом в /home, но при работе по ftp он будет направлен в другой каталог, который будет указан через файл пользовательских настроек vsftpd.
Создаем каталог для персональных настроек пользователей:
В каталоге можно будет создать отдельно файлы с именами пользователей и передать им персональные параметры. Для примера создадим файл с именем пользователя ftp-user и укажем его домашний каталог:
Не забываем создать этот каталог и назначить ему владельца:
Создаем файл c пользователями, которым можно выходить за пределы домашнего каталога:
Добавляем туда рута:
Примечание: Рут добавлен для примера и делать так настоятельно не рекомедуется.
Создаем файл со списком пользователей ftp, которым разрешен доступ к серверу:
Этим списком мы можем ограничить доступ к ftp серверу системных пользователей, которым туда ходить не нужно. Осталось только создать файл для логов:
присутствует строчка:
Это означает, что только пользователям с доступом к оболочкам должен быть разрешен доступ
А добавляли мы пользователя как раз с параметром: -s /sbin/nologin
Комментируем эту строчку: auth required pam_shells.so
Все готово для работы. Добавляем vsftpd в автозагрузку и запускаем:
Проверяем, запустился ли он:
Все в порядке, можно подключаться клиентом.
Теперь немного об автоматизации добавления пользователей. Привожу текст скрипта для добавления пользователей.
Создаем bash-скрипт add_ftp_user.sh
Делаем его исполняемым
Где username и userpass это имя и пароль пользователя FTP.
Вот на этом пожалуй и все.
Периодически у Администраторов возникает задача поднять FTP сервер с авторизацией, и при этом что бы пользователи в зависимости от логина попадали в свои домашние папки.
Такая задача появилась и у меня.
В интернете был найден вполне вменяемый мануал как это сделать
https://serveradmin.ru/ustanovka-i-nastroyka-ftp-servera-na-centos-7/
Однако, нашлись небольшие трудности, ответы на которые я нашел в этой статье
https://itdraft.ru/2018/07/23/ustanovka-i-nastrojka-ftp-servera-vsftpd-na-centos-7-lokalnye-polzovateli/
Для того, что бы отложилось в памяти, я перенесу сюда с поправками.
Для начала устанавливаем CentOS7, и обновляем ее.
#yum update -yДалее я отключаю Selinux. Это конечно не совсем верно :).
Устанавливаем vsftpd:
# yum -y install vsftpd
Переходим к настройке. Будем настраивать работу ftp сервера с системными пользователями. Пользователю root разрешаю ходить по всему серверу. Всем остальным пользователям только в свои домашние директории. Анонимных пользователей выключаем.
Далее можно очистить каталог /etc/vsftpd. Для спокойствия оргиниальный конфиг можно куда нибудь сохранить.
# rm -rf /etc/vsftpd/*
Создаем новый файл конфигурации /etc/vsftpd/vsftpd.conf
# vi /etc/vsftpd/vsftpd.confИ вписываем туда следующую конфиурацию.
# Запуск сервера в режиме службы
listen=YES
# Работа в фоновом режиме
background=YES
# Имя pam сервиса для vsftpd
pam_service_name=vsftpd
# Входящие соединения контроллируются через tcp_wrappers для CentOS8 параметр NO
tcp_wrappers=YES
#tcp_wrappers=NOСоздаем необходимых пользователей, файлы и каталоги для установленной конфигурации.
# Запрещает подключение анонимных пользователей
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
Примечание: Для понимания как это все работает я буду описывать все по шагам. В конце заметки я приложу текст скрипта, с помощью которого в автоматическом режиме будут выполнятся все перечисленные действия.
Добавим тестового пользователя ftp в систему:
# useradd -s /sbin/nologin ftp-user
# passwd ftp-user
Пользователя создаем без оболочки. Тут сразу можно указать в качестве домашней директории необходимый каталог, в котором будет работать пользователь. Пользователь будет создан со стандартным домашним каталогом в /home, но при работе по ftp он будет направлен в другой каталог, который будет указан через файл пользовательских настроек vsftpd.
Создаем каталог для персональных настроек пользователей:
# mkdir /etc/vsftpd/users
В каталоге можно будет создать отдельно файлы с именами пользователей и передать им персональные параметры. Для примера создадим файл с именем пользователя ftp-user и укажем его домашний каталог:
# touch /etc/vsftpd/users/ftp-user
# echo 'local_root=/ftp/ftp-user/' >> /etc/vsftpd/users/ftp-user
Не забываем создать этот каталог и назначить ему владельца:
# mkdir /ftp && chmod 0777 /ftp
# mkdir /ftp/ftp-user && chown ftp-user. /ftp/ftp-user/
Создаем файл c пользователями, которым можно выходить за пределы домашнего каталога:
# touch /etc/vsftpd/chroot_list
Добавляем туда рута:
Примечание: Рут добавлен для примера и делать так настоятельно не рекомедуется.
# echo 'root' >> /etc/vsftpd/chroot_list
Создаем файл со списком пользователей ftp, которым разрешен доступ к серверу:
# touch /etc/vsftpd/user_list
# echo 'ftp-user' >> /etc/vsftpd/user_list
Этим списком мы можем ограничить доступ к ftp серверу системных пользователей, которым туда ходить не нужно. Осталось только создать файл для логов:
# touch /var/log/vsftpd.log && chmod 600 /var/log/vsftpd.logТеперь необходимо добавить правило в файерволл
# firewall-cmd --permanent --add-port=21/tcpНа данном этапе я хотел бы добавить следующий момент. После запуска возникают проблемы с авторизацией.
# firewall-cmd --permanent --add-port=49000-55000/tcp
# firewall-cmd --reload
530 Login incorrectДанная ошибка получается из-за того, что в файле /etc/pam.d/vsftpd
присутствует строчка:
# egrep -v "^#|^$" /etc/pam.d/vsftpd
...
auth required pam_shells.so
...
Это означает, что только пользователям с доступом к оболочкам должен быть разрешен доступ
А добавляли мы пользователя как раз с параметром: -s /sbin/nologin
Комментируем эту строчку: auth required pam_shells.so
Все готово для работы. Добавляем vsftpd в автозагрузку и запускаем:
# systemctl enable vsftpd
# systemctl start vsftpd
Проверяем, запустился ли он:
# netstat -tulnp | grep vsftpd
tcp 0 0 0.0.0.0:21 0.0.0.0:* LISTEN 19505/vsftpd
Все в порядке, можно подключаться клиентом.
Теперь немного об автоматизации добавления пользователей. Привожу текст скрипта для добавления пользователей.
Создаем bash-скрипт add_ftp_user.sh
# vi /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 /ftp/$NAME
# назначаем владельца
chown $NAME:$NAME /ftp/$NAME
# создаем пустой конфигурационный файл
touch /etc/vsftpd/users/$NAME
# прописываем домашний каталог
echo "local_root=/ftp/$NAME/" >> /etc/vsftpd/users/$NAME
# добавляем пользователя в список разрешенных для подключения
echo "$NAME" >> /etc/vsftpd/user_list
# задаем права каталога пользователя
chmod 0777 /ftp/$NAME
# перезапускаем службу vsftp
systemctl restart vsftpd
Делаем его исполняемым
# chmod +x /home/add_ftp_user.shТеперь, что бы добавить нового FTP-пользователя надо выполнить команду
# сd /home
# ./add_ftp_user.sh username userpass
Где username и userpass это имя и пароль пользователя FTP.
Вот на этом пожалуй и все.
Настройка vsftpd в Centos 8
ОтветитьУдалитьДля настройки ftp сервера в Centos 8, необходимо выполнить :
Параметр tcp_wrappers необходимо отключить, т.е. указать NO. В Centos 8 нет его поддержки.
Если хочется расширенных логов то в конце конфига основного добавляем
ОтветитьУдалитьlog_ftp_protocol=YES
xferlog_std_format=NO