Здравствуйте, Shmj, Вы писали:
S>Зачем же? Лишняя сущность...
В Windows или Powershell?
Сделали это для безопасности.
По умолчанию ищет только в переменной окружения PATH.
Хочешь запустить именно из текущего каталога — добавляй префикс ./
Здравствуйте, netch80, Вы писали:
N>Многочисленными проблемами безопасности при случайном или намеренно подсунутом запуске одноимённой программы из текущего каталога.
Можно перечислить хотя бы первые три из "многочисленных" проблем, а также описать варианты случайного и намеренного "подсовывания" программы?
Здравствуйте, Shmj, Вы писали:
S>Зачем же? Лишняя сущность...
Если это правда, то это как в UNIX.
В UNIX так сделано неспроста: выбор программы, которая запустится в ответ на команду, не должен зависеть от текущей директории. Это и небезопасно (мало ли что в текущей директории валяется, это может быть содержимое архива, скачанного из недоверенного источника) и в целом, может приводить к сюрпризам, усложняющим жизнь.
Здравствуйте, netch80, Вы писали:
N>Многочисленными проблемами безопасности при случайном или намеренно подсунутом запуске одноимённой программы из текущего каталога.
В начале 70-х, когда UNIX только изобрели (а я уверен, что это решение было принято уже тогда) на безопасность всем было, по большому счету, начхать. Думаю, ребят скорее заботила консистентность поведения системы. Ну действительно, не дело это, когда выбор запускаемой программы зависит от текущей директории.
Здравствуйте, Pzz, Вы писали:
Pzz>В UNIX так сделано неспроста: выбор программы, которая запустится в ответ на команду, не должен зависеть от текущей директории. Это и небезопасно (мало ли что в текущей директории валяется, это может быть содержимое архива, скачанного из недоверенного источника)
В UNIX архивы, скачанные из недоверенных источников, не только автоматически получают право на выполнение, но и автоматически исполняются?
Здравствуйте, Pzz, Вы писали:
Pzz>Думаю, ребят скорее заботила консистентность поведения системы.
Вот разве что.
Pzz>действительно, не дело это, когда выбор запускаемой программы зависит от текущей директории.
Если все команды набираются вручную, и в каких-то каталогах лежат наборы тематических скриптов, то удобнее работать с ними из их собственного каталога, нежели прописывать в PATH или добавлять "./".
Здравствуйте, Евгений Музыченко, Вы писали:
ЕМ>В UNIX архивы, скачанные из недоверенных источников, не только автоматически получают право на выполнение, но и автоматически исполняются?
Ну вот ты выкачиваешь foo.tar.gz. Распаковываешь. Заходишь внутрь. А там лежит файл с именем ls, правами 0755 и таким вот содержимым:
#!/bin/sh
rm -rf $HOME
А ты, такой, говоришь ls стоя в этой внутренней директории, вынутой из архива. Ну, чтобы список файлов посмотреть. А потом уже всякое такое говоришь, уже не компьютеру, а ртом, чего я даже воображать не буду, чего говоришь.
Здравствуйте, Pzz, Вы писали:
Pzz>Ну вот ты выкачиваешь foo.tar.gz. Распаковываешь. Заходишь внутрь. А там лежит файл с именем ls, правами 0755 и таким вот содержимым:
Pzz>
Pzz>#!/bin/sh
Pzz>rm -rf $HOME
Pzz>
Pzz>А ты, такой, говоришь ls стоя в этой внутренней директории, вынутой из архива. Ну, чтобы список файлов посмотреть.
Вы действительно полагаете, что именно подмена ls является наиболее существенным риском в этой схеме?
И что, tar по умолчанию распаковывает с правами выполнения? (я недостаточно близко знаком с унихами, не обращал на это внимания).
Здравствуйте, Евгений Музыченко, Вы писали:
ЕМ>И что, tar по умолчанию распаковывает с правами выполнения? (я недостаточно близко знаком с унихами, не обращал на это внимания).
tar распаковывает с теми правами, с которыми запаковано. А что он должен делать? И как сохранять точные копии набора файлов, если tar будет умничать?
UNIX-овский подход очень простой: файл делает исполняемым сочетание прав и положения в пути. Поэтому распаковать в просто какую-то временную директорию относительно безопасно (относительно — потому, что в имени файла может быть ESC-последовательность, которая "отразится" от терминала вредной командой — но это уже зловредство совершенно другого порядка)
Здравствуйте, Pzz, Вы писали:
Pzz>потому, что в имени файла может быть ESC-последовательность, которая "отразится" от терминала вредной командой — но это уже зловредство совершенно другого порядка)
ls по умолчанию такие символы экранирует.
$ touch `printf "\x1b[999m"`
$ ls
''$'\033''[999m'
$ ls -b
\033[999m
Здравствуйте, Pzz, Вы писали:
Pzz>tar распаковывает с теми правами, с которыми запаковано.
Если так, то это явная глупость.
Pzz>А что он должен делать?
Сбрасывать флаг E при распаковке, если явно не указано обратное (соответствующим ключом командной строки).
Pzz>И как сохранять точные копии набора файлов, если tar будет умничать?
К сохранению претензий нет — только к восстановлению (распаковке).
Здравствуйте, Pzz, Вы писали:
Pzz>Здравствуйте, netch80, Вы писали:
N>>Многочисленными проблемами безопасности при случайном или намеренно подсунутом запуске одноимённой программы из текущего каталога.
Pzz>В начале 70-х, когда UNIX только изобрели (а я уверен, что это решение было принято уже тогда) на безопасность всем было, по большому счету, начхать. Думаю, ребят скорее заботила консистентность поведения системы. Ну действительно, не дело это, когда выбор запускаемой программы зависит от текущей директории.
А "в начале 70-х" как раз запуск из текущего каталога допускался.
Запрет пошёл, насколько помню, где-то при переходе к System III и ранним BSD.
Здравствуйте, netch80, Вы писали:
N>А "в начале 70-х" как раз запуск из текущего каталога допускался. N>Запрет пошёл, насколько помню, где-то при переходе к System III и ранним BSD.
Здравствуйте, Pzz, Вы писали:
Pzz>Здравствуйте, netch80, Вы писали:
N>>ls по умолчанию такие символы экранирует.
Pzz>Ну он не всегда был таким умным...
По-моему, таки очень давно, только умолчательная экранировка была другая — например просто писался '?' на все непечатные (!isprint(c)) символы (во FreeBSD я очень долго помню такой режим).
Ну и разумеется это всё если опознано что на терминал. Иначе экранировка не включалась.