通过重定向或者管道的Sudo权限被拒绝

时间:2020-03-05 15:30:04  来源:igfitidea点击:

在本教程中,将介绍将sudo命令与重定向或者管道一起使用时的用法。

当将sudo与重定向(>)或者管道(|)一起使用时,我们将在bash输出中获得Permission拒绝错误消息。
在此进一步,将介绍解决此问题的不同方法。

与tee一起使用sudo

例如,要将“ echo 1”命令的输出重定向到“ ip_forward”文件,请运行:

$sudo echo 1 > /proc/sys/net/ipv4/ip_forward
bash: /proc/sys/net/ipv4/ip_forward: Permission denied

上面的sudo命令导致权限被拒绝,因为重定向是由没有写权限的shell完成的。

我们可以将sudo命令与tee命令一起使用来解决此错误:

$echo 1 | sudo tee /proc/sys/net/ipv4/ip_forward

使用上述方法,在管道之前执行的命令将不会以root身份运行(回显1)。
如果我们只需要程序的输出,而该程序不需要root特权,则这很有用。

如果管道之前的命令需要root用户,我们可以在每个命令之前使用sudo,如下所示:

$sudo echo 1 | sudo tee /proc/sys/net/ipv4/ip_forward > /dev/null

像前面的示例一样,我们可以使用类似的方法将“ 1”写入“ ip_forward”文件,这将提高写入文件的过程。

一个例子如下:

$sudo tee /proc/sys/net/ipv4/ip_forward > /dev/null << EOF
1
EOF

使用sudo -c运行shell

另一种流行的方法是使用'-c'选项以root身份运行另一个shell。

例子:

$sudo sh -c 'echo 1 > /proc/sys/net/ipv4/ip_forward'

使用sudo -s运行shell

另一种方法是使用“ sudo -s”启动shell,然后运行以下命令:

$sudo -s
# echo 1 > /proc/sys/net/ipv4/ip_forward
# ^D
$

通过使用Bash脚本

还有另一种通过重定向或者管道运行sudo的方法,它是使用所有命令创建一个bash脚本,然后使用sudo运行该脚本。

让我们看看如何做到这一点。
首先,我们需要使用任何文本编辑器(例如nano,vim,gedit或者其他任何文件)创建一个新文件。
我们将其命名为“ myscript.sh”。

然后将以下命令粘贴到myscript.sh并保存文件:

#!/bin/sh
echo 1 > /proc/sys/net/ipv4/ip_forward

现在,我们只需要使用sudo命令运行myscript.sh文件:

$sudo myscript.sh