我可以在哪里存储仅用于以 root 身份运行的实用程序或脚本的环境变量?

我可以在哪里存储仅用于以 root 身份运行的实用程序或脚本的环境变量?

我曾尝试在无头服务器中使用 gnome-keyring,但出现错误,因此回到环境变量。https://unix.stackexchange.com/questions/690295/error-secret-tool-cannot-create-an-item-in-a-locked-collection

我尝试使用 .env 和 .profile,但是后者未被 Bash 调用,而是使用 .bash_profile。在 /etc/environment 与 .profile 中设置 PATH 变量

我不确定当我未登录运行脚本或实用程序时这是否有效,即使它们以 root 权限运行。例如,通过电子邮件发送报告的 cron.daily 脚本。我想将 $EMAIL 传递给它,并将该变量传递给其他实用程序(如 apticron),以确保安全性和易于更改。

这个答案建议使用指向配置文件的环境变量,我假设我可以将所有权组和权限设置为该文件。但是有没有更常规的方法呢?https://stackoverflow.com/a/26030125/4240654

编辑:我刚刚在 .bashrc 中设置了变量后测试了脚本,它们似乎可以正常工作。仍在测试 Apticron 等实用程序……结果发现它不接受EMAIL=$EMAIL/etc/apticron/apticron.conf 中的变量,可能是因为它不在根 ENV 中运行。好吧,实际上在 /usr/lib/apticron/apticron.conf 中注释掉后,这两个现在都可以正常工作EMAIL="root"(使用纯文本电子邮件时不需要这样做,因此这不一致,并且仅适用于 Apticron)。EMAIL=$(cat .env)但是使用文件仍然无法与 Apticron 一起使用。


可能的解决方案:

前两个需要打开文件或存储,并在服务器虚拟机上保持打开状态,这与使用 .env 等受限访问文件相同。

.bashrc 默认权限为 644,因此其他用户均可读取,但 /root 目录权限为 700,因此不可遍历?更重要的是,即使仅由 root 设置的环境变量,所有用户都可以访问。可能是因为所有子进程都继承了父环境变量。Postfix 将其密码存储在 root 拥有的权限为 600 的单独文件中,然后对其进行哈希处理以在内存中使用。

答案1

您应该执行以下操作:

  1. 打开你的终端

  2. 执行sudo -ssu

  3. 执行cd ~/

  4. 执行nano .bashrc

  5. 然后在那里添加变量,例如:

welcome_message="WELCOME!";
echo $welcome_message;
  1. 关闭并重新打开终端

答案2

我认为最好的方法是使用由 root 拥有的具有严格权限的文件。我创建了一个名为 .env 的目录,它曾经是用于设置环境变量的文件。所以我有一个~/.env/EMAIL可以在脚本中调用$(cat ~/.env/EMAIL)并与 Apticron 一起使用的文件。它只有一个值:[电子邮件保护]

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

或者为 .env/ 中的所有新文件设置 600,使用: 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

相关内容