Настройка ftpd c авторизацией

 Возникла необходимость копировать бэкапы с удаленного филиала на фтп головного офиса. Для такой задачи настраивать навороченный ProFTPD или vsFTP стало лень, решил использовать стандартный ftpd.

 Итак начнем, включаем в rc.conf строки -

ftpd_enable="YES"
ftpd_flags="-D -l"

где флаг -D запускает ftpd в качестве демона, а -l включает логирование.

 По умолчанию логи пишутся в /var/log/xferlog.

 Другие доступные флаги:

-a <адрес>: в режиме демона принимать соединения только на указанный IP-адрес.
-d: включить режим отладки (подробная информация о работе будет выдаваться серверу syslog как LOG_FTP).
-h: не выводить информацию о системе в сообщениях сервера.
-A: разрешить только анонимный доступ.
-M: запретить анонимным пользователям создавать папки.
-m: разрешить анонимным пользователям модифицировать существующие файлы (если для этого достаточно системных прав).
-o, -O: разрешить только запись на сервер всем пользователям (-o) или только анонимному пользователю (-O). В частности, таким образом можно организовать сбор с удаленных серверов файлов резервных копий, чтение которых пользователями не предусмотрено.
-r: перевести сервер в режим «только для чтения». Любая модификация размещенных данных будет запрещена.

Другой способ запуска ftpd, это добавить в rc.conf строку -

inetd_enable="YES"

И изменением файла /etc/inetd.conf - 

?Раскомментировать строку:

ftp stream tcp nowait root /usr/libexec/ftpd ftpd -l

В нашем случае этот способ тоже подойдет, но если пользователей сервера ftp будет много, то для каждого пользователя ftp в этом случае будет запускаться отдельный экземпляр ftpd, что приведет к повышенному потреблению памяти. 

Создаем учетную запись пользователя, для которой доступ на ftp будет открыт. Я использовал adduser,  но если кто-то не любит консоль =O, то может использовать sysinstall.
 
/var/log/>adduser ftpgreen
Username: ftpgreen 
Full name: ftpgreen 
Uid (Leave empty for default): 
Login group [ftpgreen]: 
Login group is ftpgreen. Invite ftpgreen into other groups? []: 
Login class [default]: 
Shell (sh csh tcsh nologin) [sh]: nologin 
Home directory [/home/ftpgreen]: 
Home directory permissions (Leave empty for default): 
Use password-based authentication? [yes]: 
Use an empty password? (yes/no) [no]: 
Use a random password? (yes/no) [no]: 
Enter password: 
Enter password again: 
Lock out the account after creation? [no]: 
Username   : ftpgreen 
Password   : ***** 
Full Name  : ftpgreen 
Uid        : 1004 
Class      : 
Groups     : ftpgreen 
Home       : /home/ftpgreen 
Home Mode  : 
Shell      : /usr/sbin/nologin 
Locked     : no OK? (yes/no): y 
adduser: 
INFO: Successfully added (ftpgreen) to the user database. 
Add another user? (yes/no): n 
Goodbye!
Прошу обратить внимание, пользователю в качестве shell задаем nologin, т.к. этот пользователь ни при каких условиях не должен получать доступ к консоли сервера.
Открываем файл /etc/ftpuser, в нем содержаться имена пользователей, которым вход на ftp запрещен и смотрим нет ли там нашего созданного пользователя (быть не должно, если только ранее руками не добавляли).
Создаем файл /etc/ftpchroot формата:
<имя пользователя> <путь к папке>
<@ имя группы>
Имя группы указываем если надо дать доступ не только этому пользователю, но и всем входящим в эту группу.
В нашем случае:
ftpgreen /home/ftpgreen
Т.к. пользователь у нас один и папка, куда будет осуществлен доступ является для него корневой, то права на папку мы менять не будем
Запускаем сервис /etc/rc.d/ftpd start
Все, ftp работает, доступ разрешен только для нашего пользователя.
Теперь добавляем правило в pf,  разрешающее доступ с определенных адресов к  ftp и задача решена!
 
UPD:
При необходимости можно отредактировать:
/etc/ftphosts – настройка виртуальных хостов
/etc/ftpwelcome – приветственное сообщение
/etc/ftpmotd – приветственное сообщение, выводимое при входе на сервер
 
Источники:
1. man ftpd
 
Интересное на сайте: 
5
Ваша оценка: Нет Средняя: 5 (1 оценка)