Bash 将文本回显到 sudo 文件中

Bash echo text into sudo file

我正在尝试将一些文本推送到需要 sudo:

的文件中
sudo echo "some text" > /etc/path/to/file

但我不断收到以下错误:

bash: /etc/path/to/file: Permission denied

我可以用 nano 来完成,但我有点需要以编程方式来完成。 > 运算符有问题吗?有没有我可以改用的脚本?

Shell(在本例中为 bash)在 运行 命令之前首先执行重定向 (>)。因此 /etc/path/to/file 将在带有 sudo 的命令运行之前创建,普通用户没有足够的权限创建文件 /etc/path/to/file,因此出现有关权限的错误消息。

你可以这样做:

sudo bash -c 'echo "some text" > /etc/path/to/file'

或使用tee:

echo "some text" | sudo tee /etc/path/to/file

heemayl 已经解释了权限问题,但是您需要考虑到 运行 sudo 命令仍然需要您手动输入用户密码。也就是说,除非您在 sudoers 文件中指定用户 运行 sudo 不需要密码,我希望情况并非如此。

因此,为了避免手动输入密码,您有几种可能性,其中 几乎所有都是一个非常糟糕的主意,因为它们基本上要求您存储您的用户密码在常规 /etc/shadow 文件之外。

您可能做的最好的事情就是将您的密码存储在一个普通文件中,并严格限制对它的访问权限。

echo "password" > ~/.password && chmod 400 ~/.password

之后你可以使用 sudo 的 -S 参数来从外部文件读取密码。

sudo -S bash -c 'echo "some text" > /etc/test' <~/.password

再一次,将用户密码存储在 /etc/shadow 之外是一个巨大的安全风险,特别是如果用户具有 sudoer 权限,所以我建议不要使用这种方法,即使它提供了一些基本保护。