Não será tarefa fácil encontrar "documentos históricos" sobre esta decisão, mas citando outra resposta do guarda-chuva do StackExchange, você encontrará o que eu também considero a resposta mais apropriada para sua pergunta: para evitar " sh ## acontece "cenário":
Pergunta:
On UNIX-like systems over the years (most relevantly to me, Linux), I've noticed that . (current dir) is never in the $PATH by default. Why is this? I recall reading years ago that it was a security problem, but the article I read didn't explain what exactly the problem was. Is it because someone could leave a malicious version of 'ls' or 'cp' in a directory, and I'd end up running it without realizing it was there?
Resposta:
You answered correctly your own question, that's exactly why dot isn't in the path: To protect against childish viruses or honest mistakes.
Of course, this is a very lame and useless anti-virus measure, and nothing stops you from adding dot to the path yourself.
E em este link , você pode encontrar um exemplo adicional de por que é perigoso colocar o ponto em $PATH
.
Nota de rodapé:
An extreme example would be the situation in which an ordinary user created a shell script such as
rm -r /
, which would delete all files and directories in the system for which the user had writing permission, and named this scriptls
. Were the system administrator to navigate to the directory in which this script was located and attempt to run the standardls
command in order to view the contents of that directory, the shell would instead run the script with the same name and thereby remove the contents of all currently mounted partitions on the computer!
Além disso, o propósito do PATH é completar o caminho de um comando de tal forma que você não precise se lembrar ou digitar o caminho completo de seus binários. Não há necessidade de indexar comandos de um diretório em que você esteja. Não é útil se você souber onde esses programas estão armazenados.
EDITAR:
No entanto, depois de algumas pesquisas, descobri que a ideia por trás do caminho de pesquisa vinha das Multics , mas a limitação era que só pesquisou dentro de /bin
. O Unix v3 foi o primeiro a implementá-lo sem essa limitação de um diretório. E dando uma olhada nas páginas de segurança do manual a seguir, elas já mostraram quais são os problemas ao usar .
em uma variável PATH. Isso se aplica não somente a su
e reforça a questão de segurança de injetar código malicioso no ambiente.
Citando a página 13:
Trojan Horse tricks and countermeasures were discovered in an ongoing game that has been recounted by Morris and Fred Grampp. Notice, for example, the removal of
login(1)
to chapter 8 and the intrusion of/etc/
into the synopsis forsu
(Grampp, v8). These fillips defeated the old chestnut of leaving programs namedlogin
orsu
lying around in hopes of capturing a password typed by an unwary system administrator. Other subtle features of the modernsu
: dot is excluded from the shell search path and the burglars’ favorite shell variableIFS
is reset.
Desde a sua concepção, esse recurso se mostrou perigoso se usar ponto como parte do $PATH
.