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?
fonte
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'
, essesh
processo ficará visível emps
:fonte
e
modificador paraps
. Também permite visualizar o ambiente de processos que o usuário possui.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.