![是否有一个工具(!)可以列出为用户分配的 subuid 和 subgid 值?](https://linux22.com/image/36453/%E6%98%AF%E5%90%A6%E6%9C%89%E4%B8%80%E4%B8%AA%E5%B7%A5%E5%85%B7%EF%BC%88%EF%BC%81%EF%BC%89%E5%8F%AF%E4%BB%A5%E5%88%97%E5%87%BA%E4%B8%BA%E7%94%A8%E6%88%B7%E5%88%86%E9%85%8D%E7%9A%84%20subuid%20%E5%92%8C%20subgid%20%E5%80%BC%EF%BC%9F.png)
usermod -v
( --add-sub-uids
) 和usermod -w
( --add-sub-gids
) 可用于操作用户帐户的 subuid 和 subgid 范围,但似乎没有工具可以仅列出它们。有吗?
至少在我的 Ubuntu 14.04 机器上似乎getent
没有准备好处理来自/etc/subuid
和 的信息/etc/subgid
。
目前我正在使用一些 shell 脚本,用于awk
此目的。
以下是摘录usermod(8)
:
-v, --add-sub-uids FIRST-LAST
Add a range of subordinate uids to the users account.
[...]
-V, --del-sub-uids FIRST-LAST
Remove a range of subordinate uids from the users account.
[...]
-w, --add-sub-gids FIRST-LAST
Add a range of subordinate gids to the users account.
[...]
-W, --del-sub-gids FIRST-LAST
Remove a range of subordinate gids from the users account.
[...]
答案1
目前,这是我一直在使用的 shell 脚本。
#!/bin/bash
SUBUID=/etc/subuid
SUBGID=/etc/subgid
for i in $SUBUID $SUBGID; do [[ -f "$i" ]] || { echo "ERROR: $i does not exist, but is required."; exit 1; }; done
[[ -n "$1" ]] && USERS=$1 || USERS=$(awk -F : '{x=x " " $1} END{print x}' $SUBUID)
for i in $USERS; do
awk -F : "\$1 ~ /$i/ {printf(\"%-16s sub-UIDs: %6d..%6d (%6d)\", \$1 \",\", \$2, \$2+\$3, \$3)}" $SUBUID
awk -F : "\$1 ~ /$i/ {printf(\", sub-GIDs: %6d..%6d (%6d)\", \$2, \$2+\$3, \$3)}" $SUBGID
echo ""
done
句法:
showsubids [username]
如果未给出用户名,则将列出所有用户名。如果给出了用户名,则仅显示该用户名的条目。
错误处理不是最理想的,但如果它对某人有帮助......