SSHD配置检查bash脚本
问题描述:
我目前正在做一个简单的安全审计脚本,它将打印每个配置不匹配的OK /错误。 情景是未来 - 例如,对于sshd_config中我已经把未来如果情况:SSHD配置检查bash脚本
if [ "`grep -E ^Protocol /etc/ssh/sshd_config`" == "Protocol 1" ]; then
echo "Protocol should be set to 2";
fi
的问题是 - 如果什么有一些变量及其值之间的一个以上的空间? (协议2或PermitRootLogin否,例如); /*s
,/s
和类似的技巧没有帮助。
有没有人有一个样本来检查bash脚本中的SSHD配置以在这里发布案例? 在此先感谢!
答
grep的-E
选项将其放入扩展的正则表达式模式中。所以,你可以使用扩展正则表达式(^Protocol +1
意味着开始Protocol
线,随后1个或多个空格,然后性格1
):
if grep -Eq '^Protocol +1' /etc/ssh/sshd_config; then
echo "Protocol should be set to 2";
fi
[yY]
意味着字符y
或Y
:
if grep -Eq '^PermitEmptyPasswords +[yY][eE][sS]' /etc/ssh/sshd_config; then
echo "PermitEmptyPasswords should be set to no";
elif grep -Eq '^PermitEmptyPasswords +[nN][oO]' /etc/ssh/sshd_config; then
echo "PermitEmptyPasswords meets requirements";
fi
和许多其他有趣的功能。备注:
- 您应该考虑在
sshd_config
文件中有多个匹配行的情况。 -
-q
grep选项禁止打印匹配的行。如果找到了匹配的行,grep只会以状态0退出,否则状态为1(未找到)或2(错误)。 -
if
语句后面可以紧跟一个要执行的命令列表。如果列表的退出状态为0,则采取then
分支。在我们的案例中,列表只是grep
。
答
试试这个:
if [[ $(cat /etc/ssh/sshd_config | awk '/^Protocol/{print $2}') != 2 ]]; then
echo "Protocol should be set to 2"
fi
答
使用grep得到协议2行。
然后取出协议1线,其可包括2作为协议2,1
这样最后的散列应该排除。最后回显需要的字符串。
在grep的加入-i在grep命令不区分大小写
grep -i "Protocol 2" /etc/ssh/sshd_config | grep -v "#"|grep -v "Protocol 1"|| echo "Protocol 2 is needed"
如何把案例Yes和No(例如PermitEmptyPasswords)呢? 例如: if grep -Eq'^ PermitEmptyPasswords + yes'/ etc/ssh/sshd_config;那么 回声“价值不符合要求”; 其他回声“价值确实符合要求”
@Kristian将此添加到我的答案。试试也许找到扩展正则表达式的文档,这是一个非常有用的知识。 –
感谢您的提示,我是脚本编写新手,所以有些程序现在还不清楚1/1。 –