Я видел, как люди упоминают в других ответах , что плохая идея включать текущий рабочий каталог (' .
') в $PATH
переменную вашей среды, но не смог найти вопрос, конкретно относящийся к этой проблеме.
Итак, почему я не должен добавить .
к своему пути? И если, несмотря на все предупреждения, я все равно это делаю, на что мне нужно обращать внимание? Безопаснее ли добавить его в конец, чем в начало?
Ответы:
Если вы единственный пользователь на машине, это нормально, если вы знаете, что делаете. Общая проблема заключается в том, что при наличии текущего каталога
PATH
вы не можете видеть команды в виде постоянного списка. Если вам нужно запустить скрипт / программу из вашего текущего каталога, вы всегда можете явно запустить его, добавив./
к его имени (вы говорите системе «Я хочу запустить этот файл из моего текущего каталога»).Скажем, теперь у вас есть все эти маленькие скрипты по всей вашей файловой системе; однажды вы наверняка ошибетесь. Таким образом, наличие
PATH
предопределенного списка статических путей - это все о порядке и избавлении от потенциальной проблемы.Однако, если вы собираетесь добавить
.
к своемуPATH
, я предлагаю добавить его в конец списка (export PATH=$PATH:.
). По крайней мере, вы не будете переопределять общесистемные двоичные файлы таким образом.Если вы корень на систему и имеют системы подвергаются счета других пользователей, имеющих
.
вPATH
огромный риск безопасности: вы можетеcd
в каталог какого - нибудь пользователя, и неумышленно запустить вредоносный сценарий там только потому , что вы набранный вещь или скрипт, имеет то же имя, что и общесистемный двоичный файл.источник
ls
в ваш текущий каталог. Затем вы запускаете,ls
чтобы проверить извлеченные файлы, и вы уже запустили вредоносный код.Риск заключается в том, что кто-то поместит вредоносный исполняемый файл в каталог, который окажется вашим текущим.
Худший случай случится, когда:
.
находится в начале вашего PATH, поскольку стандартные команды могут быть переопределены без вашего ведома (обычно этоls
может скрыться от списка).Риск намного ниже, если вы вошли в систему как обычный пользователь и у вас есть
.
в конце вашего PATH, но он все еще существует:Обратите внимание, что в любом случае, риск все еще существует, даже если вы являетесь единственным пользователем машины. Вредоносное программное обеспечение будет установлено, если, например, вам удастся извлечь архив, загруженный с взломанного сайта.
источник
sl
чтобы увидеть, как часто происходит точка 3.alias l=`ls`
.ls
получить список каталогов, но некоторые проекты, которые я загружаю, могут иметьls
скрипт в своей корневой папке проекта как ярлык к чему-то другому.ls
это, вероятно, плохой пример, но я, конечно, могу представитьe
для редактирования,d
для отладкиm
,b
для сборки , для сборки. У меня есть некоторые из них во всем мире. Если я печатаю,m
я ожидаю, что make запускается (мой ярлык), а не какой-то локальный скрипт, вызываемыйm
для выполнения.w
и[
.Даже если вы всегда очень осторожны с тем, что печатаете, добавление
.
в ваш файлPATH
, даже в конце, по-прежнему небезопасно, поскольку некоторые программы изменяют текущий каталог на/tmp
(который доступен для записи всем пользователям) и могут также попытаться выполнить утилиты, которые на самом деле не установлены, таким образом, по умолчанию к тому, что в/tmp
. Если это происходит, это вектор атаки.Следует также отметить , что существует не так много недостатков избежать
.
вPATH
, так./
легко типа (в частности , на клавишных , как QWERTY, где эти символы находятся на последовательных ключей и не нужно Shift) и использование./
также завершение справки, таким образом , потенциально спасительные нажатия клавиш в конце.Если вы действительно хотите иметь возможность вводить команды из текущего каталога, то современные оболочки (например, zsh с его
command_not_found_handler
) могут предоставить функции, позволяющие сделать это безопасно, т.е. позволить вам добавить все проверки безопасности, которые вы хотите в обработчике, до того, как Команда выполнена.источник