Я пытаюсь определить, наблюдаются ли в Linux переменные окружения для процесса другими (не-root) пользователями.
Непосредственный вариант использования - помещение секретов в переменные окружения. Во многих местах в Интернете это обсуждается как небезопасное, но я не смог сосредоточиться на точной точке воздействия в Linux.
Обратите внимание, что я не говорю о том, чтобы помещать в файлы секреты открытого текста. Также обратите внимание, что я не говорю о доступе к учетной записи root (я рассматриваю попытки скрыть секреты от злоумышленника с root-правом как не начавшегося).
Похоже, что этот вопрос адресован моему, с комментариями, которые классифицируют переменные среды как совершенно не защищенные или просто запутанные, но как получить к ним доступ?
В моих тестах один непривилегированный пользователь не может наблюдать переменные среды для другого пользователя через таблицу процессов ('ps auxwwe'). Команды, которые устанавливают переменные среды (например, export), являются встроенными оболочками, которые не попадают в таблицу процессов и, соответственно, не находятся в / proc / $ pid / cmdline. / proc / $ pid / environment доступен только для чтения по UID владельца процесса.
Возможно путаница между различными операционными системами или версиями. Различные (недавние) источники в Интернете осуждают небезопасность переменных среды, но моя выборочная проверка различных версий Linux, похоже, указывает на то, что это невозможно, по крайней мере, до 2007 года (возможно, в дальнейшем, но я не имею ящиков на руку на проверку).
В Linux, как непривилегированный пользователь может наблюдать переменные среды для чужих процессов?
источник
Переменные среды достаточно безопасны. Вопрос, на который вы ссылаетесь, заключается в том, что если система взломана, единственным преимуществом безопасности при использовании переменных среды над файлом конфигурации является неясность. Это означает, что если кто-то получил root-доступ, он может получить доступ к обоим.
Вопрос о том, считается ли использование переменных среды для секретных данных «неясным», также является спорным. Это очень распространенная практика, и поэтому я бы не стал считать ее такой.
Вы можете получить доступ только к данным, хранящимся в переменной среды, в 2 местах:
1. Рабочая среда процесса
Когда процесс запущен, можно получить доступ к переменным среды этого процесса
/proc/$PID/environ
. Тем не менее, только пользователь, который владеет процессом, или root, может получить доступ к этому файлу.2. Источник переменных среды
Если вы используете скрипт инициализации, и переменные хранятся в этом скрипте инициализации, переменные, конечно, можно получить, прочитав этот скрипт.
Или, если переменные среды приходят откуда-то еще, то где бы это ни было.
3. вывод ps
Да, я знаю, что сказал 2, и в любой приличной системе это будет 2. Однако если администратор не знает, что он делает, можно открыть 3-й авеню.
Если процесс запускается через что-то вроде этого
sh -c 'cd /foo/bar; POP=tart /my/executable'
, то этотsh
процесс будет виден вps
:источник
e
модификаторps
. Он также позволяет просматривать только среду процессов, которыми владеет пользователь.export FOO=bar
), то она также может появиться в файле истории (например~/.bash_history
), если пользователь не предпринял меры предосторожности, чтобы не сохранить его, или удалить его.