【问题标题】:Run a command with sudo in bash shell在 bash shell 中使用 sudo 运行命令
【发布时间】:2015-09-03 01:16:54
【问题描述】:

如何使用 sudo 在 shell 脚本中运行命令?此脚本将由 cron 作业运行,因此无需人工干预即可手动输入密码。

【问题讨论】:

    标签: shell cron sudo


    【解决方案1】:

    为什么不在 cron 中以 root 身份运行脚本本身,因为这基本上是 sudo 会做的?你说的是用户 crontab 吗?

    【讨论】:

      【解决方案2】:

      在里面输入cronjob

      sudo crontab -e 
      

      然后整个脚本将默认以root身份执行,无需密码。

      【讨论】:

        【解决方案3】:

        echo '密码' | sudo -S 命令

        【讨论】:

        • 做到了。谢谢一堆 jcalloway
        【解决方案4】:

        我认为您正在尝试这样做:

               user# crontab -e
                * * * * * sudo ./code_here
        

        但每次调用脚本时,您都需要提供凭据

        所以你可以试试这个:

               user# sudo su
                root# crontab -e
               * * * * *    ./code goes here
        

        这样:它将以管理员权限运行。

        【讨论】:

        • Leonel,我尝试了您的建议,但仍然无法正常工作。我找不到可行的解决方案:(
        【解决方案5】:

        无法评论,所以我会尝试将其写为答案。

        将根密码保存为明文存在安全风险。 如果脚本位于普通用户的文件夹中,则将脚本保存在根的 crontab 中也是有风险的 - 用户可以(至少在某些发行版中)删除该文件,即使不能写入该文件,那么该文件可能会被替换为具有相同名称的恶意软件(因此被“注入”到 root 的 cronjob 中)。

        建议:

        sudo visudo
        

        并添加类似的东西

        用户名 ALL= NOPASSWD: /home/username/scriptname.sh

        分配给要启动脚本的用户组(例如“用户”),限制权限:

        chown -v root:users /home/username/scriptname.sh
        chmod -v 0650 /home/username/scriptname.sh
        

        然后使 scriptname.sh 不可变以防止删除(即使是 root,直到删除不可变标志)

        chattr +i /home/username/scriptname.sh
        

        将命令放在这样的脚本中然后将其放入 sudoers 配置的另一个好处是它允许用户仅在脚本中运行这些命令。

        现在这个脚本可以添加到 root 或用户的 crontab 中,在后者的情况下是这样的:

        crontab -e
        

        * 3 * * * sudo /home/username/scriptname.sh &> /home/username/scriptname.log

        UPD 小修改。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2012-10-01
          • 1970-01-01
          • 2015-08-07
          • 1970-01-01
          • 2011-10-17
          • 1970-01-01
          • 2012-07-29
          • 2014-01-02
          相关资源
          最近更新 更多