AllInfo
Main: Info Blog Temp Mail


unix 2013-06-15 22-56-02

Установка и настройка 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

3.12.34.211 / 2024-12-22_20-38-54 UTC.