使用 Linux 和 Openssh:
用户可以使用 ssh 连接到其密钥位于 authorized_keys 列表中的服务器。其公钥前面带有command="command..."
强制执行特定命令(非 shell):
command="/path/to/somescript...",no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-user-rc ssh-rsa AAAff...................
- 用户有没有什么办法可以绕过这个命令?
- 那么 sftp 怎么样?使用强制命令(不是 shell)时 sftp 可以工作吗?
答案1
如果允许的命令集包括 sftp 守护程序(或 internal-sftp),则将允许使用 SFTP。但是,如果您在 authorized_keys 文件中设置强制命令,并且用户具有 sftp 访问权限,则无需额外工作,他们就可以将该文件替换为不受您定义的限制的文件。这当然适用于用户可以指示修改该文件的任何应用程序(有意或通过欺骗它)。更好的选择可能是在主 sshd_config 中按用户或组进行限制,可能使用 ChrootDirectory。
答案2
最常见的威胁是允许他们使用能够执行管理员未曾想到的事情的命令。例如,CVS 和 SVN 允许运行提交前/提交后脚本。如果用户可以修改提交后脚本,他就可以运行自己的命令。
答案3
您可以在对 authorized_keys 文件进行必要的输入后,使用 chattr 在 .ssh 文件夹和 authorized_keys 文件上设置属性,这样任何人都无法进行任何更改甚至覆盖 .ssh 文件夹甚至 authorized_keys 文件。
您可以进行递归聊天:
chattr -R +i .ssh