LINUX.ORG.RU

Умный $PATH в zsh

 


0

2

Сижу себе , колупаю конфиги zsh, наткнулся на строчку export PATH = и подумал, что можно туда добавить ./ и тогда не нужно будет писать ./ перед именем исполняемого файла в директории, что заметно облегчело бы жизнь. Но потом я вспомнил , что если такая команда уже есть в системе, то возникнет ошибка (?). Можно ли запилить такой скрипт/функцию , чтобы при отсутствии файла с таким же именем в $PATH, можно было запускать без ./ , a если такой файл есть, то , он бы запускался по умолчанию , а тот , что в текущей директории как обычно с ./.

★★★★★

Последнее исправление: sudopacman (всего исправлений: 1)

если такая команда уже есть в системе, то возникнет ошибка

Не возникнет.

Если ./ добавлен через PATH=./:$PATH, то команда будет искаться в первую очередь в ./

Если ./ добавлен через PATH=$PATH:./ (как и положено), то команда будет искаться в первую очередь во всех остальных (читай: системных) директориях сначала, и только потом в текущей. Это то, что тебе нужно.

E ★★★
()
Ответ на: комментарий от sudopacman

Абстрактный злоумышленник подложит абстрактный вредоносный файл с названием какой-либо системной команды куда-нибудь (например, в твою домашнюю директорию, или на флешку), и когда ты будешь там находиться и захочешь выполнить эту системную команду, выполнится на самом деле вредоносный код.

Это был популярный способ размножения вирусов под оффтопиком ещё со времён доса, потому что там при вызове команды по имени (т.е. без пути) текущая директория просматривается в первую очередь.

tiandrey ★★★★★
()
Последнее исправление: tiandrey (всего исправлений: 2)
Ответ на: комментарий от sudopacman

Ну ты уж прими к сведению, что на таких «мелочах» и сыпятся якобы надёжные системы.

Для админа локалхоста это не страшно, а если будешь чем-то серьёзным заниматься (ну вдруг), то можешь пролететь.

tiandrey ★★★★★
()
Последнее исправление: tiandrey (всего исправлений: 1)

Умный

Не то слово. Повышение привилегий — теперь без сложных дыр и уязвимостей! Достаточно положить куда надо файл pacnam и немного подождать...

t184256 ★★★★★
()
Ответ на: комментарий от tiandrey

Абстрактный злоумышленник подложит абстрактный вредоносный файл с названием какой-либо системной команды куда-нибудь (например, в твою домашнюю директорию

А кто этот абстрактный злоумышленник, у которого уже есть право писать в мой домашний каталог? Если оно у него уже появилось, значит, он уже взломал что-то другое и с такими правами может мне просто скрипт в автозагрузку положить, как минимум, и не надо будет ждать, пока кто-то выполнит конкретную несуществующую команду в конкретном каталоге.

или на флешку

Флешки с FAT, в принципе, можно было бы монтировать с соответствующим fmask (например, 0177), но в udisks2, насколько я знаю, опции монтирования захардкожены, и там получается, что исполняемыми оказываются файлы exe, bat, com и т.п. Но т.к. линуксовые команды не заканчиваются на .exe, .bat, .com, то случайно ввести такую не получится.

gentoo_root ★★★★★
()
Ответ на: комментарий от gentoo_root

То есть когда «применение ldd на бинарный файл позволяет выполнять произвольный код», то это дыра, а когда, допустим, из скачанного тобой архива исполняемая гадость выполнится при опечатке, то все ок?

t184256 ★★★★★
()
Ответ на: комментарий от tiandrey

Только если PATH начинается на `.', а не заканчивается.

А вообще хорошим тоном является использование полного пути для вызова sudo или su: `/usr/bin/sudo', `usr/bin/su'.

Legioner ★★★★★
()
Ответ на: комментарий от t184256

применение ldd на бинарный файл позволяет выполнять произвольный код

Каким образом? ldd запускает (упрощённо) LD_TRACE_LOADED_OBJECTS=1 /lib64/ld-linux-x86-64.so.2 "$file". Где тут может выполниться произвольный код?

когда, допустим, из скачанного тобой архива исполняемая гадость выполнится при опечатке, то все ок?

Ничего, что я точно так же могу скачать архив в хомяк и начать его там распаковывать, а там будут файлы .kde4/Autostart/svchost.desktop, .local/share/applications/firefox.desktop? Второй, кстати, аналогичен текущему каталогу в $PATH, только работает из коробки везде.

gentoo_root ★★★★★
()
Ответ на: комментарий от gentoo_root

<каким образом ldd позволяет выполнять произвольный код?>

мопед не мой, я просто вспомнил пример

Ничего, что я точно так же могу скачать архив в хомяк и начать его там распаковывать

ты много чего можешь, и что? всех глупостей не запретишь, но разве это как-то оправдывает раскладывание дополнительных граблей?

t184256 ★★★★★
()
Ответ на: комментарий от t184256

мопед не мой, я просто вспомнил пример

Видимо, раньше запускалось просто LD_TRACE_LOADED_OBJECTS=1 "$file". На glibc 2.20 я бегло просмотрел код ldd, там явно вызывается динамический линкер, а не сама программа.

ты много чего можешь, и что? всех глупостей не запретишь, но разве это как-то оправдывает раскладывание дополнительных граблей?

Ну не то чтобы это были дополнительные грабли... Если уже пошёл юз-кейс «скачать архив и распаковать его, не проверяя содержимое», то гораздо выгоднее положить в такой архив .kde4/Autostart/svchost.desktop и соответствующий скрипт к нему (ну и аналогичные файлики для других DE), чем ждать, что пользователь с текущим каталогом в $PATH ошибётся и в нужном каталоге введёт команду, которой у него нет и название которой совпадёт со скриптом из архива.

gentoo_root ★★★★★
()

просто точуа, без слеша
так в слаке по-дефолту

mystery ★★
()
Ответ на: комментарий от gentoo_root

а для твоего примера надо, чтобы архив распаковывали в home. я вот такого не видел никогда. да, пример с опечаткой натянутый. но и твой так себе. а грабли все же дополнительные — грабли из твоего примера, видимо, есть, а эти еще разложить надо

t184256 ★★★★★
()
Ответ на: комментарий от t184256

а для твоего примера надо, чтобы архив распаковывали в home. я вот такого не видел никогда.

Многие новички так делают, потому что открывают консоль и пишут tar xf Загрузки/antimalware-9000.tar.gz прям там. А если сделают не в хомяке, скрытый .local ещё нужно заметить (но вреда он там, конечно, уже не принесёт).

gentoo_root ★★★★★
()
Ответ на: комментарий от t184256

вот можно пруф?

Я статистику по новичкам не собирал :D

У кого-то из знакомых такое видел. До этого довольно легко дойти — просто заходим в консоль и распаковываем прям там, где стоим.

gentoo_root ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.