我曾尝试在无头服务器中使用 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 一起使用。
可能的解决方案:
- 使用 GPG 文件:
- 使用
pass
:https://www.passwordstore.org/ - 使用付费机密服务(希望避免)
前两个需要打开文件或存储,并在服务器虚拟机上保持打开状态,这与使用 .env 等受限访问文件相同。
.bashrc 默认权限为 644,因此其他用户均可读取,但 /root 目录权限为 700,因此不可遍历?更重要的是,即使仅由 root 设置的环境变量,所有用户都可以访问。可能是因为所有子进程都继承了父环境变量。Postfix 将其密码存储在 root 拥有的权限为 600 的单独文件中,然后对其进行哈希处理以在内存中使用。
答案1
您应该执行以下操作:
打开你的终端
执行
sudo -s
或su
执行
cd ~/
执行
nano .bashrc
然后在那里添加变量,例如:
welcome_message="WELCOME!";
echo $welcome_message;
- 关闭并重新打开终端
答案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