删除一个命令的sudo权限

5
这可能是一个非常简单的问题。如果这是一个重复的问题,我很抱歉。 我想知道如何为一个特定的命令取消sudo权限。我创建了一个安装许多 .deb 包的脚本,它需要sudo来完成,但其中一个命令需要在没有sudo权限的情况下运行,那么我该怎么做呢?我正在使用 Ubuntu 并且这是一个bash脚本。
我在调用我的脚本:ROS_install
以下是脚本的一部分:
sudo dpkg -i /home/forklift/Desktop/ROS/ros-hydro-laser-proc_0.1.3-0precise-20131015-2054-+0000_amd64.deb

sudo dpkg -i /home/forklift/Desktop/ROS/ros-hydro-urg-c_1.0.403-0precise-20131010-0128-+0000_amd64.deb

            sudo rosdep init
sleep 2
            rosdep update

命令“rosdep update”需要在没有sudo权限的情况下运行。我以为已经在这样做了,但每次运行脚本时都会收到警告,因此在安装后无法使用该命令。
4个回答

2
不要给整个脚本提升权限,只需将其赋予实际需要权限的命令。也就是说,不要
$ sudo my_script

修改my_script,仅在需要时使用sudo。例如,如果这是您的脚本:

command1
command2
command3
command4
command5

如果command3是非sudo命令,请修改您的脚本以读取:

sudo command1
sudo command2
command3
sudo command4
sudo command5

在此过程中,请考虑command1是否真正需要使用sudo运行,或者它可以不使用sudo同样有效地运行。通过这种方式,您应该能够大大减少实际需要在脚本中使用sudo运行的命令数量。


目前这就是我所拥有的。但是当涉及到那个特定的命令时,它会发送一个警告,说类似于“你不应该使用sudo运行此命令”,即使在那个命令前面没有写sudo。也许我做错了其他事情。 - user244985
请发布脚本的相关部分,如果不是全部。 - chepner
我刚刚为你添加了脚本的那一部分。 - user244985
根据您的sudo配置,这可能需要多次输入密码。将脚本作为特权用户运行,但根据需要更改回较不特权的用户(即使用here-doc的sudo -u“$SUDO_USER”)会更容易些。 - Toby Speight
更容易,但不够安全。除非这是一个只运行几次的临时脚本,否则值得花费精力正确配置 sudo - chepner
这是最好的答案。 - Gringo Suave

2
如果您的命令具有完整特权,则可以通过运行su来降低自己的特权,无论是永久还是在一次命令的持续时间内。
touch /privileged
su -c 'cp /privileged /tmp/not' nobody

1
我假设你是这样调用脚本的:

sudo script.sh

并且你不想让脚本中的所有命令都以root身份运行。 如果你的脚本像这样:
apt-get install perl
apt-get install python
mv trash /home/user/

如果您只想以root身份运行前两个命令,可以指定第三个命令的特定用户,例如: su -c "mv trash /home/user/" user 其中user是您要运行命令的用户名。
这将允许您在调用脚本时在父级别上进行单个sudo调用。
如果您不想硬编码用户名,可以使用像logname这样的命令获取登录用户的用户名。

这看起来很有前途。我会尝试一下。 - Marcus Hiles

1

除了其他答案,您还可以这样做:

su -c "command" $SUDO_USER

这将以实际键入sudo命令的用户身份执行命令。当你编写需要sudo安装某些内容并在用户的$HOME中编写某些内容的脚本时,这非常有用。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接