如何授予某人 ssh 访问权限以远程上传文件?

如何授予某人 ssh 访问权限以远程上传文件?

我想授权某人在我的 Ubuntu 网络服务器上托管一些简单文件。这是为 IRC 日志机器人准备的。我想给他们无密码的 ssh/scp/rsync/sftp 访问权限。但是我想限制他们可以做什么,换句话说,我不想给他们一个完整的 ssh shell。我还想限制他们可以占用的磁盘空间量,这样他们总共不能使用超过(比如说)200MB 的磁盘空间。

虽然不是必需的但可能很有用的附加选项:限制他们可以上传的文件类型?(可能是 Mime 类型?)上传文件时记录日志?限制带宽?

我有什么选择?

答案1

在 Ubuntu/Debian 上,你可以安装scponlyshell 以将它们限制为仅使用 scp/sftp。只需安装软件包并将其 shell 更改为/usr/bin/scponly

sudo aptitude 安装 scponly
sudo usermod -s /usr/bin/scponly 用户名

磁盘空间问题可能最好通过文件系统配额来解决。不幸的是,我对此没有什么经验。

如果您想要更高级的功能(限制文件类型等),您可能需要编写自己的脚本来验证从客户端传递的命令。最简单的脚本是执行类似以下测试的 shell 脚本:

如果 [[ $SSH_ORIGINAL_COMMAND = "scp -f *txt" ]]
然后
   执行$SSH_ORIGINAL_COMMAND

这将允许下载 .txt 文件。快速测试表明,文件名在发送时不会作为 scp 命令的一部分传递。因此,在这种情况下可能是不可能的。

该脚本将被设置为用户密钥的强制命令。(authorized_keys 中的“command="blah"”字段。)它还可以设置为 sshd_config 中 Match 组的“ForceCommand”选项,如下所示:

匹配组 scponly ForceCommand /usr/local/sbin/scpwrapper

然后将需要限制的用户添加到“scponly”组。

编辑:根据要求,这是我用来强制执行仅 rsync 访问的脚本:

/bin/bash #!/bin/bash
#
# 验证 rsync 命令是否是合法的 rsnapshot 命令。
# 需要 >= bash 3.x
#
# 本·比希勒
# 2007年6月4日

# rsync 需要以“服务器”模式运行。
re_server ='rsync --server'

# 匹配 -x 和 --word 选项
re_options=' +-{1,2}[[:alpha:]-]+'

# 匹配合法路径
re_paths=' +[-[:alnum:]_./]+'

# 构建完整的正则表达式
r="^${re_server}(${re_options})+(${re_paths}){2}$"

回显 $SSH_ORIGINAL_COMMAND >> ssh_log

如果 [[ $SSH_ORIGINAL_COMMAND =~ $r ]]
然后
        执行$SSH_ORIGINAL_COMMAND
别的
        回显“无效的 rsync 命令。”

将该脚本用作强制命令(通过 ~/.ssh/authorized_keys 中的“command=”或使用 sshd_config 中的“Match”块,如上所述),它将拒绝除 rsync 命令之外的所有内容。只需稍加调整,就可以让它只接受特定的 rsync 命令。

答案2

一个可能的解决方案是使用 ssh 虚拟 shell 将它们 chroot-jail 起来。

http://www.ssh.com/support/documentation/online/ssh/adminguide-zos/53/ssh-dummy-shell.html

http://en.wikipedia.org/wiki/Chroot_jail

虽然我自己没有这样做过,但我以前曾见过在这种情况下成功实施这种方法。

答案3

SSH 提供了一种创建密钥对的机制,该机制可以限制为单个命令或一组命令。请参阅此文章Linux杂志网站好文章介绍了如何创建专用 ssh 密钥以用于脚本和 cron 作业等。这还可以应用于让用户能够无密码访问服务器并远程运行特定命令。

stackoverflow 问题还提供了有关如何执行 lj 文章中讨论的相同操作的一些很好的例子。具体来说,您使用 authorized_keys 文件添加允许访问的密钥,但通过在 authorized_keys 文件的某个字段中包含命令来限制这些密钥。

答案4

我无法让 bash 脚本运行并正确清理 rsync 输入,也许我错过了什么,相反,我发现了一个名为授权程序

这以更复杂的方式实现了相同的功能,但它更进一步,还允许您加强对 IP 的防御。

相关内容