繁体   English   中英

将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

之后,您可以将-S参数用于sudo以从外部文件读取密码,如下所示。

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

再一次,将用户密码存储在/etc/shadow会带来巨大的安全风险,特别是如果用户具有sudoer特权,因此即使这种方法提供了一些基本保护,我也不建议这样做。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM