As variáveis ​​de ambiente são visíveis para usuários sem privilégios no Linux?


12

Estou tentando determinar se, no Linux, variáveis ​​de ambiente de um processo são observáveis ​​por outros usuários (não raiz).

O caso de uso imediato é colocar segredos nas variáveis ​​de ambiente. Isso é discutido em muitos lugares da Web como inseguro, mas não consegui me concentrar no ponto exato de exposição no Linux.

Observe que não estou falando sobre colocar segredos de texto não criptografado em arquivos. Observe também que estou não falar de exposição para a conta root (I Vista tentando esconder segredos de um adversário com raiz como uma impossibilidade).

Essa pergunta parece abordar a minha, com comentários que classificam as variáveis ​​de ambiente como completamente sem segurança ou simplesmente ocultas, mas como alguém as acessa?

Nos meus testes, um usuário não privilegiado não pode observar variáveis ​​de ambiente para outro usuário através da tabela de processos ('ps auxwwe'). Os comandos que configuram variáveis ​​de ambiente (por exemplo, exportação) são shellins internos que não entram na tabela de processos e, por extensão, não estão em / proc / $ pid / cmdline. / proc / $ pid / environ é legível apenas pelo UID do proprietário do processo.

Talvez a confusão esteja entre diferentes sistemas operacionais ou versões. Várias fontes (recentes) na Web criticam a insegurança de variáveis ​​de ambiente, mas minha verificação pontual de diferentes versões do Linux parece indicar que isso não é possível desde pelo menos até 2007 (provavelmente mais, mas não tenho caixas em mão para testar).

No Linux, como um usuário não privilegiado pode observar variáveis ​​de ambiente para os processos de outros?

Respostas:


7

Como Gilles explicou em uma resposta muito abrangente a uma pergunta semelhante no security.stackexchange.com, os ambientes de processo são acessíveis apenas ao usuário que possui o processo (e é claro que é a raiz).


Algum link para a postagem que você quis dizer?
22418 cyc115

@ cyc115 clicar na palavra "resposta" :)
guntbert

6

Variáveis ​​de ambiente são bastante seguras. A pergunta que você vinculou é que, se o sistema estiver comprometido, o único benefício de segurança do uso de variáveis ​​de ambiente em um arquivo de configuração é a obscuridade. Significando que, se alguém obteve acesso root, pode acessar ambos.
Também é discutível se o uso de variáveis ​​de ambiente para dados secretos é considerado 'obscuro'. Essa é uma prática muito comum e, portanto, eu não consideraria isso.

Você pode acessar apenas os dados armazenados em uma variável de ambiente em 2 locais:

1. O ambiente de execução do processo

Quando o processo está em execução, as variáveis ​​de ambiente desse processo podem ser acessadas /proc/$PID/environ. No entanto, apenas o usuário que possui o processo, ou raiz, pode acessar esse arquivo.

2. A fonte das variáveis ​​de ambiente

Se você estiver usando um script init, e as variáveis ​​estiverem armazenadas nesse script init, é possível obter as variáveis ​​lendo esse script.

Ou, se as variáveis ​​de ambiente vierem de outro lugar, onde quer que esteja.

3. Saída 'ps'

Sim, eu sei que disse 2 e, em qualquer sistema decente, será 2. No entanto, se o administrador não souber o que está fazendo, é possível abrir uma terceira avenida.

Se o processo for iniciado por meio de algo como sh -c 'cd /foo/bar; POP=tart /my/executable', esse shprocesso ficará visível em ps:

$ sh -c 'cd /; POP=tart sleep 10' &
[1] 3085

$ ps ax | grep POP
phemmer   3085  14   5  0.0  0.0 SN         00:00 sh -c cd /; POP=tart sleep 10

1
Você também deve mencionar o emodificador para ps. Também permite visualizar o ambiente de processos que o usuário possui.
Barmar 03/09/14

1
Mais um local possível: se a variável de ambiente foi definida através do shell (por exemplo export FOO=bar), também pode aparecer no arquivo de histórico (por exemplo ~/.bash_history) se o usuário não tomou as precauções para evitar que ele fosse salvo ou removê-lo.
Tavnab
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.