É seguro adicionar. para o meu caminho? Por quê?

49

Eu já vi pessoas mencionarem em outras respostas que é uma má idéia incluir o diretório de trabalho atual (' .') na $PATHvariável de ambiente, mas não foram capazes de encontrar uma pergunta específica para o problema.

Então, por que não devo adicionar .ao meu caminho? E se, apesar de todos os avisos, eu faço de qualquer maneira, o que devo observar? É mais seguro adicioná-lo ao final do que ao início?

Jander
fonte

Respostas:

39

Se você é o único usuário na máquina, tudo bem, desde que você saiba o que está fazendo. A preocupação geral é que, com o diretório atual PATH, você não pode ver os comandos como uma lista constante. Se você precisar executar um script / programa a partir do seu diretório atual, sempre poderá executá-lo explicitamente acrescentando ./seu nome (dizendo ao sistema "Desejo executar este arquivo no meu diretório atual").

Digamos, agora você tem todos esses pequenos scripts em todo o sistema de arquivos; um dia você executará o errado com certeza. Portanto, ter sua PATHlista predefinida de caminhos estáticos é uma questão de ordem e de se salvar de um problema em potencial.

No entanto, se você deseja adicionar .ao seu PATH, sugiro anexá-lo ao final da lista ( export PATH=$PATH:.). Pelo menos você não substituirá os binários de todo o sistema dessa maneira.

Se você é um root no sistema e têm sistema exposto a contas de outros usuários, tendo .em PATHé um enorme risco de segurança: você pode cdpara o diretório de algum usuário, e sem querer executar um script malicioso lá apenas porque você digitado incorretamente uma coisa ou script que tem o mesmo nome que um binário em todo o sistema.

artyom
fonte
11
+ Aceite a teoria subjacente e mencione que os problemas ainda podem existir, mesmo quando você é o único usuário no sistema. Ambas as respostas trazem excelentes pontos. Acrescentarei que sempre que você compartilha diretórios com outro usuário, há um risco aumentado, seja você root ou não.
Jander
6
mesmo como o único usuário na máquina: toda vez que você extrai um tar não confiável, ele pode colocar um lsno seu diretório atual. Em seguida, você corre lspara inspecionar os arquivos extraídos e já executou o código malicioso.
Lesmana
35

O risco é que alguém coloque um executável malicioso no diretório que seja o atual.

O pior caso ocorre quando:

  • você está logado como root, pois o comando malicioso tem poder de dano ilimitado
  • .está no início do seu PATH, pois os comandos padrão podem ser substituídos sem que você perceba (normalmente um lsque pode se esconder da lista).

O risco é muito menor se você estiver logado como usuário regular e tiver o .no final do seu PATH, mas ele ainda existir:

  • alguém pode descobrir que você digita incorretamente um comando e instala um comando correspondente
  • alguém pode instalar um comando falso com o nome de um que não está instalado.

Observe que, em qualquer caso, o risco ainda existe, mesmo se você for o único usuário da máquina. Um software malicioso seria instalado se, por exemplo, você extrair um arquivo baixado de um site comprometido.

jlliagre
fonte
15
Instale slpara ver com que frequência o ponto 3 acontece.
Jordanm
ou alias l=`ls`.
Anko
não precisa ser malicioso. Espero lsobter uma listagem de diretório, mas algum projeto que eu baixe pode ter um lsscript na pasta raiz do projeto como um atalho para outra coisa. lsé provavelmente um mau exemplo, mas certamente posso imaginar epara editar, ddepurar, mcriar, bcriar. Eu mesmo tenho alguns deles globalmente. Se eu digitar m, espero que o make seja iniciado (meu atalho), não algum script local chamado mpara executar.
gman 24/10
@ gman Certo. Um comando não malicioso pode, sem querer, ter efeitos adversos. Observe que os comandos / aliases de uma única letra foram mal vistos desde o início do Unix devido ao alto risco de digitação incorreta. Os raros padrão são we [.
jlliagre
3

Mesmo que você sempre tenha muito cuidado com o que digita, colocar .no seu PATH, mesmo no final, ainda é inseguro, porque alguns programas alteram o diretório atual para /tmp(que é gravável mundialmente) e também podem tentar executar utilitários que na verdade não estão instalados, padronizando assim o que está dentro /tmp. Se isso ocorrer, este é um vetor de ataque.

Note também que não há muita desvantagem de evitar .no PATH, porque ./é fácil de tipo (em particular nos teclados como QWERTY, onde esses personagens estão em chaves consecutivos e não precisa Shift) e usando ./também irá conclusão de ajuda, assim, as teclas digitadas potencialmente economizando no fim.

Se você realmente deseja digitar comandos do diretório atual, os shells modernos (como zsh, com o seu command_not_found_handler) podem fornecer recursos para fazer isso com segurança, ou seja, permitindo adicionar todas as verificações de segurança desejadas no manipulador, antes do comando é executado.

vinc17
fonte