【问题标题】:Remove sudo permissions for one command删除一个命令的 sudo 权限
【发布时间】:2014-04-17 04:22:02
【问题描述】:

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

【问题讨论】:

    标签: bash command sudo


    【解决方案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 的情况下运行。这样,您应该能够大大减少实际需要在脚本中使用sudo 运行的命令数量。

    【讨论】:

    • 目前这就是我所拥有的。但是当涉及到那个特定的命令时,它会向我发送一个警告,说“你不应该用 sudo 运行这个命令”,即使 sudo 没有写在那个命令的前面。也许我做错了什么
    • 如果不是全部,请发布脚本的相关部分。
    • 我刚刚为你添加了脚本的那部分
    • 根据您的sudo 配置,这可能需要多次输入密码。以特权用户身份运行脚本更容易,但可以根据需要将其更改回特权较低的用户(即 sudo -u "$SUDO_USER" 与 here-doc)。
    • 更简单,但不太安全。除非这是一个只会运行几次的临时脚本,否则值得努力正确配置 sudo
    【解决方案2】:

    如果您的命令以完全权限运行,则它也有权通过运行su 来永久或在一个命令期间降级自己的权限。

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

    【讨论】:

      【解决方案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 之类的命令来获取您登录的用户的用户名。

      【讨论】:

      • 这看起来很有希望。我会试试的。
      【解决方案4】:

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

      su -c "command" $SUDO_USER
      

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

      当您制作需要sudo 来安装某些内容并在用户的$HOME 中写入某些内容的脚本时,这非常有用

      【讨论】:

        猜你喜欢
        • 2014-11-11
        • 1970-01-01
        • 2017-02-03
        • 1970-01-01
        • 2012-07-24
        • 1970-01-01
        • 1970-01-01
        • 2021-09-08
        • 1970-01-01
        相关资源
        最近更新 更多