J'ai vu des personnes mentionner dans d' autres réponses qu'il est une mauvaise idée d'inclure le répertoire de travail actuel (' .
') dans votre $PATH
variable d'environnement, mais je n'ai pas été en mesure de trouver une question traitant spécifiquement du problème.
Alors, pourquoi ne devrais-je pas ajouter .
à mon chemin? Et si malgré tout, je le fais quand même, à quoi dois-je faire attention? Est-il plus sûr de l'ajouter à la fin qu'au début?
Réponses:
Si vous êtes le seul utilisateur de la machine, tout va bien, à condition de savoir ce que vous faites. La préoccupation générale est que, en ayant votre répertoire actuel dedans
PATH
, vous ne pouvez pas voir les commandes comme une liste constante. Si vous devez exécuter un script / programme à partir de votre répertoire actuel, vous pouvez toujours l'exécuter explicitement en ajoutant./
son nom au début (vous indiquez au système "Je veux exécuter ce fichier à partir de mon répertoire actuel").Dites, maintenant vous avez tous ces petits scripts sur votre système de fichiers; un jour, vous courrez le mauvais à coup sûr. Donc, avoir votre
PATH
liste prédéfinie de chemins statiques est une question d'ordre et d'économiser vous-même d'un problème potentiel.Toutefois, si vous allez ajouter
.
à votrePATH
, je vous suggère annexant à la fin de la liste (export PATH=$PATH:.
). Au moins, vous ne remplacerez pas les fichiers binaires du système de cette manière.Si vous êtes une racine sur le système et ont le système exposé aux comptes d'autres utilisateurs, ayant
.
enPATH
est un énorme risque de sécurité: vous pouvezcd
à certains répertoire de l' utilisateur, et exécuter involontairement un script malveillant seulement parce que vous avez mal saisi une chose ou d'un script qui a le même nom qu'un binaire à l'échelle du système.la source
ls
dans votre répertoire en cours. Ensuite, vous exécutezls
pour inspecter les fichiers extraits et vous avez déjà exécuté le code malveillant.Le risque est que quelqu'un mette dans le répertoire un fichier exécutable malveillant qui se trouve être votre répertoire actuel.
Le pire des cas se produit lorsque:
.
se trouve au début de votre PATH car les commandes standard peuvent être remplacées sans que vous le remarquiez (généralement une commandels
qui pourrait se cacher de la liste).Le risque est beaucoup plus faible si vous êtes connecté en tant qu'utilisateur régulier et que vous avez le
.
à la fin de votre PATH mais qu'il existe toujours:Notez que dans tous les cas, le risque existe toujours, même si vous êtes le seul utilisateur de la machine. Un logiciel malveillant serait installé si, par exemple, vous extrayiez une archive téléchargée depuis un site compromis.
la source
sl
pour voir à quelle fréquence le point 3 se produit.alias l=`ls`
.ls
à obtenir une liste de répertoires, mais certains projets que je télécharge peuvent avoir unls
script dans leur dossier de projet racine comme raccourci vers autre chose.ls
est probablement un mauvais exemple, mais je peux certainement imaginere
pour modifier,d
pour déboguer,m
pour faire,b
pour construire. J'en ai moi-même à l'échelle mondiale. Si je tape,m
j'attends que make lance (mon raccourci), pas un script local appelém
à exécuter.w
et[
.Même si vous êtes toujours très prudent avec ce que vous tapez, mettre
.
dans votrePATH
, même à la fin, n'est toujours pas sûr car certains programmes changent le répertoire courant en/tmp
(qui est accessible en écriture) et peuvent également essayer d'exécuter des utilitaires qui ne sont pas installés, donc par défaut à ce qui est dans/tmp
. Si cela se produit, c'est un vecteur d'attaque.Notez également qu'il n'y a pas inconvénient beaucoup d'éviter
.
dansPATH
, car il./
est facile de le type (en particulier sur les claviers comme QWERTY, où ces personnages sont sur les touches consécutives et ne nécessitent pas Shift) et l' utilisation./
sera également la fin de l' aide, de frappes potentiellement sauver à la fin.Si vous voulez vraiment pouvoir taper des commandes à partir du répertoire courant, les shells modernes (comme zsh, avec son
command_not_found_handler
) peuvent fournir des fonctionnalités permettant de le faire en toute sécurité, c'est-à-dire vous permettant d'ajouter tous les contrôles de sécurité souhaités dans le gestionnaire, avant la fin du processus. commande est exécutée.la source