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