Существует ли способ гарантировать что, когда пользователь добавляется к группе полномочий в системе, что пользователь автоматически добавляется к одной или нескольким другим определенным группам?
Например, добавление пользователя группе создало как netadmin
добавил бы пользователь к группам www-data
, tomcat
, sambashare
и ftp
. (Это - только гипотетическая ситуация),
Другая группа в качестве примера vmadmin
мог добавить пользователь к группам, kvm
, libvirt
и vboxusers
.
Я знаю, что группа не может быть добавлена к группе, но хотела бы избежать необходимости настраивать и поддерживать ACLs для различных каталогов и файлов.
Я не думаю, что существует встроенный способ сделать это.
Однако существует довольно легкое решение: Вы могли добавить функцию к ~/.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"
}
После того выполнения, например. add_user netadmin user
добавит user
кому: netadmin
, www-data
, tomcat
, 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"
}
После того выполнения, например. add_user netadmin user
добавит user
кому: netadmin
, www-data
, tomcat
, sambashare
и ftp
, и выполнение, например. add_user vmadmin user
добавит user
кому: kvm
, libvirt
и vboxusers
.
Добавление других наборов групп было бы так же легко как добавляющий другую запись в ~/config
:
foo,bar,foobar,raboof