这可能是一个非常简单的问题。如果它是重复的,我道歉。我想知道如何删除一个特定命令的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”。我以为它已经存在了,但是每次运行脚本时都会收到警告,因此在安装后会被锁定。
我假设您正在调用您的脚本:
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
之类的命令来获取您登录的用户的用户名。
如果您的命令以完全权限运行,它还有权通过运行su
来降低自己的权限,无论是好还是在一个命令的持续时间内。
touch /privileged
su -c 'cp /privileged /tmp/not' nobody
而不是给整个脚本提升权限,只需将它们提供给需要它们的实际命令即可。那就是,而不是
$ 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
实际运行的命令数量。
只需添加其他答案,您就可以这样做:
su -c "command" $SUDO_USER
这将以键入sudo
命令的实际用户执行命令
当你制作需要sudo
安装东西并在用户的$HOME
中写东西的脚本时,这非常有用