使用 bash 别名修改受保护的文件

Modify protected file with bash alias

我的 .bashrc 文件中有以下别名,

alias genpass="tr -dc A-Za-z0-9 </dev/urandom | head -c 13 ; echo ''"
alias savepass='echo ": $(genpass)" >> .secret'
alias getlastpass='tail .secret -n 1

此别名的目的是生成一个密码,稍后能够检索最后一个密码。我将密码存储在一个名为 .secret 的文件中,具有以下权限,

-rw------- 1 root root 92 Sep 17 12:48 .secret

所以只有 root 用户可以读写文件。

所以我在这里面临的问题是以下问题,当我尝试 运行

sudo savepass

回来了

bash: .secret: Permission denied

我认为这是因为当此别名未作为 root 执行时,它是此文件的所有者。

我不知道如何解决这个问题,所以欢迎任何帮助,也欢迎对这种存储密码的形式提出批评。我的最终目标是能够从终端存储密码并能够在以后以保存的方式检索它。如果您知道更好的方法,请告诉我,这也是一个有效的答案。请记住,我想从终端执行此操作而无需安装任何花哨的程序,只需 bash 脚本。

如果您的非特权用户可以更改该文件,您为什么要以 root 权限存储它?这不会给您带来任何好处。用需要读写的用户的用户id存储文件,停止使用sudo.

您的解决方案中的问题是,echo 是 运行 具有 root 权限。但是重定向仍然是由 shell 运行 宁 sudo 完成的。而且那个shell没有root权限。

如果你仍然想保持你的方法,你必须 运行 tee -a sudo。为此,您必须将 sudo 放在别名中。但是现在写一个函数而不是别名可能会更好。

savepass () {
  echo ": $(genpass)" | sudo tee -a .secret
}

顺便说一句:如果您想将密码存储在明文文件中,请使用其他工具也使用的 netrc 语法。