有没有办法确保当用户被添加到系统上的权限组时,该用户会自动添加到一个或多个其他定义的组?
例如,将用户添加到 创建的组会将该用户添加到、和netadmin
组。(这只是假设情况)www-data
tomcat
sambashare
ftp
另一个示例组vmadmin
可以将用户添加到组kvm
、libvirt
和vboxusers
。
我知道不能将一个组添加到另一个组中,但我想避免为不同的目录和文件设置和维护 ACL。
答案1
我认为没有内置的方法可以做到这一点。
但是有一个非常简单的解决方案:您可以添加一个函数将~/.bashrc
整个任务包装成一个命令。
在语句中列出组集case
(对于几组组来说可以)
function add_user {
[ ! -z "$1" -a ! -z "$2" ] || return
case "$1" in
netadmin)
groups=(netadmin www-data tomcat sambashare ftp)
;;
vmadmin)
groups=(kvm libvirt vboxusers)
;;
*)
printf "Group '%s' is not listed.\n" "$1"
return
esac
printf "Adding '%s' to group '%s'...\n" "$2" "$1"
usermod -aG ${groups[@]} "$1"
}
此后,运行 eg将add_user netadmin user
添加user
到netadmin
、www-data
、tomcat
和,运行 eg将添加到、和。sambashare
ftp
add_user vmadmin user
user
kvm
libvirt
vboxusers
添加其他组集就像在条目case
之后vmadmin
和*
条目之前向语句中添加其他条目一样简单:
foo)
groups=(bar foobar raboof)
;;
列出外部配置文件中的组集
config
创建一个名为的文件,~/
内容如下:
netadmin,netadmin,www-data,tomcat,sambashare,ftp
vmadmin,kvm,libvirt,vboxusers
- 第一个字段标识组集的名称
- 第一个字段之后的字段标识用户要添加的组
function add_user {
[ ! -z "$1" -a ! -z "$2" ] || exit
groups=( $(awk -F , -v group="$1" '$1==group {$1=""; print; exit}' config) )
if [ ${#groups} -eq 0 ]; then
printf "Group '%s' is not listed.\n" "$1"
return
fi
printf "Adding '%s' to group '%s'...\n" "$2" "$1"
usermod -aG ${groups[@]} "$1"
}
此后,运行 eg将add_user netadmin user
添加user
到netadmin
、www-data
、tomcat
和,运行 eg将添加到、和。sambashare
ftp
add_user vmadmin user
user
kvm
libvirt
vboxusers
添加其他组集就像添加另一个条目一样简单~/config
:
foo,bar,foobar,raboof