我有几个运行 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
在需要时使用)并依赖密钥验证方法。