Как настроить ProFTPD как сервер только для SFTP с системными пользователями, аутентификацией PK и пользовательскими масками?

Итак, мне удалось настроить ProFTPD, чтобы разрешить системным пользователям вход по паролю. У меня две проблемы: umask и pk auth.

Include /etc/proftpd/modules.conf

UseIPv6             on
ServerName          "Debian"
ServerType          standalone
MultilineRFC2228    on
DefaultServer       on
Port                21
PassivePorts        49152 49407
MaxInstances        30
SystemLog           /var/log/proftpd/proftpd.log

<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>
    UseFtpUsers         on
    IdentLookups        off
    DeferWelcome        off
    ShowSymlinks        on
    TimeoutNoTransfer   600
    TimeoutStalled      600
    TimeoutIdle         1200
    DisplayLogin        welcome.msg
    DisplayChdir        .message true
    ListOptions         "-l"
    DenyFilter          \*.*/
    DefaultRoot         ~
    RequireValidShell   off
    User                proftpd
    Group               nogroup
    Umask               007 007
    AllowOverwrite      on
    # AuthOrder           mod_sql.c
    CreateHome          on
    TransferLog         /var/log/proftpd/xferlog

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

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

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

    <IfModule mod_xfer.c>
        MaxStoreFileSize    70 Mb
        HiddenStores        on
        DeleteAbortedStores on
    </IfModule mod_xfer.c>

    <Directory /htdocs/*/>
        Umask 0007
        <Limit MKD XMKD RMD XRMD SITE_CHMOD>
            DenyUser !ftpadmin
        </Limit>
    </Directory>
</Global>

Include /etc/proftpd/sftp.conf

и sftp.conf выглядит следующим образом

<IfModule mod_sftp.c>
    <VirtualHost $(hostname)>
        Port 23
        SFTPEngine on
        SFTPAuthorizedUserKeys file:/home/%u/.ssh/authorized_keys
        SFTPHostKey /etc/ssh/ssh_host_dsa_key
        SFTPHostKey /etc/ssh/ssh_host_rsa_key
        SFTPHostKey /etc/ssh/ssh_host_ecdsa_key
        SFTPCompression delayed
        SFTPLog /var/log/proftpd/sftp.log
    </VirtualHost>
</IfModule mod_sftp.c>

[umask] Однако, когда пользователь входит в систему и puts файл, загруженный файл получает разрешения, которые у него были изначально (я тестирую, используя OS X и Linux в качестве клиентов, так что это имеет смысл) . Я не тестировал чистое FTP-решение, но предпочел бы использовать SFTP.

[pk auth] Когда я пытаюсь пройти аутентификацию PK, клиент правильно предлагает правильный ключ и говорит

debug2: we sent a publickey packet, wait for reply
debug1: Server accepts key: pkalg ssh-rsa blen 535
debug2: input_userauth_pk_ok: fp SHA256:Eft1LIOozSylL20lfMc9gUdl3gKtd0zEdeyNtCb1p8Q

но затем заключает с

debug1: Authentications that can continue: password

что смущает меня до бесконечности. На стороне сервера у меня есть

no account for user 'sftpuser' found
sending userauth failure; remaining userauth methods: password

что забавно, потому что пользователь действительно существует (и может успешно выполнить вход с паролем). Я даже преобразовал свой ключ OpenSSH в формат RFC4716, который, по-видимому, предпочитает ProFTPD.

Я признаю, что в общей сложности у меня около 4 часов опыта работы с ProFTPD, но я прочитал все, что мог, и файлы конфигурации мне понятны. Все это работает в контейнере Docker. Что мне не хватает?


person Morpheu5    schedule 13.04.2016    source источник
comment
Stackoverflow предназначен для помощи в разработке программного обеспечения. Вам следует задать этот вопрос при сбое сервера или Unix и Linux. .   -  person Kenster    schedule 13.04.2016
comment
Как вы подключаетесь к серверу?   -  person Jakuje    schedule 13.04.2016
comment
@Kenster: ты прав, спасибо. Могу ли я перенести это сам? — Jakuje: любой sftp-клиент, например FileZilla или cli sftp.   -  person Morpheu5    schedule 14.04.2016


Ответы (1)


В отличие от FTP, загрузка SFTP часто содержит собственные разрешения как часть OPEN запроса SFTP. Чтобы SFTP-загрузки вели себя как FTP-загрузки, в отношении конфигурации ProFTPD (например, Umask) необходимо настроить mod_sftp на игнорирование разрешений на загрузку с помощью IgnoreSFTPUploadPerms SFTPOptions:

<IfModule mod_sftp.c>
  ...
  SFTPOptions IgnoreSFTPUploadPerms
  ...
</IfModule>

Что касается проблемы аутентификации с открытым ключом, настроенный вами SFTPLog должен иметь больше подсказок относительно того, в чем может быть проблема. Возможно, сконфигурированный файл не существует или не имеет необходимых разрешений? Имейте в виду, что ~/.ssh/authorized_keys часто используется OpenSSH, и формат этого файла отличается от того, что требуется ProFTPD. По этой причине я часто использую:

SFTPAuthorizedUserKeys file:~/.sftp/authorized_keys

то есть файл отличный от того, что хочет OpenSSH, в другом формате (RFC 4716), чтобы избежать возможной путаницы/коллизии.

Надеюсь это поможет!

person Castaglia    schedule 13.04.2016
comment
По некоторым причинам мне не хватало файла SFTPOptions. Кроме того, из-за опечатки авторизованные_ключи не заполнялись ключами… Я не могу вспомнить, сколько раз я писал ssh-keygen неправильно… (Я генерирую скрипт, преобразующий ключи OpenSSH в RCF4716, потому что они однострочные, поэтому их легче подключить в скрипт bash. В будущем я буду более изощренным :) Спасибо! - person Morpheu5; 14.04.2016