Я могу добавить членов группы другой группе автоматически?

Существует ли способ гарантировать что, когда пользователь добавляется к группе полномочий в системе, что пользователь автоматически добавляется к одной или нескольким другим определенным группам?

Например, добавление пользователя группе создало как netadmin добавил бы пользователь к группам www-data, tomcat, sambashare и ftp. (Это - только гипотетическая ситуация),

Другая группа в качестве примера vmadmin мог добавить пользователь к группам, kvm, libvirt и vboxusers.

Я знаю, что группа не может быть добавлена к группе, но хотела бы избежать необходимости настраивать и поддерживать ACLs для различных каталогов и файлов.

2
задан 14 January 2016 в 19:24

1 ответ

Я не думаю, что существует встроенный способ сделать это.

Однако существует довольно легкое решение: Вы могли добавить функцию к ~/.bashrc переносить целую задачу в единственную команду.

Список наборов групп в a 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
3
ответ дан 2 December 2019 в 02:53

Другие вопросы по тегам:

Похожие вопросы: