Как правильно установить «less» и «lesspipe»?

Я не думаю, что запуск не -исполняемого файла завершается сбоем намеренно для предотвращения случайного выполнения потенциально опасного кода. Это всего лишь часть семантики execve:, она не работает с EACCES, если «Разрешение на выполнение отказано для файла, скрипта или интерпретатора ELF». (Я цитирую справочную страницу Linux execve. POSIX говорит нечто подобное :«Отказано в разрешении на поиск для каталога, указанного в префиксе пути к новому файлу образа процесса, или новый файл образа процесса отказывает в разрешении на выполнение». )Unix/Linux никогда особо не заботились о том, чтобы пользователи не сбились с ног.

Я думаю, что объяснение более прозаично. :Спецификации для выполнения и поиска различны. Прямое выполнение просит ядро ​​выполнить заданную команду, что обеспечивает привилегии выполнения. Поиск файла просто определяется как его чтение и выполнение; на самом деле справочная страница bashявно указывает, что «Файл поиск в PATHне обязательно должен быть исполняемым». POSIX говорит «Однако, в отличие от обычного командного поиска, файл, который ищет утилита точка , не обязательно должен быть исполняемым».(.эквивалентно source.)

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

$ cp /bin/ls.
$ chmod 644 ls
$ /lib64/ld-2.26.so./ls

Интересна точка зрения Кусалананды о сравнении bashsourceи POSIX .. В режиме, отличном от -POSIX, если sourceзадан аргумент без пути, он пытается найти его в PATH, а если не находит, ищет в текущем каталоге; в режиме POSIX это не так, потому что POSIX это запрещает:

Some older implementations searched the current directory for the file, even if the value of PATH disallowed it. This behavior was omitted from this volume of POSIX.1-2008 due to concerns about introducing the susceptibility to trojan horses that the user might be trying to avoid by leaving dot out of PATH.

Это на самом деле мало что меняет в данном обсуждении, поскольку аргумент с путем будет обработан sourceили .в любом случае. (И действительно, всегда следует использовать путь, даже если только относительный,для sourceаргументов, чтобы избежать сюрпризов при попытке sourceчего-то, что также на вашем PATH. Попробуйте создать файл с именем testи найти его с source testв bash, чтобы понять, что я имею в виду.)

0
11.02.2020, 15:08
0 ответов

Теги

Похожие вопросы