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 权限,所以我建议不要使用这种方法,即使它提供了一些基本保护。
我正在尝试将一些文本推送到需要 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 权限,所以我建议不要使用这种方法,即使它提供了一些基本保护。