Debian:SSH:“PermitRootLogin=forced-commands-only”停止工作

Debian:SSH:“PermitRootLogin=forced-commands-only”停止工作

我有几个运行 Debian Lenny 的服务器。

就在最近我发现PermitRootLogin=强制命令ssh 指令,它允许我使用 ssl 密钥以 root 身份运行脚本 rsync,而无需启用更通用的 root ssh 访问。

然而,上周它停止了工作 - 它出现在我所有的服务器上 - 我不知道为什么。

一切继续顺利进行允许Root登录=是,但我更愿意阻止 root 登录 - 尤其是通过密码登录。

它停止工作的那天,我们重新配置了其中一台交换机上的某些端口(后来我们又恢复了),但我看不出这会影响到它,因为在将 PermitRootLogin 设置为是的情况下它仍然可以工作。

我如何诊断为什么强制命令指令显然停止工作了?

答案1

“PermitRootLogin forced-commands-only” 要求所有通过 SSH 以 root 身份进行的连接都需要使用公钥认证,并且命令与该密钥相关联(如“validate-rsync”)。

如果您想以 root 身份登录但只使用密钥,请使用:

PermitRootLogin = without-password

要将 rsync 限制到定义的 ssh-key,您可以在 authorized_keys 中指定:

from="<ip>",command="/usr/local/sbin/validate-rsync" ssh-dss AAAAZ5Hbl......

并将此包装器保存到:/usr/local/sbin/validate-rsync

#!/bin/sh 

case "$SSH_ORIGINAL_COMMAND" in 
*\&*) 
echo "Rejected" 
;; 
*\(*) 
echo "Rejected" 
;; 
*\{*) 
echo "Rejected" 
;; 
*\;*) 
echo "Rejected" 
;; 
*\<*) 
echo "Rejected" 
;; 
*\`*) 
echo "Rejected" 
;; 
*\|*) 
echo "Rejected" 
;; 
rsync\ --server*) 
$SSH_ORIGINAL_COMMAND 
;; 
*) 
echo "Rejected" 
;; 
esac 

rsync 附带了一个稍微复杂一些的脚本来执行相同的操作, http://www.samba.org/ftp/unpacked/rsync/support/rrsync

答案2

如果 rsync 可以以 root 身份登录,那么任何人都可以:对于正在敲击的服务器来说,这没有任何区别。我相信这要么是实验性的/黑客行为,要么他们只是意识到它并不比“是”更安全。

我建议您禁用 root 的密码验证(例如,完全删除密码并sudo在需要时使用)并依赖密钥验证方法。

相关内容