Posso adicionar membros de um grupo a outro grupo automaticamente?

3

Existe uma maneira de garantir que, quando um usuário é adicionado a um grupo de permissões em um sistema, esse usuário seja adicionado automaticamente a um ou mais grupos definidos?

Por exemplo, adicionar um usuário a um grupo criado como netadmin adicionaria o usuário aos grupos www-data , tomcat , sambashare e ftp . (Esta é apenas uma situação hipotética)

Outro grupo de exemplo de vmadmin poderia adicionar um usuário aos grupos, kvm , libvirt e vboxusers .

Eu sei que um grupo não pode ser adicionado a um grupo, mas gostaria de evitar a necessidade de configurar e manter ACLs para diretórios e arquivos diferentes.

    
por Arronical 14.01.2016 / 13:33

1 resposta

3

Eu não acho que haja uma maneira interna de fazer isso.

No entanto, há uma solução bem fácil: você pode adicionar uma função a ~/.bashrc para agrupar toda a tarefa em um único comando.

Listando os conjuntos de grupos em uma instrução case (ok para alguns conjuntos de grupos)

function add_user {
    [ ! -z "" -a ! -z "" ] || return
    case "" in
    netadmin)
        groups=(netadmin www-data tomcat sambashare ftp)
        ;;
    vmadmin)
        groups=(kvm libvirt vboxusers)
        ;;
    *)
        printf "Group '%s' is not listed.\n" ""
        return
    esac
    printf "Adding '%s' to group '%s'...\n" "" ""
    usermod -aG ${groups[@]} ""
}

Depois disso, por exemplo, add_user netadmin user adicionará user a netadmin , www-data , tomcat , sambashare e ftp e executando, e. add_user vmadmin user adicionará user a kvm , libvirt e vboxusers .

Adicionar outros conjuntos de grupos seria tão fácil quanto adicionar outras entradas à instrução case após a entrada vmadmin e antes da entrada * :

foo)
    groups=(bar foobar raboof)
    ;;

Listando os conjuntos de grupos em um arquivo de configuração externa

Crie um arquivo chamado config in ~/ com o seguinte conteúdo:

netadmin,netadmin,www-data,tomcat,sambashare,ftp
vmadmin,kvm,libvirt,vboxusers
  • O primeiro campo identifica o nome do conjunto de grupos
  • Os campos após o primeiro identificam os grupos aos quais o usuário deve adicionar
function add_user {
    [ ! -z "" -a ! -z "" ] || exit
    groups=( $(awk -F , -v group="" '==group {=""; print; exit}' config) )
    if [ ${#groups} -eq 0 ]; then
        printf "Group '%s' is not listed.\n" ""
        return
    fi
    printf "Adding '%s' to group '%s'...\n" "" ""
    usermod -aG ${groups[@]} ""
}

Depois disso, por exemplo, add_user netadmin user adicionará user a netadmin , www-data , tomcat , sambashare e ftp e executando, e. add_user vmadmin user adicionará user a kvm , libvirt e vboxusers .

Adicionar outros conjuntos de grupos seria tão fácil quanto adicionar outra entrada a ~/config :

foo,bar,foobar,raboof
    
por kos 14.01.2016 / 17:04