Spec-Zone.ru › Elisp

Рекомендации по безопасности

Как и любое приложение, 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 могут помочь избежать подобных проблем, они не являются панацеей; например, в платформе POSIX shell-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-2022 Free Software Foundation, Inc.
Licensed under the GNU GPL license.
https://www.gnu.org/software/emacs/manual/html_node/elisp/Security-Considerations.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API