【发布时间】:2015-09-03 01:16:54
【问题描述】:
如何使用 sudo 在 shell 脚本中运行命令?此脚本将由 cron 作业运行,因此无需人工干预即可手动输入密码。
【问题讨论】:
如何使用 sudo 在 shell 脚本中运行命令?此脚本将由 cron 作业运行,因此无需人工干预即可手动输入密码。
【问题讨论】:
为什么不在 cron 中以 root 身份运行脚本本身,因为这基本上是 sudo 会做的?你说的是用户 crontab 吗?
【讨论】:
在里面输入cronjob
sudo crontab -e
然后整个脚本将默认以root身份执行,无需密码。
【讨论】:
echo '密码' | sudo -S 命令
【讨论】:
我认为您正在尝试这样做:
user# crontab -e
* * * * * sudo ./code_here
但每次调用脚本时,您都需要提供凭据
所以你可以试试这个:
user# sudo su
root# crontab -e
* * * * * ./code goes here
这样:它将以管理员权限运行。
【讨论】:
无法评论,所以我会尝试将其写为答案。
将根密码保存为明文存在安全风险。 如果脚本位于普通用户的文件夹中,则将脚本保存在根的 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 小修改。
【讨论】: