目标:仅 sftp/scp 访问,无需 linux 用户。
我想为 10 个人提供 10 个 sftp/scp 目录。我们称之为“虚拟账户”
我不想为每个用户创建 Linux 用户。
我想创建一个 Linux 用户 (backup_user)。他的主目录中将有 10 个目录。每个“虚拟帐户”一个目录。
每个虚拟账户只能看到自己的文件,而看不到其他虚拟账户的文件。
我想使用这里提供的解决方案:https://serverfault.com/a/88864/90324
简而言之,authorized_keys 文件中将有 10 行:
~backup_user/.ssh/authorized_keys:
no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty,command=\
"scp -v -r -d -t ~/CONTENT" ssh-rsa AAAAMYRSAKEY...
我可以通过 python 脚本来改进这一点,而不用硬编码的“scp -v ...”。
我想支持 scp 和 sftp。
有没有办法 chroot 来确保每个虚拟账户都无法逃脱?
顺便说一句:使用 authorized_keys 和“强制命令”的想法只是我目前的策略。如果有更好的方法来实现总体目标,请告诉我 :-)
我们正在运行 OpenSSH 服务器。如果可能的话,我愿意坚持使用它。
更新
我们找到了一个不同的解决方案:http。我们开发了一个小型通用的文件 http 上传器:https://github.com/guettli/tbzuploader欢迎反馈
答案1
这应该是一条评论,但是有点长。
您未能充分描述您的目标。虽然我可以做出一些推断,但将其推断为提案是徒劳的。
虽然有一些工具可以让你创建独立于底层用户的服务器,但这些工具设置起来很麻烦,并且与其他功能集成的能力受到限制。
设置 10 个用户并使用基于密钥对的登录名且没有 shell 访问权限会简单得多。但您唯一明确说明的限制是“不想为每个用户创建 Linux 用户” - 但您没有解释原因。另一方面,您声明您想使用一种基于在操作系统中配置用户的方法。
答案2
我认为您想要的(不创建本地用户的访问)无法通过 sshd 实现。
相反,您可以将 proftpd 与虚拟用户(例如来自 MySQL 数据库)+ SFTP/SCP 模块一起使用。
答案3
您要做的事情有点棘手。如果您不想使用自制的 chroot-shoot-in-your-foot 工具,则必须坚持使用 ssh 内置 chroot,而该工具又被限制在用户的主目录 (%h)= 或您可以在 sshd_config 中指定的任何其他内容中。至少我没有找到在 authorized_keys 文件中设置 chroot 目录的方法,这将解决这个问题。
因此,这完全取决于您所说的“我不想为每个用户创建 Linux 用户”是什么意思。如果您只是不想要 /etc/passwd 条目,那么您可能使用 PAM 为您验证“虚拟”用户的方法之一。您可以使用数据库(当然,对于 10 个用户来说有点过头了),使用额外的类似 passwd 的文件,berkley db 文件,例如这些虚拟用户可能仅限于服务 sftp 或您想要的任何内容。如果他们的虚拟主目录设置为您想要的用户 backup_user 的子目录,也许这就是您想要的。嗯 - 差不多。如果您在 authorized_keys 中指定命令,sftp 将要求输入密码 - 我想您不想要那样。
如果您的 10 个用户中的每一个都使用 2 个 ssh 密钥,一个用于 scp,一个用于 sftp,那么这将有效。但是,您必须模仿远程 scp 行为,在 authorized_keys 文件中指定一个脚本,该脚本读取环境变量 SSH_ORIGINAL_COMMAND。无论如何,有点麻烦。
答案4
ssh不支持虚拟用户,可以通过PAM实现,但是需要写代码。
如果你可以添加本地用户,你可以尝试这个工具
https://github.com/pymumu/jail-shell
它将用户限制在特定的目录中。