我想授予某人在我的 Ubuntu 网络服务器上托管一些简单文件的权限。这是针对 IRC 日志记录机器人的。我想给他们无密码的 ssh/scp/rsync/sftp 访问权限。但是我希望能够限制他们可以做什么,换句话说,我不想给他们一个完整的 ssh shell。我还希望能够限制他们可以占用的磁盘空间量,因此他们总共不能使用超过(比如)200MB 的我的磁盘。
不需要但可能很好的奖励选项:限制他们可以上传的文件类型?(可能是 Mime 类型?)当他们上传文件时记录?限制他们的带宽?
我有哪些选择?
在 Ubuntu/Debian 上,您可以安装scponly
shell 以将它们限制为仅 scp/sftp。只需安装软件包并将其外壳更改为/usr/bin/scponly
:
sudo aptitude install scponly sudo usermod -s /usr/bin/scponly 用户名
磁盘空间问题可能最好通过文件系统配额来解决。不幸的是,我对他们的经验很少。
如果您想变得更高级(限制文件类型等),您可能需要编写自己的脚本来验证从客户端传递的命令。最简单的脚本是一个 shell 脚本,它执行类似于下面的测试:
if [[ $SSH_ORIGINAL_COMMAND = "scp -f *txt" ]] 然后 执行 $SSH_ORIGINAL_COMMAND 菲
这将允许下载 .txt 文件。快速测试表明文件名在发送时没有作为 scp 命令的一部分传递。所以在这种情况下可能是不可能的。
该脚本将被设置为用户密钥的强制命令。(authorized_keys 中的 ``command="blah"'' 字段。)它也可以设置为 sshd_config 中匹配组的“ForceCommand”选项,如下所示:
匹配组 scponly ForceCommand /usr/local/sbin/scpwrapper
然后将受限制的用户添加到“scponly”组。
编辑:根据要求,这是我用来强制执行 rsync-only 访问的脚本:
#!/bin/bash # # 验证 rsync 命令是否是合法的 rsnapshot 命令。 # 需要 >= bash 3.x # #本比彻勒 # 6/4/07 # 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 if [[ $SSH_ORIGINAL_COMMAND =~ $r ]] 然后 执行 $SSH_ORIGINAL_COMMAND 别的 echo "无效的 rsync 命令。" 菲
将该脚本用作强制命令(通过 ~/.ssh/authorized_keys 中的“command=”或如上所述在 sshd_config 中使用“Match”块),它将拒绝除 rsync 命令之外的所有内容。稍微调整一下,就可以只接受特定的 rsync 命令。
归档时间: |
|
查看次数: |
2493 次 |
最近记录: |