Там должен так или иначе установить переменную среды только для чтения?

Главная причина для 114 МБ (openSUSE 12.1's kernel-default-3.1.0-1.2.1.x86_64.rpm (34 МБ)), то, что модули ядра, которые включены с об/мин, являются коллективно довольно большими.

От извлеченного об/мин, как пример:

$ du -sh lib/modules/3.1.0-1.2-default/kernel/*
1.3M    lib/modules/3.1.0-1.2-default/kernel/arch
1004K   lib/modules/3.1.0-1.2-default/kernel/crypto
60K     lib/modules/3.1.0-1.2-default/kernel/Documentation
101M    lib/modules/3.1.0-1.2-default/kernel/drivers
13M     lib/modules/3.1.0-1.2-default/kernel/fs
32K     lib/modules/3.1.0-1.2-default/kernel/kernel
252K    lib/modules/3.1.0-1.2-default/kernel/lib
16K     lib/modules/3.1.0-1.2-default/kernel/mm
12M     lib/modules/3.1.0-1.2-default/kernel/net
72K     lib/modules/3.1.0-1.2-default/kernel/security
9.2M    lib/modules/3.1.0-1.2-default/kernel/sound

Это показывает, что существует приблизительно 101 МБ драйверов (который является чрезвычайно аппаратными модулями реализации возможностей (USB, сетевые платы, устройства хранения и т.д.).

Все ядра для современных дистрибутивов собираются иметь подобные размерные пакеты, если они не разделяют менее общие модули на подпакеты.

3
04.03.2013, 01:21
2 ответа

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

Вы рассмотрели использование ограниченной оболочки, как rbash? Вы могли установить rbash работать readonly TEST_ENV) в его сценарии запуска. rbash может быть слишком строгим, хотя, но это обращается до хорошей степени к повышению проблем комментариев.

Среда является частью чтения-записи каждого процесса (см. здесь и здесь для деталей), мало того, что процесс может записать непосредственно в часть данных (через environ[]), это может изменить указатели на него. Вы смогли делать что-то с этим (т.е. перемещать к странице только для чтения), если Вы являетесь опытными в блоке и можете найти свой путь вокруг crt запустите код, но я не рекомендую это ;-)

Если существуют определенные команды, которые пользователи выполняют, который должен иметь определенную среду, Вы можете устанавливать только группу - выполняют и используют sudo установить корректные переменные (например, через /etc/environment или env_file директива) и выполненный команда как определенная группа (сохраняющий uid). Поддержка последних версий noexec на большинстве платформ, которые могут использоваться для предотвращения выполнения новой оболочки (хотя банка может повредить программы который законно fork() и exec()).

Как последняя опция Вы можете использовать LD_PRELOAD и Ваша собственная библиотека для установки управляемой среды для некоторых/всех пользовательских процессов путем обертывания соответствующих функций libc (getenv() putenv() и т.д.). libfaketime делает точно это в течение времени связанные функции libc. Существует менее известный инструмент, названный timetravel, который делает подобный, но также и рычаги setenv() и getenv() чтобы удержать контроль над LD_PRELOAD перед лицом бедственной ситуации.

Самый устойчивый подход должен отфильтровать setenv() unsetenv() putenv() (и возможно clearnv()) вызовы для предотвращения модификации и фильтра getenv() так, чтобы это всегда возвратило необходимое значение (возможно из файла). Этот подход не предотвратит непосредственное управление памятью среды через environ[], но, пока Вы управляете getenv() любой процесс, который полагается на libc API, должен видеть Ваше значение. bash использование environ[] непосредственно, когда это инициализирует, но также и вызовы getenv().

6
27.01.2020, 21:10

Переменные только для чтения могут быть установлены в POSIX совместимые оболочки с помощью readonly команда.

readonly VAR=foo   # POSIX
declare -r VAR=foo # bash
export VAR

Это никоим образом не средство защиты, чтобы препятствовать тому, чтобы пользователь изменил его. Пользователь может всегда порождать новую оболочку и заменять переменную.

3
27.01.2020, 21:10
  • 1
    да, который является вещью волноваться по поводу :( –  Ram 02.03.2013, 08:33
  • 2
    Отметьте это zsh позволяет typeset +r VAR выключить атрибут "только для чтения". –  Stéphane Chazelas 02.03.2013, 09:48
  • 3
    Также отметьте ту AT&T реализации ksh экспортируйте атрибут "только для чтения" экспортируемых переменных к среде через A__z специальная переменная, таким образом, в недавно запущенном ksh, переменная все еще будет только для чтения (хотя, если у Вас будет доступ к env, или perl или любая другая оболочка или инструмент, который может изменить переменную среды, которая не будет мешать Вам делать вещи как env VAR=new-value ksh –  Stéphane Chazelas 02.03.2013, 10:20

Теги

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