Установка и настройка ProFtpd на примере Debian Squeeze
В этой статье описывается установка и настройка ProFtpd - мощного и очень популярного ftp сервера. Устанавливать будем на Debian Squeeze. Настроим разграничение прав на директории, чтобы каждый пользователь получил доступ только в собственную папку и не имел доступ в чужие, такие ограничения нам потребуются для нашего хостинга, о котором я напишу в следующих статьях.
Мы не будем использовать системные учетные записи, вместо этого будем заводить виртуальных ftp-пользователей, учетные записи которых будут храниться в текстовом файле.
Устанавливаем proftpd
apt-get install proftpd
выбираем тип запуска "standalone" (самостоятельно)
Настраиваем ProFtpd для работы с виртуальными пользователями:
в конец конфигурационного файла /etc/proftpd/proftpd.conf добавим следующую строку:
AuthUserFile /etc/proftpd/ftpd.passwd
здесь говорим, что для авторизации пользователей используется файл ftpd.passwd
эта комманда создаст пользователя "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.
Теперь нам небходимо завести третьего пользователя, который не будет иметь никаких ограничений, своего рода вэб-мастер или админ, кому как нравится:
Для админа домашней директорией будет /www/, так же для него мы указали shell.
И в итоге cоздадим файл .ftpaccess в каталоге /www/:
touch /www/.ftpaccess
И занесем туда следующие строки:
<Limit READ WRITE DIRS>
Order deny,allow
AllowUser admin
</Limit>
Этот файл запрещает доступ к каталогу /www/ всем, кроме пользователя admin, если нужно дать доступ еще кому-то, то через запятую добавьте пользователя, предварительно создав для него учетную запись, как было показанно выше.
Теперь нам необходимо обеспечить защищенную передачу данных между клиентом и нашим сервером, для этого используем SSL.
Сначала сгенерируем сертификат:
Country Name (2 letter code) [AU]: RU
State or Province Name (full name) [SomeState]: 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
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