Назад | Перейти на главную страницу

Директива proftpd CreateHome не работает при использовании SFTP

Я использую ProFTPD Version 1.3.5e на Ubuntu 18.04 LTS сервер. Я пытаюсь настроить SFTP для работы так же, как FTP в моей конфигурации. В частности, я хочу сначала использовать pam-mysql для аутентификации, а затем метод аутентификации пароля. Аутентификация работает правильно. Директива CreateHome - нет.

Когда я впервые отправляю FTP на свой сервер с новым пользователем, который существует только в базе данных MySQL, меня просят пройти аутентификацию. После того, как я предоставлю учетные данные, ProFTPD использует CreateHome директива и создаст каталог пользователя, если он не существует. После аутентификации пользователю разрешается сразу же загружать данные в новый каталог, не зная, что каталог не существовал до первой аутентификации. Это очень гладко и хорошо работает.

Я хочу воспроизвести это поведение при использовании SFTP. Но это не работает. я считать что у меня проверка подлинности работает правильно, потому что, когда я пытаюсь использовать нового пользователя, который находится только в базе данных MySQL, я не получаю ошибки аутентификации в журналах. Но я получаю сообщение об ошибке «Нет такого файла или каталога».

Я получаю сообщение об ошибке отказа в разрешении в командной строке клиента SFTP.

Вот записи журнала и конфигурации ProFTPD.

Журналы SFTP:

2020-06-11 18:18:49,843 ftp-server proftpd[13246] 0.0.0.0 (ftp-client[10.0.0.10]): SSH2 session opened.
2020-06-11 18:18:52,548 ftp-server proftpd[13246] 0.0.0.0 (ftp-client[10.0.0.10]): notice: unable to use DefaultRoot ~/ (resolved to '/home/ftpusers/btw-1-face/'): No such file or directory
2020-06-11 18:18:52,548 ftp-server proftpd[13246] 0.0.0.0 (ftp-client[10.0.0.10]): chroot to '~/' failed for user 'btw-1-face': No such file or directory
2020-06-11 18:18:52,548 ftp-server proftpd[13246] 0.0.0.0 (ftp-client[10.0.0.10]): unable to set DefaultRoot directory '~/'
2020-06-11 18:18:52,719 ftp-server proftpd[13246] 0.0.0.0 (ftp-client[10.0.0.10]): SSH2 session closed.

Журналы FTP (корректно работают):

2020-06-11 19:20:43,262 ftp-server proftpd[14081] ftp-client[10.0.0.10]: FTP session opened.
2020-06-11 19:20:56,883 ftp-server proftpd[14081] ftp-client[10.0.0.10]: USER btw-1-face: Login successful.
2020-06-11 19:21:16,608 ftp-server proftpd[14081] ftp-client[10.0.0.10]: FTP session closed.
2020-06-11 19:21:23,489 ftp-server proftpd[14090] ftp-client[10.0.0.10]: FTP session opened.
2020-06-11 19:21:32,304 ftp-server proftpd[14090] ftp-client[10.0.0.10]: USER btw-1-face: Login successful.
2020-06-11 19:21:42,778 ftp-server proftpd[14090] ftp-client[10.0.0.10]: FTP session closed.

Повторите попытку SFTP после успешной попытки FTP.

2020-06-11 19:26:12,986 ftp-server proftpd[14149] 0.0.0.0 (ftp-client[10.0.0.10]): SSH2 session opened.
2020-06-11 19:26:15,415 ftp-server proftpd[14149] 0.0.0.0 (ftp-client[10.0.0.10]): USER btw-1-face: Login successful
2020-06-11 19:26:15,549 ftp-server proftpd[14149] 0.0.0.0 (ftp-client[10.0.0.10]): USER btw-1-face: Login successful.
2020-06-11 19:26:31,243 ftp-server proftpd[14149] 0.0.0.0 (ftp-client[10.0.0.10]): SSH2 session closed.

В приведенном выше журнале тот же пользователь мог загружать файлы через SFTP. НО ТОЛЬКО ПОСЛЕ ProFTPD CreateHome директива работала в конфигурации FTP.

Вот файл конфигурации ProFTPD:

#-----------------------------------------------------------------------
# Server Configuration: those parameters cannot be elsewhere
#-----------------------------------------------------------------------
ServerName                      "generic ftp daemon"
ServerType                      inetd
#ServerType                     standalone
UseIPv6                         off

SystemLog                       /var/log/proftpd/proftpd.log
# Time stamp - IP Address - Protocol - User Name - UID - Filename - File Size - Response Time in ms - x-fer Time in Seconds - x-fer Status - Reason for failure
LogFormat                       custom          "%{iso8601} %a %{protocol} %u %{uid} %f %{file-size} %R %T %{transfer-status} %{transfer-failure}"
LogFormat                       authentication  "%{%F %T}t %P  from: %a to: %{protocol}:%H:%p  user: %U       msg: %S"
LogFormat                       transfer        "%{%F %T}t %P  from: %a to: %{protocol}:%H:%p  user: %U       file: %f        cmd: %m %J"
ExtendedLog                     /var/log/proftpd/custom.log READ,WRITE custom
TransferLog                     /var/log/proftpd/xferlog
ScoreboardFile                  /local/proftpd/var/proftpd.scoreboard

TLSProtocol                     SSLv3 TLSv1

Include                         /etc/proftpd/modules.conf
#Include                        /etc/proftpd/tls.conf
#Include                        /etc/proftpd/virtuals.conf
#Include                        /etc/proftpd/ldap.conf
Include                         /etc/proftpd/sql.conf
Include                         /etc/proftpd/conf.d/

<Global>
        DefaultRoot                     ~
        Umask                           022  022
        User                            proftpd
        Group                           nogroup
        AllowOverwrite                  on

        IdentLookups                    off
        AllowForeignAddress             on
        DeferWelcome                    off
        MultilineRFC2228                on
        DefaultServer                   on
        ShowSymlinks                    off
        TimeoutNoTransfer               600
        TimeoutStalled                  600
        TimeoutIdle                     1200
        DisplayLogin                    welcome.msg
        DisplayChdir                    .message true
        ListOptions                     "-l"
        DenyFilter                      \*.*/
        CreateHome                      on dirmode 750
        RequireValidShell               off
        Port                            21
        PassivePorts                    49152 65534
        MaxInstances                    50
        #AuthOrder                      mod_auth_pam.c* mod_auth_unix.c
        #UseLastlog                     on
</Global>

<Limit SITE_CHMOD>
        DenyAll
</Limit>

<IfModule mod_dynmasq.c>
        DynMasqRefresh          28800
</IfModule>

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

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

<IfModule mod_delay.c>
        DelayEngine             off
</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>

# The SFTP configuration
  <IfModule mod_sftp.c>
    <VirtualHost 0.0.0.0>
        SFTPEngine              on
        Port                    2222
        SFTPAuthMethods         password
        RequireValidShell       off
        SFTPLog                 /var/log/proftpd/sftp.log
        Include                 /etc/proftpd/sql.conf
        SFTPHostKey             /etc/ssh/ssh_host_rsa_key
        SFTPHostKey             /etc/ssh/ssh_host_dsa_key
        SFTPAuthorizedUserKeys  file:/etc/ssh/authorized_keys
        SFTPCompression         delayed
        DefaultRoot             ~
        CreateHome              on dirmode 750
        AllowForeignAddress     on
    </VirtualHost>
  </IfModule>

Возникает вопрос, почему CreateHome работает по FTP, а не по SFTP? А как поправить, чтобы под обеими работала?

Спасибо!