Содержание
Установка пакета vsftpd и запуск сервера
Настройка iptables
Настройка TCP Wrappers
Настройка анонимного доступа
Доступ локальных пользователей
Сервер vsftpd в Red Hat 5 является FTP-сервером по умолчанию.
Установка пакета vsftpd и запуск сервера
Устанавливаем пакет vstfpd
Проверим, установлен ли пакет vsftpd
# rpm -q vsftpd
package vsftpd is not installed
То же самое с помощью yum
# yum list vsftpd
...
Error: No matching Packages to list
Как видим - пакет не установлен. Устанавливаем его
# rpm -i vsftpd-2.2.2-6.el6_0.1.i686.rpm
warning: vsftpd-2.2.2-6.el6_0.1.i686.rpm: Header V3 RSA/SHA256 Signature, key ID fd431d51: NOKEY
Или можно установить с помощью yum
# yum install vsftpd
Снова проверяем, установлен ли пакет
# rpm -q vsftpd
vsftpd-2.2.2-6.el6_0.1.i686
То же самое с помощью yum
# yum list vsftpd
...
Installed Packages
vsftpd.i686 2.2.2-6.el6_0.1 installed
Теперь пакет установлен и можно приступать к настройке сервера FTP.
Проверяем состояние сервиса vsftpd. Сервис, естественно, не запущен,
ведь мы его только что установили
# service vsftpd status
vsftpd is stopped
Стартуем сервис vsftpd
# service vsftpd start
Starting vsftpd for vsftpd: [ OK ]
Вновь проверяем статус - сервис запущен
# service vsftpd status
vsftpd (pid 18665) is running...
Настраиваем запуск сервиса vsftpd во время загрузки сервера и проверяем, на
каких уровнях выполнения системы сервис будет выполняться
# chkconfig vsftpd on
# chkconfig --list | grep vsftpd
vsftpd 0:off 1:off 2:on 3:on 4:on 5:on 6:off
Как видим, сервис выполняется на всех уровнях кроме однопользовательского.
Настройка iptables
В данный момент сервис запущен и работает, но доступ к нему из внешней сети
запрещен, т.к. файервол пресекает все попытки соединиться с сервером vsftpd.
При попытке соединиться мы увидим примерно следующее
F:\>ftp 192.168.9.59
Связь с 192.168.9.59.
Подключение разорвано удаленным узлом.
Таким образом, сразу же после установки сервера vsftpd требуется настройка
файервола iptables (если он работает, конечно).
Настраиваем файервол iptables c тем, чтобы принимались соединения
с сервером vsftpd. Для этого в файл /etc/sysconfig/iptables
добавляем новое правило.
# nano /etc/sysconfig/iptables
-A RH-Firewall-1-INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 21 -j ACCEPT
Перестартуем сервис iptables
# service iptables restart
Flushing firewall rules: [ OK ]
Setting chains to policy ACCEPT: filter [ OK ]
Unloading iptables modules: [ OK ]
Applying iptables firewall rules: [ OK ]
Loading additional iptables modules: ip_conntrack_netbios_n [ OK ]
Пробуем соединиться с сервером
F:\>ftp 192.168.9.59
Связь с 192.168.9.59.
220 (vsFTPd 2.0.5)
Пользователь (192.168.9.59:(none)):
Связь есть!
Настройка TCP Wrappers
В настройках TCP Wrappers запретим всем хостам кроме pronin-s (192.168.9.18) и
stend-bill-04 (192.168.11.182) соединяться с сервисом vsftpd.
Для этого отредактируем файлы /etc/hosts.allow и /etc/hosts.deny
Добавим строки в файл /etc/hosts.allow
# nano /etc/hosts.allow
# Allow FTP access only from hosts pronin-s (9.18) & stend-bill-04 (11.182)
vsftpd: 192.168.9.18, 192.168.11.182
Добавим строки в файл /etc/hosts.deny
# nano /etc/hosts.deny
# Restrict FTP access from all hosts except enumerated in hosts.allow
vsftpd:ALL
Настройка анонимного доступа
В конфигурационном файле сервера /etc/vsftpd/vsftpd.conf за разрешение
анонимного доступа к серверу vsftpd отвечает параметр anonymous_enable,
который по умолчанию имеет значение YES, т.е. анонимный доступ к серверу разрешен.
Запрещение анонимного доступа
Итак, сразу после установки vsftpd анонимный доступ разрешен, т.к. в файле
/etc/vsftpd/vsftpd.conf параметр anonymous_enable=YES.
Для запрещения анонимного значение этого параметра нужно установить в NO.
# nano /etc/vsftpd/vsftpd.conf
anonymous_enable=NO
Анонимный доступ по паролю
Как было сказано выше, анонимный доступ разрешен по умолчанию. Спрашивать пароль
у анонима - это так же умалчиваемое поведение сервера vsftpd.
Так что если вы только что установили сервер - делать ничего не надо. Но если
вы уже правили конфигурационный файл /etc/vsftpd/vsftpd.conf, то лучше
проверить два параметра anonymous_enable и no_anon_password.
anonymous_enable=YES
no_anon_password=NO
Анонимный доступ без пароля
При анонимном доступе к серверу вы должны ввести пароль. Как правило в качестве
пароля используется почтовый адрес клиента, хотя это необязательное требование.
Но это поведение сервера по умолчанию. На самом деле есть параметр
no_anon_password, который имеет значение NO, что означает, что при
анонимном доступе сервер vsftpd должен спрашивать пароль.
Если мы добавим этот параметр в файл /etc/vsftpd/vsftpd.conf и присвоим
ему значение YES, то сервер перестанет спрашивать пароль у анонима.
# nano /etc/vsftpd/vsftpd.conf
no_anon_password=YES
Перезагрузим сервис, чтобы он перечитал файл конфигурации
# service vsftpd reload
Shutting down vsftpd: [ OK ]
Starting vsftpd for vsftpd: [ OK ]
Теперь попробуем соединиться с ервером
F:\>ftp 192.168.9.59
Связь с 192.168.9.59.
220 (vsFTPd 2.0.5)
Пользователь (192.168.9.59:(none)): Anonymous
230 Login successful.
ftp>
Как видим, сервер пустил нас без пароля.
Анонимная загрузка файлов
Наша цель - дать возможность анонимным пользователям загружать свои файлы в
специально созданный для этого каталог /var/ftp/pub/incomming.
При этом анонимные пользователи не могут читать содержимое этого каталога,
т.е. сразу после того, как анонимный пользователь загрузил файл - тот исчезает
из его поля зрения. Это позволяет предотвратить обмен файлами анонимными
пользователями через этот каталог.
# mkdir incoming
# chown root:ftp incoming/
# chmod 730 incoming/
# ls -lahZ
drwx-wx--- root ftp root:object_r:public_content_t incoming
# chcon -t public_content_rw_t incoming
# ls -lahZ
drwx-wx--- root ftp root:object_r:public_content_rw_t incoming
Теперь сервер vsftpd позволяет анонимам загружать файлы на сервер.
В случае, если на сервере работает SELinux, загрузка файлов анонимам по
умолчанию запрещена.
Этот запрет регулируется булевым параметром allow_ftpd_anon_write.
Разрешим анонимную загрузку
# setsebool -P allow_ftpd_anon_write=1
или альтернативный синтаксис
# setsebool allow_ftpd_anon_write on
Ограничение на объем анонимной загрузки
Для ограничения объема анонимной загрузки используется возможность
системы Red Hat квотировать суммарный объем файлов локального пользователя на
файловой системе. Для включения возможности квотирования файловая система монтируется со
специальной опцией usrquota. Затем некоему пользователю (в нашем случае
это будет anonuploader) назначается квота на использование пространства
в данной файловой системе. С этого момента этот пользователь не может занять
пространство больше, чем назначено ему квотой.
Следующий шаг - смена владельца каждого из анонимно загруженных файлов на
anonuploader. Таким образом каждый анонимно загруженный файл будет
уменьшать остаток квоты пользователя anonuploader, а когда квота будет
исчерпана - сервер не сможет больше записывать файлы на диск, а анонимные
пользователи будут получать отказ в обслуживании.
Приступим к настройке ограничения на объем анонимной загрузки. Поскольку каталог
/var/ftp/pub/incoming находится в корневой файловой системе,
приходится устанавливать квоту на каталог /
В файле /etc/fstab для корневой файловой системы установливем опцию монтирования
usrquote
# nano /etc/fstab
/dev/VolGroup00/LogVol00 / ext3 usrquota 1 1
После чего файловая система должна быть перемонтирована (перезагрузка не нужна)
# mount -o remount /
Далее создаем базу данных квот
# quotacheck -cum /
и включаем режим квотирования на корневой каталог /
# quotaon /
Далее создаем специального пользователя anonuploaderдля контроля за
анонимно загруженными файлами
# useradd -g ftp anonuploader
В файл конфигурации сервера vsftpd добавляем специальные опции для изменения
владельца загруженных анонимно файлов
# nano /etc/vsftd/vsftpd.conf
chown_uploads=YES
chown_username=anonuploader
и перезапускаем сервер vsftpd
# service vsftpd reload
Теперь все загруженные в каталог /var/ftp/pub/incoming файлы будут иметь
владельцем пользователя anonuploader и группу ftp. Зададим для пользователя
anonuploader квоты на использование корневого каталога
# setquota -u anonuploader 1000000 1100000 0 0 /
Теперь пользователь anonuploader сможет загрузитьв корневой каталог не более
1 100 000 блоков по 1к, а при 1 000 000 блоков он получит предупреждение о
достижении квоты на дисковое пространство.
Посмотреть, как используетяс квота на файловую систему можно так
# repquota /
*** Report for user quotas on device /dev/mapper/VolGroup00-LogVol00
Block grace time: 7days; Inode grace time: 7days
Block limits File limits
User used soft hard grace used soft hard grace
----------------------------------------------------------------------
root -- 6937556 0 0 109473 0 0
daemon -- 20 0 0 3 0 0
lp -- 16 0 0 2 0 0
ftp -- 8 0 0 1 0 0
ntp -- 16 0 0 2 0 0
avahi -- 20 0 0 3 0 0
rpc -- 4 0 0 1 0 0
smmsp -- 16 0 0 2 0 0
xfs -- 4 0 0 1 0 0
rpcuser -- 8 0 0 1 0 0
bercut -- 18076 0 0 13 0 0
anonuploader -- 140380 1000000 1040000 31 1024 1050
Доступ локальных пользователей
Доступ к домашник каталогам и SELinux
Если в системе работает SELinux, то есть нюансы, связанные с доступом
локальных пользователей к своим домашним каталогам. Дело в том, что по умолчанию
SELinux запрещает его, т.е. булев пораметр ftp_home_dir = 0.
При попытке соединения мы получим сообщение об ошибке примерно следующего содержания
C:\>ftp 192.168.9.59
Связь с 192.168.9.59.
220 (vsFTPd 2.2.2)
Пользователь (192.168.9.59:(none)): bercut
331 Please specify the password.
Пароль:
500 OOPS: cannot change directory:/home/bercut
500 OOPS: priv_sock_get_cmd
Подключение разорвано удаленным узлом.
Следующая команда меняет параметр ftp_home_dir так, чтобы локальные
пользователи сервера могли видеть
свои домашние каталоги
# setsebool -P ftp_home_dir=1
или альтернативный синтаксис
# setsebool ftp_home_dir on
Немедленно после выполнения последней команды локальные пользователи получают
доступ черерез FTP к своим домашник каталогам.
|