SFTP 用户有哪些规则?

SFTP 用户有哪些规则?

我有一个通过 API 进行身份验证的 FTP 服务器,并且用户文件夹位于:

/home/ftpusers/files/<username>

一些用户请求使用 SFTP,而且由于我已经有将文件放入用户目录中的流程,所以我认为我可以为用户创建帐户。

useradd -g sftpgroup -d /home/ftpusers/files/username/ -s /sbin/nologin username
mkdir -p /home/ftpusers/files/username/.ssh
chown -R username:ftpgroup /home/ftpusers/files/username
chmod -R 770 /home/ftpusers/files/username
echo "ssh-rsa user key" > /home/ftpusers/files/username/.ssh/authorized_keys
chown username:sftpgroup /home/ftpusers/files/username/.ssh
chmod 700 /home/ftpusers/files/username/.ssh
chown username:sftpgroup /home/ftpusers/files/username/.ssh/authorized_keys
chmod 600 /home/ftpusers/files/username/.ssh/authorized_keys

ftpgroup 是为了让系统帐户可以将文件放置在用户文件夹中,sftpgroup 是将此用户锁定为仅使用 SFTP:

Match Group sftpgroup
ForceCommand internal-sftp
AllowTCPForwarding no
X11Forwarding no

不幸的是,这不起作用。没有有用的错误,只是:

Permission denied (publickey)

但是,如果我以更标准的方式在 /home/ 目录中创建用户,它确实可以正常工作

知道原因吗?我知道 chroot 有很多权限限制。这是这样的吗?

添加了 namei 输出:当然可以:

namei -l /home/ftpusers/files/jmandel/.ssh
f: /home/ftpusers/files/jmandel/.ssh
dr-xr-xr-x root    root      /
drwxr-xr-x root    root      home
drwxrwx--- ftpuser ftpgroup  ftpusers
drwxrwx--- ftpuser ftpgroup  files
drwxrwx--- jmandel ftpgroup  jmandel
drwx------ jmandel sftpgroup .ssh

下面标记的答案在评论线程中有很好的信息

答案1

sshd_config将以下指令添加到您的文件并重新启动ssh

AuthorizedKeysFile /home/ftpusers/files/%u/.ssh/authorized_keys .ssh/authorized_keys

这将告诉 ssh 守护进程在哪里寻找公钥。

authorized_keys我个人很长时间都不使用它,而是使用
AuthorizedKeysCommand调用程序查找 sqlite 数据库用户密钥并将其发回进行身份验证。这样我就可以防止用户/黑客使用他们自己的密钥,并且这种配置不会泄露公钥所在的位置。

答案2

是不是真的

echo "ssh-rsa user key" > /home/ftpusers/files/username/.ssh/authorized_keys

authorized_keys包含允许以此用户 ID 登录的用户的公钥,因此对于您创建的每个用户 ID,公钥都是不同的。理论上,用户会生成自己的公钥/私钥对,并将公钥提供给您。当然,您可以自己生成该对,并将私钥部分提供给他们,但如果发生任何不好的事情,他们可以声称这是其他人使用他们的私钥造成的。

相关内容