Установка proftpd под Debian

Не претендую на звание крутого линуксоида.
Всего лишь расскажу о решении типичной задачи.
Необходимо было поднять обычный Apache+MySql+php+ftp сервер.
Иными словами на каждый сайт заводится виртуальный хост апача, и выдается логин-пароль на ftp.

С настройками апача и мускула, проблем не возникло. А вот с FTP сервером пришлось поебаться знатно.

Начался сей романтический вечер с того, что vsftpd поставить не удалось. Не хочу и не могу разбирать причины сего. Зла не хватает. Объектом для танцев с бубном стал proftpd.

Начало простое

#apt-get install proftpd

Шайтан-машина сама заводит юзверей и запускается.

Добавляем группу для FTP юзверей

#groupadd ftp

Создаем своего юзвера, даем ему доступ к директории с сайтом и запрещаем доступ в шел.

#useradd -d /var/mysite -m -g ftp -p qazwsx -s /bin/false mysite

/var/mysite – путь к директории с сайтом
Вместо qazwsx – наш пароль.

Запуск, перезапуск сервера:

#/etc/init.d/proftpd start|restart|stop

До этого момента все гладко.
Далее, обращаем внимание на ./etc/ftpusers
Там НЕ должно быть нашего пользователя mysite. Это список тех юзверей, которых на FTP не пускают.

Идем в /etc/proftpd/proftpd.conf

Когда я говорю «Идем», это означает, идем с помощью:

mc
#apt-get install mc
#mc
И вспоминаем детство и NortonCommander

Либо с помощью редактора vim
#vim в /etc/proftpd/proftpd.conf
В режиме редактирования, по окончанию, тупо набираем:

  • :q для выхода
  • :wq для сохранения и выхода

Первый подводный камень. Не смотря на настоятельные рекомендации советчегов на форумах поставить его в режиме standalone, делать этого не следует. По крайней мере для задачи такого типа.

ServerType inetd

И ниипет.

Далее на всевозможных хабрахи форумах идут советы как следует хранить пользователей в мускуле, сертификатах, уборной на потолке. Нам этого не нужно. Proftpd по-умолчанию использует /etc/passwd и /etc/group

На всякий случай.
Можно завести отдельные файлы в таком же формате, используя директивы:

AuthUserFile /config/ftp.passwd
AuthGroupFile /config/ftp.group

Но делать этого не надо.

Самая главная проблема, которая возникла передо мной: ftp сервер категорически отказывался авторизовать существующего пользователя.

[R] 530 Login incorrect.

Как сообщил мне гугл, не один я страдаю похожей херней.
Однако ответы матерых линуксоидов, звучат примерно так:
http://www.opennet.ru/openforum/vsluhforumID15/2243.html
Равно, как ответы моих друзей той же секты.

Линуксоиды – вы хамствующее снобье. Гореть Вам в аду.

Ответ на данный вопрос:
Кто-то с причудливой фантазией решил не пускать на фтп юзверей, у которых shell = /bin/false. Не положено тебе в шел, будь добр освободи фтп. Логику сего я так и не понял.

Итак. Добавляем директиву.

RequireValidShell off

Вся беда в ней.

Далее, отключаем нах IPv6

UseIPv6 off

Запираем юзера в домашней директории

DefaultRoot ~

И отключаем еще одно «чудо», именуемое PAM.
Отключаем не той командой, что написана в мануале (она не работает), а:

AuthPAM off

 

Усе. Сохраняемся и рестаруем.

#/etc/init.d/proftpd restart

Если что-то не получилось, текст моего конфига целиком.

#
# /etc/proftpd/proftpd.conf -- This is a basic ProFTPD configuration file.
# To really apply changes reload proftpd after modifications.
#

# Includes DSO modules
Include /etc/proftpd/modules.conf
# Set off to disable IPv6 support which is annoying on IPv4 only boxes.
UseIPv6 off

ServerName "Debian"
ServerType inetd
DefaultServer on

DeferWelcome off
DefaultRoot ~

RequireValidShell off

AuthPAM off
RequireValidShell off

TimeoutNoTransfer 600
TimeoutStalled 600
TimeoutIdle 1200

DisplayLogin welcome.msg
DisplayFirstChdir .message
ListOptions "-l"

DenyFilter \*.*/

# Port 21 is the standard FTP port.
Port 21

# In some cases you have to specify passive ports range to by-pass
# firewall limitations. Ephemeral ports can be used for that, but
# feel free to use a more narrow range.
# PassivePorts 49152 65534

# To prevent DoS attacks, set the maximum number of child processes
# to 30. If you need to allow more than 30 concurrent connections
# at once, simply increase this value. Note that this ONLY works
# in standalone mode, in inetd mode you should use an inetd server
# that allows you to limit maximum number of processes per service
# (such as xinetd)
MaxInstances 30

# Set the user and group that the server normally runs at.
User proftpd
Group nogroup

# Umask 022 is a good standard umask to prevent new files and dirs
# (second parm) from being group and world writable.
Umask 022 022
# Normally, we want files to be overwriteable.
AllowOverwrite on

# Uncomment this if you are using NIS or LDAP to retrieve passwords:
# PersistentPasswd off

# Be warned: use of this directive impacts CPU average load!
#
# Uncomment this if you like to see progress and transfer rate with ftpwho
# in downloads. That is not needed for uploads rates.
# UseSendFile off

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

<IfModule mod_tls.c>
TLSEngine off
</IfModule>

<IfModule mod_quota.c>
QuotaEngine on
</IfModule>

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

# Delay engine reduces impact of the so-called Timing Attack described in
# http://security.lss.hr/index.php?page=details&ID=LSS-2004-10-02
# It is on by default.
<IfModule mod_delay.c>
DelayEngine on
</IfModule>

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

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

Пы.сы. Еще раз:для снобов: гореть Вам в аду. Для тех, кто не понял прикола с мануалами яркий пример: http://www.proftpd.org/localsite/Userguide/linked/x535.html. Попробуй почитай называецо.