为什么我不能将内容作为sudo回显到新文件中?

时间:2014-01-03 02:41:10

标签: bash echo sudo

我刚刚遇到这个奇怪的问题,我似乎无法深究它。我正在尝试将配置文件添加到/etc/sudoers.d/但获得权限被拒绝。在下面的示例中,文件“tweedle”不存在,并且:

drwxr-xr-x  2 root root   4.0K Jan  2 18:27 sudoers.d/

所以这是命令:

$ sudo echo "tweedle ALL=(ALL) ALL" > /etc/sudoers.d/tweedle
-bash: /etc/sudoers.d/tweedle: Permission denied

当我把它分成两个命令时它甚至不起作用:

$ sudo touch /etc/sudoers.d/tweedle
$ sudo echo "poodle" > /etc/sudoers.d/tweedle

当我在本地测试时,同样的问题:

$ cd ~
$ mkdir -m 755 tweedle
$ sudo chown root:root tweedle
$ sudo echo "battle" > ~/tweedle/beetle
-bash: /home/spanky/tweedle/beetle: Permission denied
$ sudo touch tweedle/beetle
$ sudo echo "battle" > tweedle/beetle
-bash: tweedle/beetle: Permission denied

没有sudo,一切都很好:

$ cd ~
$ mkdir poodle
$ echo "noodle" > poodle/bottle
$ cat poodle/bottle
noodle

思想?

2 个答案:

答案 0 :(得分:11)

echo命令正在以root运行,但重定向由shell完成,因此它作为当前用户执行,而不是root

最简单的解决方案是调用root shell来运行命令和重定向。

而不是:

sudo echo line > file

试试这个:

sudo sh -c 'echo line > file'

sudo bash -c 'echo line > file'

答案 1 :(得分:6)

答案是使用" tee"用管道,我不熟悉的命令,所以你可以在下半场使用sudo:

$ echo "tweedle ALL=(ALL) ALL" | sudo tee /etc/sudoers.d/tweedle