Variáveis globais da shell?

2

Como administrador do sistema com root access em uma máquina unix, é possível fornecer variáveis shell padrão para todos os usuários de um sistema?

Ou seja, como um usuário unix individual, posso definir variáveis ambientais em meu shell bash editando meu .bash_profile

export FOO="BAR"

Existe uma maneira de fornecer a todos os usuários um conjunto padrão de variáveis ambientais sem editar as variáveis de shell individuais de cada usuário? Se existe uma maneira de fornecer aos usuários específicos variáveis padrão?

Longo tempo *nix user aqui, mas eu nunca fiz muito na administração de um lado unix, então peço desculpas se essa é uma questão ingênua.

    
por Alan Storm 31.10.2014 / 17:29

2 respostas

3

Se você entender sua pergunta corretamente, precisará de variáveis ambientais que possam ser acessadas por todos os usuários do sistema. Se assim for, você pode configurá-lo a partir de /etc/profile . De aqui ,

O arquivo /etc/profile não é muito diferente, mas é usado para definir variáveis ambientais do sistema em shells de usuários. Às vezes, as variáveis são as mesmas que estão no .bash_profile , no entanto, esse arquivo é usado para definir um PATH ou PS1 inicial para todos os usuários do shell do sistema.

    
por 31.10.2014 / 17:33
1

Para definir variáveis globais, pode haver várias abordagens, dependendo dos shells dos usuários, e se o sistema suporta ou não um banco de dados de recursos login.conf ou similar, que deve ser aplicado, independentemente do shell do usuário.

A abordagem mais simples é adicionar as definições desejadas aos arquivos de sistema relevantes em /etc . Dependendo dos shells usados no sistema, você pode configurar e gerenciar vários arquivos. Por exemplo, sh e bash provavelmente esperam encontrar /etc/profile , zsh procura /etc/zprofile , enquanto csh ou tcsh procurarão algo diferente.

Se o seu sistema suportar o banco de dados de recursos, você só precisará modificar um arquivo e todas as configurações deverão ser aplicadas corretamente. No FreeBSD, por exemplo, você adicionaria sua definição de envar ao recurso setenv para qualquer classe de usuário que precisar:

default:\
        :setenv=BLOCKSIZE=K,FOO=BAR:\
        :tc=default:

Reconstrua o banco de dados e, no próximo login, $FOO deve ser definido.

Se você não tem login.conf , pode haver um método diferente de configurar globalmente os ambientes dos usuários em seu sistema.

Para definir variáveis para um usuário específico, acho que você precisaria usar a primeira abordagem, em que testaria o valor da variável $USER em uma instrução case ou uma construção semelhante suportada pela concha particular . Por exemplo, isso deve funcionar em sh e compatível:

case $USER in
    root) FOO=ROOTBAR;;
    *) FOO=USERBAR;;
esac
export FOO
    
por 31.10.2014 / 18:03