Этот пост пишу потому, что в интернете не нашел нормальной статьи по настройке встроенного во FreeBSD ftp-сервера: кругом сплошные сслыки на “man ftpd”. Интак, мне необходимо поднять ftp с ограниченным доступом по логину/паролю к отдельным папкам для каждого пользователя. Для этих целей ftpd будет выше крыши.
1. В файл /etc/rc.conf добавляем строчки:
ftpd_enable=”YES”
ftpd_flags=”" # здесь прописываем нужные флаги. Их описание я привёл ниже.
Доступные флаги:
-D: запускать ftpd в режиме демона.
-a <адрес>: в режиме демона принимать соединения только на указанный IP-адрес.
-d: включить режим отладки (подробная информация о работе будет выдаваться серверу syslog как LOG_FTP).
-h: не выводить информацию о системе в сообщениях сервера.
-l: протоколировать все сессии (обычно используется/var/log/xferlog).
-A: разрешить только анонимный доступ.
-M: запретить анонимным пользователям создавать папки.
-m: разрешить анонимным пользователям модифицировать существующие файлы (если для этого достаточно системных прав).
-o, -O: разрешить только запись на сервер всем пользователям (-o) или только анонимному пользователю (-O). В частности, таким образом можно организовать сбор с удаленных серверов файлов резервных копий, чтение которых пользователями не предусмотрено.
-r: перевести сервер в режим «только для чтения». Любая модификация размещенных данных будет запрещена.
-D: запускать ftpd в режиме демона.
-a <адрес>: в режиме демона принимать соединения только на указанный IP-адрес.
-d: включить режим отладки (подробная информация о работе будет выдаваться серверу syslog как LOG_FTP).
-h: не выводить информацию о системе в сообщениях сервера.
-l: протоколировать все сессии (обычно используется/var/log/xferlog).
-A: разрешить только анонимный доступ.
-M: запретить анонимным пользователям создавать папки.
-m: разрешить анонимным пользователям модифицировать существующие файлы (если для этого достаточно системных прав).
-o, -O: разрешить только запись на сервер всем пользователям (-o) или только анонимному пользователю (-O). В частности, таким образом можно организовать сбор с удаленных серверов файлов резервных копий, чтение которых пользователями не предусмотрено.
-r: перевести сервер в режим «только для чтения». Любая модификация размещенных данных будет запрещена.
2. Создаем учётные записи пользователей (например, с помощью adduser), которым будут разрешен доступ к серверу, после чего убеждаемся в том, что их имена не упоминаются в файле /etc/ftpuser (пользователям, упомянутым в этом файле, доступ к ftp будет запрещён).
Для анонимного доступа к серверу необходимо создать учётную запись с именем “ftp”. Корневым каталогом и будет его домашняя папка.
Для анонимного доступа к серверу необходимо создать учётную запись с именем “ftp”. Корневым каталогом и будет его домашняя папка.
3. Создаем файл /etc/ftpchroot и заполняем его по такому шаблону:
<имя пользователя> <путь к папке>
<@ имя группы> # это для того, чтобы все пользователи данной группы были ограничены одной папкой (можно не указывать).
Пример:
test /home/test
@ wheel
4. Устанавливаем нужные права на папку /home/test (то, что мы хотим разрешить/запретить пользователю test).
5. При необходимости редактируем:
/etc/ftphosts – настройка виртуальных хостов
/etc/ftpwelcome – приветственное сообщение
/etc/ftpmotd – приветственное сообщение, выводимое при входе на сервер
/etc/ftphosts – настройка виртуальных хостов
/etc/ftpwelcome – приветственное сообщение
/etc/ftpmotd – приветственное сообщение, выводимое при входе на сервер
6. Определяемся, как мы будем запускать сервер – через inetd, или же как standalone.
В первом случае в файле /etc/inetd.conf раскоментируем строчку
В первом случае в файле /etc/inetd.conf раскоментируем строчку
ftp stream tcp nowait root usr/liexec/ftpd ftpd -l
Во втором случае для запуска используем скрипт /etc/rc.d/ftpd:
# /etc/rc.d/ftpd start
Если его в системе нет (старые версии FreeBSD), создаём вручную:
#!/bin/sh
#
# $FreeBSD: src/etc/rc.d/ftpd,v 1.1 2006/01/21 18:08:15 yar Exp $
## PROVIDE: ftpd
# REQUIRE: LOGIN cleanvar. /etc/rc.subrname=”ftpd”
rcvar=`set_rcvar`
command=”/usr/libexec/${name}”
pidfile=”/var/run/${name}.pid”
start_precmd=ftpd_prestartftpd_prestart()
{
rc_flags=”-D ${rc_flags}”
return 0
}load_rc_config $name
run_rc_command “$1″
Вот и всё :) Заходим на свой сервер и радуемся жизни ;)