删除一个命令的sudo权限

时间:2014-03-12 19:14:07

标签: bash command sudo

这可能是一个非常简单的问题。如果它是重复的,我道歉。 我想知道如何删除一个特定命令的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更新"需要在没有sudo权限的情况下运行。我认为它已经存在,但每次运行脚本时都会收到警告,因此在安装后会被锁定在命令之外。

4 个答案:

答案 0 :(得分:1)

不要给整个脚本提升权限,只需将它们提供给需要它们的实际命令即可。也就是说,而不是

$ 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实际需要运行的命令数。

答案 1 :(得分: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之类的命令来获取您登录的用户的用户名。

答案 2 :(得分:1)

如果您的命令以完全权限运行,它还有权通过运行su来降低自己的权限,无论是好还是在一个命令的持续时间内。

touch /privileged
su -c 'cp /privileged /tmp/not' nobody

答案 3 :(得分:0)

只需添加其他答案,您就可以这样做:

su -c "command" $SUDO_USER

将以实际键入sudo命令的用户身份执行命令

当您编写需要sudo安装脚本并在用户$HOME中编写脚本的脚本时,这非常有用