Рейтинг:0

Где я могу хранить переменную среды только для утилит или скриптов, которые запускаются от имени пользователя root?

флаг in

Я пытался использовать gnome-keyring на безголовом сервере, но у меня возникла ошибка, поэтому я вернулся к переменным среды. https://unix.stackexchange.com/questions/690295/error-secret-tool-cannot-create-an-item-in-a-locked-collection

Я пробовал использовать .env и .profile, но последний не вызывается Bash, а используется .bash_profile. Установка переменной PATH в /etc/environment и .profile

Я не уверен, что это сработает для скриптов или утилит, когда я не вошел в систему, чтобы запустить их, даже если они работают с привилегиями root. Например, скрипт cron.daily, который отправляет отчет по электронной почте. Я хочу передать ему $EMAIL, а также передать эту переменную другим утилитам, таким как apticron, для безопасности и простоты изменения.

В этом ответе предлагается использовать env var, указывающий на файл конфигурации, для которого я предполагаю, что могу установить группу владения и разрешения. Но есть ли более традиционный метод? https://stackoverflow.com/a/26030125/4240654

РЕДАКТИРОВАТЬ: я только что протестировал сценарии после установки переменных в .bashrc, и они, похоже, работают. Все еще тестирую такие утилиты, как Apticron... которые, как оказалось, не принимают такие переменные, как ЭЛЕКТРОННАЯ ПОЧТА=$ЭЛЕКТРОННАЯ ПОЧТА в /etc/apticron/apticron.conf, вероятно, потому что он не запущен в корневом ENV. Хорошо, на самом деле оба они работают сейчас после комментирования ЭЛЕКТРОННАЯ ПОЧТА="корень" в /usr/lib/apticron/apticron.conf (что не обязательно должно происходить при использовании обычного текстового сообщения электронной почты, так что это непоследовательно и только для Apticron). Используя файл и ЭЛЕКТРОННАЯ ПОЧТА=$(cat .env) все еще не работает с Apticron.


Возможные решения:

  • используя файл GPG:
  • с использованием проходят: https://www.passwordstore.org/
  • использование платных секретных служб (хотелось бы избежать)

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

.bashrc по умолчанию имеет значение 644, поэтому его может прочитать любой другой пользователь, хотя каталог /root равен 700, поэтому его нельзя пройти? Что еще более важно, переменные окружения, даже установленные только пользователем root, доступны всем пользователям. Возможно, потому, что все дочерние процессы наследуют родительские переменные окружения. Postfix хранит свой пароль в отдельном файле с 600 правами доступа, принадлежащем пользователю root, а затем хэширует его для использования в памяти.

tripleee avatar
флаг nz
Не совсем понятно, чего вы хотите добиться. `/etc/environment` подходит для установки общесистемной переменной, в то время как частные файлы запуска `root` подходят для установки чего-то конкретно для учетной записи `root`. `.profile` также будет прочитан Bash, _если_ у вас нет `.bash_profile` (который в любом случае должен читать `.profile`, но тогда это ваша ответственность).
alchemy avatar
флаг in
@tripleee.. мой .profile env var не работает, и у меня нет .bash_profile... Я пытаюсь, чтобы var был доступен для чтения только сценарию или утилите запуска root, поэтому /etc/все, что я думаю, отсутствует.Я смотрю либо на заблокированный пользовательский файл .myenv. Я думаю, что .bash_profile env vars будет доступен любому процессу, работающему от имени пользователя root? (опять же, если это так, это все равно проигранная битва). Я просто смотрю, что еще имеет доступ к корневым env vars. Надеюсь, что проясняет мой беспорядок вопроса.
tripleee avatar
флаг nz
`.bash_profile` запускается _interactive_ или _login_ экземплярами оболочки _Bash_. Скрипты, которые вы запускаете из `cron` или в качестве системной службы, не являются ни интерактивными, ни оболочками входа в систему, а часто даже сценариями Bash вообще.
Рейтинг:0
флаг in

Я думаю, что лучше всего использовать файл со строгими правами доступа, принадлежащий пользователю root. Я создал каталог с именем .env, который раньше был файлом для установки переменных env. Итак, у меня есть файл ~/.env/ЭЛЕКТРОННАЯ ПОЧТА что я могу позвонить с $(кот ~/.env/EMAIL) в скриптах и ​​работает с Apticron. В нем есть только одно значение: [email protected].

mkdir ~/.env && echo '[email protected]' >> ~/.env/EMAIL && chmod 600 ~/.env/EMAIL

Или установить 600 для всех новых файлов в .env/ используйте: mkdir ~/.env && sed -i 's/defaults\t/defaults,acl\t/' /etc/fstab && mount -o,remount / && setfacl -dm u::rw,g::x,o: :x .env && chmod -x .env && echo '[email protected]' >> ~/.env/EMAIL

Рейтинг:0
флаг jp

Вот что вы должны сделать:

  1. откройте свой терминал

  2. выполнять судо -с или же су

  3. выполнять компакт-диск ~/

  4. выполнять нано .bashrc

  5. затем добавьте туда свои переменные, например:

welcome_message="ДОБРО ПОЖАЛОВАТЬ!";
эхо $welcome_message;
  1. закрыть и снова открыть терминал
alchemy avatar
флаг in
Спасибо, Нак. Я знаю, что могу поместить их в .bash_profile или .bashrc, но я надеялся, что есть более безопасное место для их размещения.
NacreousDawn596 avatar
флаг jp
что вы подразумеваете под "безопасным местом"?
alchemy avatar
флаг in
например, зашифрованы в связке ключей или, по крайней мере, подальше от глаз приложений, которые имеют доступ к env vars. прочитайте третью ссылку для получения дополнительной информации.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.