Eu já vi pessoas mencionarem em outras respostas que é uma má idéia incluir o diretório de trabalho atual (' .
') na $PATH
variá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?
Respostas:
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
PATH
lista 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 seuPATH
, 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
.
emPATH
é um enorme risco de segurança: você podecd
para 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.fonte
ls
no seu diretório atual. Em seguida, você correls
para inspecionar os arquivos extraídos e já executou o código malicioso.O risco é que alguém coloque um executável malicioso no diretório que seja o atual.
O pior caso ocorre quando:
.
está no início do seu PATH, pois os comandos padrão podem ser substituídos sem que você perceba (normalmente umls
que 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: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.
fonte
sl
para ver com que frequência o ponto 3 acontece.alias l=`ls`
.ls
obter uma listagem de diretório, mas algum projeto que eu baixe pode ter umls
script na pasta raiz do projeto como um atalho para outra coisa.ls
é provavelmente um mau exemplo, mas certamente posso imaginare
para editar,d
depurar,m
criar,b
criar. Eu mesmo tenho alguns deles globalmente. Se eu digitarm
, espero que o make seja iniciado (meu atalho), não algum script local chamadom
para executar.w
e[
.Mesmo que você sempre tenha muito cuidado com o que digita, colocar
.
no seuPATH
, 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
.
noPATH
, 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.fonte