![非特权用户在 Shell 脚本中执行特权命令](https://linux22.com/image/1024351/%E9%9D%9E%E7%89%B9%E6%9D%83%E7%94%A8%E6%88%B7%E5%9C%A8%20Shell%20%E8%84%9A%E6%9C%AC%E4%B8%AD%E6%89%A7%E8%A1%8C%E7%89%B9%E6%9D%83%E5%91%BD%E4%BB%A4.png)
a=$(df -h | grep ^/dev | awk '{print $6}')
for i in $(find $a -xdev \( -perm -4000 -o -perm -2000 \) -type f | awk '{print "-a always,exit -F path=" $1 " -F perm=x -F auid>='"$(awk '/^\s*UID_MIN/{print $2}' /etc/login.defs)"' -F auid!=4294967295 -k privileged" }' | grep -o privileged | uniq | wc -l ); do
if [ "$i" != '1' ]; then
echo "{\"privilegecmd_4111_audit\":\"FAILED\"}"
else
echo "{\"privilegecmd_4111_audit\":\"PASSED\"}"
fi
done
对于我的输入 a 是 / 和 /boot,这里我的疑问是,在我的 /boot 分区中,我删除了特权,在我运行 shell 脚本之后它通过了,我需要每个分区都具有特权意味着它应该通过,否则如果任何文件不具有特权,它应该处于失败状态。
有谁能帮忙解决这个问题。
答案1
关于如何设计循环的建议。
#!/bin/bash
while read -r; do
(($REPLY > 0)) \
&& echo "condition passed" \
|| echo "condition failed"
done < <( \
find . -mindepth 1 -perm -644 -user bac0n -group bac0n -printf 1\\n -o -printf 0\\n \
)