Вопросы безопасности
Как и любое приложение, Emacs можно запускать в защищённой среде, где операционная система обеспечивает соблюдение правил доступа и тому подобного. При некоторой осторожности приложения на основе Emacs также могут быть частью периметра безопасности, который проверяет соблюдение таких правил. Хотя настройки Emacs по умолчанию хорошо подходят для типичной среды разработки программного обеспечения, в средах с ненадёжными пользователями, среди которых могут быть злоумышленники, их может потребоваться изменить. Ниже приведён обзор вопросов безопасности, который может быть полезен при разработке таких приложений. Он ни в коем случае не является исчерпывающим и призван дать представление о связанных с безопасностью вопросах, а не служить контрольным списком.
- Локальные переменные файлов
-
Посещаемый Emacs файл может содержать настройки переменных, влияющие на буфер, в котором открыт этот файл; см. Локальные переменные файла. Аналогично, в каталоге могут быть заданы локальные значения переменных, общие для всех файлов в этом каталоге; см. Локальные переменные каталога. Хотя Emacs прилагает некоторые усилия, чтобы защититься от неправильного использования этих переменных, уязвимость может возникнуть просто из-за того, что пакет задаёт
safe-local-variableсо слишком оптимистичным значением — такая проблема встречается слишком часто. Чтобы отключить эту возможность как для файлов, так и для каталогов, задайте дляenable-local-variablesзначениеnil. - Контроль доступа
-
Хотя Emacs обычно соблюдает права доступа базовой операционной системы, в некоторых случаях он обрабатывает доступ особым образом. Например, для имён файлов могут быть заданы обработчики, которые особым образом работают с файлами и выполняют собственную проверку доступа. См. Создание «магических» имён файлов. Кроме того, буфер может быть доступен только для чтения, даже если соответствующий файл доступен для записи, и наоборот, что может приводить к появлению сообщений, таких как ‘Файл passwd защищён от записи; всё равно попытаться сохранить? (да или нет)’. См. Буферы, доступные только для чтения.
- Аутентификация
-
В Emacs есть несколько функций для работы с паролями, например
read-passwd. См. Чтение пароля. Хотя эти функции не пытаются разглашать пароли, их реализация не защищает от целеустремлённых злоумышленников, имеющих доступ к внутренним механизмам Emacs. Например, даже если код Elisp используетclear-string, чтобы стереть пароль из памяти после его использования, остатки пароля всё ещё могут находиться в списке свободной памяти, управляемой сборщиком мусора. См. Изменение строк. - Внедрение кода
-
Emacs может передавать команды многим другим приложениям, и приложениям следует следить за тем, чтобы строки, передаваемые в качестве операндов этих команд, не интерпретировались как директивы. Например, при использовании команды оболочки для переименования файла a в b не следует просто использовать строку
mv a b, поскольку любое из имён файлов может начинаться с ‘-’ или содержать метасимволы оболочки, например ‘;’. Хотя такие функции, какshell-quote-argument, помогают избежать подобных проблем, они не являются панацеей; например, на платформе POSIXshell-quote-argumentэкранирует метасимволы оболочки, но не начальный символ ‘-’. В MS-Windows экранирование символа ‘%’ предполагает, что в именах переменных среды нет символа ‘^’. См. Аргументы оболочки. Обычно безопаснее использоватьcall-process, а не подоболочку. См. Создание синхронного процесса. Ещё безопаснее использовать встроенные функции Emacs; например, используйте(rename-file "a" "b" t)вместо вызоваmv. См. Изменение имён и атрибутов файлов. - Системы кодирования
-
Emacs пытается определить системы кодирования файлов и сетевых соединений, к которым он обращается. См. Системы кодирования. Если Emacs сделает неверный вывод или другие участники сетевого соединения не согласятся с выводами Emacs, результирующая система может быть ненадёжной. Кроме того, даже при правильном определении Emacs часто может использовать байты, с которыми не справляются другие программы. Например, хотя для Emacs нулевой байт — это такой же символ, как и любой другой, многие другие приложения считают его признаком конца строки и неправильно обрабатывают строки или файлы, содержащие нулевые байты.
- Переменные среды и конфигурации
-
Стандарт POSIX определяет несколько переменных среды, которые могут влиять на поведение Emacs. Любая переменная среды, имя которой состоит только из прописных букв ASCII, цифр и символа подчёркивания, может влиять на внутреннее поведение Emacs. Emacs использует несколько таких переменных, например
EMACSLOADPATH. См. Поиск библиотек. На некоторых платформах значения некоторых переменных среды (например,PATH,POSIXLY_CORRECT,SHELL,TMPDIR) должны быть настроены надлежащим образом, чтобы обеспечить стандартное поведение любой служебной программы, которую может вызывать Emacs. Даже такие, на первый взгляд безобидные, переменные, какTZ, могут иметь последствия для безопасности. См. Среда операционной системы.К настройкам и другим переменным Emacs относятся те же соображения. Например, если переменная
shell-file-nameуказывает на оболочку с нестандартным поведением, приложение на основе Emacs может работать неправильно. - Установка
-
Если после установки Emacs иерархию каталогов установки могут изменять ненадёжные пользователи, приложению нельзя доверять. Это также относится к иерархиям каталогов программ, используемых Emacs, и файлов, которые Emacs читает и записывает.
- Доступ к сети
-
Emacs часто обращается к сети, и, возможно, вы захотите настроить его так, чтобы он не выполнял обращения к сети, которые обычно выполняет. Например, если не задать для
tramp-modeзначениеnil, имена файлов определённого формата будут интерпретироваться как имена сетевых файлов, и такие файлы будут загружаться по сети. См. Руководство по Tramp в Руководстве по Tramp. - Состояния гонки
-
Для приложений Emacs характерны те же проблемы, связанные с состояниями гонки, что и для других приложений. Например, даже если
(file-readable-p "foo.txt")возвращаетt, файл foo.txt может оказаться недоступным для чтения, поскольку другая программа изменила права доступа к файлу между вызовомfile-readable-pи текущим моментом. См. Проверка доступности. - Ограничения ресурсов
Когда в Emacs заканчивается память или другие ресурсы операционной системы, его поведение может стать менее надёжным: вычисления, которые обычно завершаются успешно, могут прерваться и вернуться на верхний уровень. Это может привести к тому, что Emacs не выполнит операции, которые обычно выполнил бы.
Copyright © 1990-1996, 1998-2026 Free Software Foundation, Inc.
Licensed under the GNU GPL license.
https://www.gnu.org/software/emacs/manual/html_node/elisp/Security-Considerations.html