Установка и настройка ProFtpd

Здесь я опишу установку и настройку ProFtpd - мощного и очень популярного ftp сервера. Устанавливать будем на Debian Squeeze. Настроим разграничение прав на директории, чтобы каждый пользователь получил доступ только в собственную папку и не имел доступ в чужие, такие ограничения нам потребуются для нашего хостинга, о котором я напишу в следующих статьях.

Мы не будем использовать системные учетные записи, вместо этого будем заводить виртуальных ftp-пользователей, учетные записи которых будут храниться в текстовом файле.

Устанавливаем proftpd

apt-get install proftpd

выбираем тип запуска "standalone" (самостоятельно)

Настраиваем proftpd для работы с виртуальными пользователями:

в конец конфигурационного файла /etc/proftpd/proftpd.conf добавим следующую строку:

AuthUserFile    /etc/proftpd/ftpd.passwd

здесь говорим, что для авторизации пользователей используется файл ftpd.passwd

Ну и собственно создаём пользователя:

ftpasswd --passwd --file=/etc/proftpd/ftpd.passwd --name=vasya --shell=/bin/false --home=/www/zvezda/ --uid=106 --gid=65534
и вводим пароль.

эта комманда создаст пользователя "vasya" с uid=106 и gid=65534 (такие же как и у системного пользователя ftp), домашней директориией для которго будет /www/zvezda/, шелл у "Васи" отсутствует (--shell=/bin/false)
   
Создадим ещё одного пользователя

ftpasswd --passwd --file=/etc/proftpd/ftpd.passwd --name=rinat --shell=/bin/false --home=/www/planeta/ --uid=106 --gid=65534

И так, сайт Васи это - /www/zvezda/, а сайт Рината это - /www/planeta/, необходимо, чтобы Вася при соединении с сервером попадал сразу в свой каталог /www/zvezda/ и не мог подняться выше него, т.е. не видел сайт Рината, а Ринат в свою очередь ходил бы только в свой каталог /www/planeta/ и не лазил бы к Васе.

Для реализации вышеописанного будем использовать файл .ftpaccess.
Создадим файл .ftpaccess в каталоге /www/zvezda/

touch /www/zvezda/.ftpaccess

и впишем туда
<Limit READ WRITE DIRS>
Order deny,allow
Allowuser vasya
</Limit>


Точно так же необходимо создать файл и в каталоге /www/planeta/, только заменив пользователя

<Limit READ WRITE DIRS>
Order deny,allow
Allowuser rinat
</Limit>

В файлах мы запрещаем кому-либо доступ к каталогу и разрешаем доступ указанному пользователю (директива "Allowuser"), естественно он должен присутствовать в файле /etc/proftpd/ftpd.passwd.
   
Теперь нам небходимо завести третьего пользователя, который не будет иметь никаких ограничений, своего рода вэб-мастер или админ, кому как нравится:

ftpasswd --passwd --file=/etc/proftpd/ftpd.passwd --name=admin --shell=/bin/bash --home=/www/ --uid=106 --gid=65534

Для админа домашней директорией будет /www/, так же для него мы указали shell.
   
И в итоге cоздадим файл .ftpaccess в каталоге /www/:

touch /www/.ftpaccess
   
И занесем туда следующие строки:
<Limit  READ WRITE DIRS>
Order deny,allow
AllowUser admin
</Limit>


Этот файл запрещает доступ к каталогу /www/ всем, кроме пользователя admin, если нужно дать доступ еще кому-то, то через запятую добавьте пользователя, предварительно создав для него учетную запись, как было показанно выше.   

Теперь нам необходимо обеспечить защищенную передачу данных между клиентом и нашим сервером, для этого используем SSL.
Сначала сгенерируем сертификат:

openssl req -new -x509 -days 365 -nodes -out  \
/etc/ssl/certs/proftpd.cert.pem -keyout \
/etc/ssl/certs/proftpd.key.pem

Заполним регистрационную форму

Country Name (2 letter code) [AU]: RU
State or Province Name (full name) [Some­State]: Ufa
Locality Name (eg, city) []: Ufa
Organization Name (eg, company) [Internet Widgits Pty Ltd]: artcom 
Organizational Unit Name (eg, section) []: IT
Common Name (eg, YOUR name) []: artcom-ufa.ru
Email Address []: root@localhost

Редактируем конфигурационный файл /etc/proftpd/tls.conf:

nano /etc/proftpd/tls.conf TLSEngine on
TLSLog /var/log/proftpd/proftpd_tls.log
TLSProtocol SSLv23
TLSOptions NoCertRequest
TLSRSACertificateFile /etc/ssl/certs/proftpd.cert.pem
TLSRSACertificateKeyFile /etc/ssl/certs/proftpd.key.pem
TLSVerifyClient on
TLSRequired off

Включим TLS в конфиге proftpd:
nano /etc/proftpd/proftpd.conf и расскомментируем или добавим следующую строку: Include /etc/proftpd/tls.conf
На этом настройку шифрования закончили.

Теперь же взглянем на конфигурационный файл нашего сервера.
Include /etc/proftpd/modules.conf
Include /etc/proftpd/tls.conf
UseIPv6                    off

ServerName                "Super Server"
ServerType                 standalone

# выдавать многострочные сообщения в стандарте RFC 959 или RFC 2228
MultilineRFC2228         on
DefaultServer            on
ShowSymlinks            on
# Таймауты
# на передачу - вошел и не начал передачу
TimeoutNoTransfer         600
# Подвисание во время передачи файлов
TimeoutStalled             600
# бездействие после входа
TimeoutIdle             1200

ListOptions                "-l"

DenyFilter                \*.*/

Port                    21

<IfModule mod_dynmasq.c>
</IfModule>

# Максимальное кол-во процессов
MaxInstances             30

User                    ftp
Group                    nogroup

Umask                    022  022

# разрешить перезаписывать существующие файлы
AllowOverwrite            on

# куда делать chroot
DefaultRoot                /www/

DefaultRoot ~

TransferLog             /var/log/proftpd/xferlog
SystemLog               /var/log/proftpd/proftpd.log
UseReverseDNS             off

<IfModule mod_quotatab.c>
QuotaEngine off
</IfModule>

<IfModule mod_ratio.c>
Ratios off
</IfModule>

<IfModule mod_delay.c>
DelayEngine on
</IfModule>

<IfModule mod_ctrls.c>
ControlsEngine        off
ControlsMaxClients    2
ControlsLog           /var/log/proftpd/controls.log
ControlsInterval      5
ControlsSocket        /var/run/proftpd/proftpd.sock
</IfModule>

<IfModule mod_ctrls_admin.c>
AdminControlsEngine off
</IfModule>

<Global>
RootLogin off
</Global>

RequireValidShell    off
# файл для авторизации пользователей
AuthUserFile        /etc/proftpd/ftpd.passwd

Всё, сервер готов к работе ;-).

P.S - ProFTPD Version 1.3.3a

Источник статьи