sudo许可否认


3

我运行了这段代码:

sudo cat <<EOF | sudo sed -e "s,%,$,g" >/etc/init.d/dropbox
  echo "Hello World"
EOF

但即使如此,我得到“权限被拒绝”,因为你必须是root用户才能在/etc/init.d目录中进行更改。不知何故,我上面的命令不起作用。

有办法解决这个问题吗?

Answers:


7

重定向到文件由bash处理。因此它不会继承sudo授予的权限。

使用sudo tee写入文件,作为根。

尝试这个:

cat | sed -e 's,%,$,g' | sudo tee /etc/init.d/dropbox << EOF
  echo "Hello World"
EOF

请注意,$,可能会解释内部双引号。


它仍然给我“许可被拒绝”。
8k_of_power 2010年

我编辑了答案。使用sudo tee而不是。
Benoit 2010年

4

你可以给予自己持久的权利
# sudo -s

然后你的命令(不再需要sudo)并退出
# exit

编辑:
我假设你问Ubuntu相关,因为你的问题被标记了。在像Suse这样的其他发行版中,您将有能力使用
# su
而不是# sudo -s


或者只是获得持久的su权利su
Chetan 2010年

1
@Chetan:这在Ubuntu中不起作用。(这个问题用Ubuntu标记,所以我希望它在这个问题上)
MOnsDaR 2010年

对不起,我忘了提到这是在一个脚本中所以我不能做sudo来运行它。
8k_of_power 2010年

如果它在脚本中你可以用sudo启动脚本据我所知:# sudo ./myScript
MOnsDaR 2010年

但由于它是一个脚本,我不能在脚本中使用sudo -s导致它之后的行不会运行。
8k_of_power 2010年

0

这部分:sudo sed -e "s,%,$,g" >/etc/init.d/dropbox被视为:

sudo somecommand --put the result of the sudo command into--> /etc/init.d/dropbox

以同样的方式:

ls somedirectory > filename
ls somedirectory --put the result of the ls command into--> filename

这意味着文件写入将以当前用户身份完成,而不是以root身份完成。

您可以tee在他的回答中使用Benoit节目来解决它。


感谢您对问题的描述。但是我该如何解决呢?
8k_of_power 2010年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.