我刚刚遇到这个奇怪的问题,我似乎无法深究它。我正在尝试将配置文件添加到/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
思想?
答案 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