删除一个命令的sudo权限

问题描述 投票:1回答:4

这可能是一个非常简单的问题。如果它是重复的,我道歉。我想知道如何删除一个特定命令的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

需要在没有sudo权限的情况下运行命令“rosdep update”。我以为它已经存在了,但是每次运行脚本时都会收到警告,因此在安装后会被锁定。

bash command sudo
4个回答
3
投票

我假设您正在调用您的脚本:

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
投票

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

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

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


0
投票

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

su -c "command" $SUDO_USER

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

当你制作需要sudo安装东西并在用户的$HOME中写东西的脚本时,这非常有用

© www.soinside.com 2019 - 2024. All rights reserved.