bash - 如何在 Bash/sh 中将用户帐户名称和目录分配给数组?
问题描述
我正在尝试在 Red Hat Enterprise Linux (RHEL) 系统上为 STIG 测试创建一个漏洞 ID V-72017 的 bash 脚本。我的任务是确保所有用户权限的八进制值不超过 0750
我有能力通过使用来收集用户的权限八进制值
stat -c "%a" /home/$username
我正在尝试通过使用命令(输出系统上每个用户的名称)创建一个 $username (或目录)数组:
eval getent passwd {$(awk '/^UID_MIN/ {print $2}' /etc/login.defs)..$(awk '/^UID_MAX/ {print $2}' /etc/login.defs)} | cut -d: -f1
我计划将此输出映射到一个数组,可能是一个while循环。这是一个可能的解决方案吗?
来自以下的语法错误:
(eval getent passwd {$(awk '/^UID_MIN/ {print $2}' /etc/login.defs)..$(awk '/^UID_MAX/ {print $2}' /etc/login.defs)} | cut -d: -f1) | while read -r line
do
myarray+=line
stat -c "%a" /home/$line
done
所需的输出案例 1:
Users:
rob
bob
Exit Fail: bob has permission octal value 0755.
所需的输出案例 2:
Users:
rob
bob
Exit Pass: All users have permission octal value of 0750 or less.
解决方案
您已找到所有登录用户。正则表达式可用于检查主目录的权限。
echo "Users: "
(eval getent passwd {$(awk '/^UID_MIN/ {print $2}' /etc/login.defs)..$(awk '/^UID_MAX/ {print $2}' /etc/login.defs)} | cut -d: -f1) | while read -r line
do
echo $line
perm=$(stat -c "%a" /home/$line)
[[ "$perm" =~ [0-7][0,1,4,5][0] ]] || echo "Exit fail: $line has permission octal value $perm"
done
也许您想调整输出形式。
推荐阅读
- python - 规范化多值列
- python - 如何在 docker 中为 psycopg2 安装 libpq-dev
- python - 为什么我通过 sklearn 获得的线性回归得分低,但来自 statsmodels 的 R 平方值却高?
- c++ - 如何使用 CRTP 创建少量对象?
- direnv - 无法使用 direnv 覆盖 PS1
- python - 如何用字符串进行数学运算?
- python - 如何在Python(Jupyter Notebook)中修复'tensorflow:Saver未创建,因为图中没有要恢复的变量'
- javascript - 我怎样才能删除这个空格?(HTML,CSS)
- python - Pandas-如何在csv文件中逐行保存不同列中不同值的频率(包括0个频率)
- acumatica - 在单个网格字段中显示 [PXDBDate] 的日期和时间