题 自定义Openssh Shell


环境是Ubuntu Server 12.04

我想在服务器上创建一个用户,该用户只能ssh到一个在日志文件上运行tail -f的shell,并在程序结束后关闭会话(ctrl + c)。

有没有办法实现这个目标?


8
2017-10-10 02:20






答案:


要迂腐,它不会是ctrl + c,而是 SIGHUP (更接近ctrl + d)杀死了应用程序。

您可以在用户的​​shell中基本上放置任何内容 /etc/passwd。只需替换用户passwd行的默认值(可能 /bin/bash)与另一个程序。该程序可以是一个脚本,例如 /usr/bin/tail_log_file,使用这些内容,由root:root拥有,使用umode 0755:

#!/bin/rbash
tail -f /path/to/logfile

您可以使用除rbash之外的某些解释器,但建议在这种情况下使用受限制的shell。

要非常迂腐,你应该添加脚本的路径 /etc/shells,但我通常觉得无论如何都有效。

还要记住,用户可能会将脚本放在后台,或者使用一些选项(ssh username@host bash)并仍然获得一个壳。如果您想以这种方式限制用户,那么良好的文件系统权限是唯一真正的解决方案。


8
2017-10-10 02:26



效果很好,非常感谢您的快速准确回复。 - Ablue
你想要添加东西的唯一原因 /etc/shells 是允许有其他东西作为shell的用户将shell设置为this;超级用户(root)总是可以将任何人的shell改为他们想要的任何东西。 - Jonathan Callen
要添加@JonathanCallen所说的内容:添加该脚本实际上是一个安全漏洞 /etc/shells 因为这将允许用户更改他的shell(因为 /usr/bin/tail_log_file 然后被认为是“不受限制的外壳”)! - Joachim Sauer
好的我会删除。 - Ablue
那太复杂了;强制命令(请参阅@tink的答案)是这样做的方法。 - Martin Schröder


如果您乐意使用基于密钥对的身份验证,请记住ssh强制命令。

man authorized_keys
/command=

9
2017-10-10 02:30





您可以配置ssh以在使用公钥身份验证登录时运行您选择的命令。为此,生成一对密钥:

djs@sardinia:~$ ssh-keygen -f restricted-key 
Generating public/private rsa key pair. 
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in restricted-key. 
Your public key has been saved in restricted-key.pub. 
The key fingerprint is: b1:8f:26:47:c2:c5:f2:8d:ed:a0:c4:bd:9a:30:9d:08 djs@sardinia 
[...]

restricted-key.pub 包含适合放入用户的行 ~/.ssh/authorized_keys 文件:

ssh-rsa AAAA...UDz47Nl djs@sardinia

但是您可以向此添加命令,当使用密钥登录时,ssh将运行该命令:

command="tail -f /my/interesting/file" ssh-rsa AAAA...UDz47Nl djs@sardinia

然后用户可以使用ssh到机器 ssh -i restricted-key


2
2017-10-17 09:13