É possível ter um bashrc para um grupo de usuários?

5

É possível executar algum arquivo bashrc para todos os usuários em um grupo? Se você pode fazer isso em todo o sistema em / etc / profile, então porque não para um grupo de usuários?

    
por Majid alDosari 25.07.2014 / 19:06

3 respostas

4

Em / etc / profile add:

if [ 'id -ng' = "the_cool_group" ] ; then
    # do stuff for people in the_cool_group
fi
    
por 25.07.2014 / 19:29
2

Você pode adicionar algo assim a /etc/bash.bashrc :

# running group-based bashrcs

for group in $(id -Gn); do
  group_bashrc=/etc/bashrc-by-group/$group
  if [ -f "$group_bashrc" ] && [ -r "$group_bashrc" ]; then
    command . "$group_bashrc"
  fi
done

Em seguida, você pode criar um /etc/bashrc-by-group/mygroup e colocar as inicializações para os membros do grupo mygroup lá.

Isso pressupõe que seus grupos sejam bem domados: que os nomes dos grupos não contenham caracteres em branco, barra ou curinga, que eles não sejam . ou .. e que você tenha um mapeamento de um para um. entre o nome do grupo e o id do grupo. Caso contrário, você pode usar id -G em vez de id -Gn e usar /etc/bashrc-by-group/groupid .

    
por 26.07.2014 / 10:09
2

/etc/profile é visto por todos os usuários. ~/.profile é visto pelo usuário que efetuou login: é um arquivo no diretório pessoal do usuário e cada usuário possui seu próprio diretório; o programa de login define a variável de ambiente HOME para o caminho do diretório pessoal do usuário. O mesmo vale para outros arquivos como /etc/bash.bashrc e ~/.bashrc - muitos aplicativos têm um arquivo de configuração de todo o sistema em /etc e um arquivo de configuração por usuário no diretório pessoal do usuário.

Não há mecanismos semelhantes para grupos - os grupos não têm um diretório inicial. Portanto, não há maneira direta de aplicar um arquivo de configuração a todos os usuários de um grupo.

Como outras respostas mostraram, você pode adicionar comandos em um arquivo de inicialização de shell em todo o sistema dentro de uma instrução condicional para executá-los somente quando o usuário pertencer a um grupo específico. Observe que um usuário pode pertencer a mais de um grupo. Cabe a você decidir se deseja executar comandos somente quando o grupo for o grupo principal do usuário ou sempre que o usuário pertencer ao grupo.

case "$(id -gn)" in
  foo) somecommand;; # the user's primary group is foo
esac
case ":$(id -Gn | tr \n :)" in
  *:foo:*) somecommand;; # the user belongs to the group foo
esac

Sobre a diferença entre .profile e .bashrc , consulte Existe um equivalente ".bashrc" arquivo lido por todos os shells?

    
por 26.07.2014 / 16:27