[英]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
之后,您可以将-S
参数用于sudo以从外部文件读取密码,如下所示。
sudo -S bash -c 'echo "some text" > /etc/test' <~/.password
再一次,将用户密码存储在/etc/shadow
会带来巨大的安全风险,特别是如果用户具有sudoer特权,因此即使这种方法提供了一些基本保护,我也不建议这样做。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.