Итак, мне удалось настроить 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] Однако, когда пользователь входит в систему и put
s файл, загруженный файл получает разрешения, которые у него были изначально (я тестирую, используя 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. Что мне не хватает?