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

11

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

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

Note que estou não falando sobre como colocar segredos de texto puro em arquivos. Observe também que estou não falando sobre a exposição à conta raiz (vejo a tentativa de ocultar segredos de um adversário com raiz como não iniciador).

This A questão parece resolver a minha, com comentários que classificam as variáveis de ambiente como estando completamente sem segurança, ou simplesmente sendo ofuscadas, 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 definem as variáveis de ambiente (por exemplo, exportação) são internos do shell que não são incluídos na tabela de processos e, por extensão, não estão em / proc / $ pid / cmdline. / proc / $ pid / environ só pode ser lido pelo UID do proprietário do processo.

Talvez a confusão esteja entre diferentes sistemas operacionais ou versões. Várias fontes (recentes) em toda a web denunciam a insegurança das variáveis de ambiente, mas minha verificação de diferentes versões do Linux parece indicar que isso não é possível, pelo menos até 2007 (provavelmente mais, mas eu 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 outra pessoa?

    
por Joshua Miller 29.08.2014 / 21:37

2 respostas

5

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

    
por 17.03.2017 / 14:14
6

Variáveis de ambiente são bastante seguras. A pergunta à qual você está se referindo é que, se o sistema estiver comprometido, o único benefício de segurança de usar variáveis de ambiente sobre um arquivo de configuração é a obscuridade. Significa que, se alguém obtiver acesso root, poderá acessar ambos. Se o uso de variáveis de ambiente para dados secretos é considerado 'obscuro' também é discutível. Esta é uma prática muito comum e, portanto, eu não consideraria isso.

Você só pode acessar os dados armazenados em uma variável de ambiente em 2 lugares:

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 por meio de /proc/$PID/environ . No entanto, apenas o usuário que possui o processo, ou root, pode acessar esse arquivo.

2. A fonte das variáveis de ambiente

Se você estiver usando um script de inicialização e as variáveis estiverem armazenadas nesse script de inicialização, é possível obter as variáveis lendo esse script.

Ou se as variáveis de ambiente vierem de outro lugar, então, onde quer que seja.

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 processo sh 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
    
por 30.08.2014 / 00:09