Инструменты пользователя

Инструменты сайта


software:linux:vsftpd_centos69

Настройка vsftpd в CentOS 6.9

Задача поднять ftp сервер для бэкапа. Сервер должен быть доступен для системного пользователя без шелла. В примере ниже root имеет доступ к ftp и может перемещаться по всей файловой системе. Я не рекомендовал бы такие настройки в продакшен системе.

Подготовительные действия

Создадим пользователя без шелла, назначим ему пароль

# useradd -s /sbin/nologin asr
# passwd asr

Создадим каталог для ftp

# mkdir /var/ftp
# mkdir /var/ftp/asr
# chown -R asr. /var/ftp/asr

Установка vsftpd

Установка vsftp

# yum install vsftpd

Настройка vsftpd

Подготовка файлов конфигурации

Файлы конфигурации из /etc/vsftpd сохраняем или удаляем. Файл /etc/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

Создадим файл /etc/vsftpd/chroot_list со списком пользователей кому позволено выходить из своего домашнего каталога.

# cat > /etc/vsftpd/chroot_list
root
#

и еще файл с перечнем /etc/vsftpd/user_list пользователей кому разрешено пользоваться ftp:

# cat > /etc/vsftpd/user_list
root
asr
#

После этого надо создать каталог /etc/vsftpd/users где будут храниться конфигурации пользователей, и в нем создать файл с именем нашего пользователя asr:

# mkdir /etc/vsftpd/users
# cat > /etc/vsftpd/users/asr
local_root=/var/ftp/asr
#

Включение сервиса

Включаем сервис в автоматическую загрузку

# /sbin/chkconfig --add vsftpd
# /sbin/chkconfig --list
# /sbin/chkconfig vsftpd on
# /sbin/chkconfig --list

Убедимся что сервис работает

# netstat -tulnp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address               Foreign Address             State       PID/Program name
tcp        0      0 0.0.0.0:21                  0.0.0.0:*                   LISTEN      1257/vsftpd
tcp        0      0 0.0.0.0:22                  0.0.0.0:*                   LISTEN      1243/sshd
tcp        0      0 127.0.0.1:25                0.0.0.0:*                   LISTEN      1336/master
tcp        0      0 :::22                       :::*                        LISTEN      1243/sshd
tcp        0      0 ::1:25                      :::*                        LISTEN      1336/master
udp        0      0 0.0.0.0:68                  0.0.0.0:*                               1098/dhclient
udp        0      0 0.0.0.0:68                  0.0.0.0:*                               999/dhclient

Настройка iptables

1. Редактируем файл /etc/sysconfig/iptables-config. Добавляем “ip_conntrack_ftp” в секцию “IPTABLES_MODULES« В итоге должно быть так:

IPTABLES_MODULES="ip_conntrack_ftp"

2. Добавляем правила в /etc/sysconfig/iptables.

-A INPUT -p tcp -m tcp --dport 21 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 20 -j ACCEPT

В конечном итоге выглядит так:

# cat /etc/sysconfig/iptables
# Firewall configuration written by system-config-firewall
# Manual customization of this file is not recommended.
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -p tcp -m tcp --dport 21 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 20 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT

Убедиться что новые правила работают:

# iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination
...
ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:ftp
ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:ftp-data
...

Настройка selinux

Проверить включен ли SELinux

# sestatus

Если SELinuxstatus = on & Current mode = enforcing, скорей всего тогда ftp либо недоступен, либо недоступен на запись для пользователя и нужно выполнить следующее: Просмотреть текущее состояние переменных:

# getsebool -a | grep ftp
allow_ftpd_anon_write --> off
allow_ftpd_full_access --> off
allow_ftpd_use_cifs --> off
allow_ftpd_use_nfs --> off
ftp_home_dir --> off
ftpd_connect_db --> off
ftpd_use_fusefs --> off
ftpd_use_passive_mode --> off
httpd_enable_ftp_server --> off
tftp_anon_write --> off
tftp_use_cifs --> off
tftp_use_nfs --> off

Переключить переменные:

# setsebool -P allow_ftpd_full_access on
# setsebool -P ftp_home_dir on

Так же полезными командами отладки доступа будут:

# setenforce 0
# setenforce 1
# tail /var/log/audit/audit.log
# ls -alZ /var/ftp/
# restorecon -nvvr /var/ftp/
# restorecon -vvr /var/ftp/
software/linux/vsftpd_centos69.txt · Последние изменения: 2018/10/19 17:24 (внешнее изменение)