运行 bash shell 中带 sudo 的命令
Run a command with sudo in bash shell
如何使用 sudo 在 shell 脚本中 运行 命令?此脚本将 运行 由 cron 作业执行,因此应该不需要人工干预来手动输入密码。
为什么不 运行 脚本本身作为 cron 中的 root,因为这基本上是 sudo 会做的?您是在谈论用户 crontab 吗?
在
中输入cronjob
sudo crontab -e
然后整个脚本将默认以 root 用户身份执行,无需密码。
回声'password' | sudo -S 命令
我认为你正在尝试这样做:
user# crontab -e
* * * * * sudo ./code_here
但每次调用脚本时您都需要提供凭据
所以你可以试试这个:
user# sudo su
root# crontab -e
* * * * * ./code goes here
这样:会运行有管理员权限。
无法发表评论所以我会尝试将其写为答案。
将 root 密码保存为明文存在安全风险。
如果脚本位于普通用户的文件夹中,则将脚本保存在 root 的 crontab 中也是有风险的——用户可以(至少在某些发行版中)删除该文件,即使无法写入该文件,然后该文件可能会被替换为具有相同名称的恶意程序(因此“注入”到 root 的 cronjob 中)。
建议:
sudo visudo
并添加类似
的内容
username ALL= NOPASSWD: /home/username/scriptname.sh
分配给要启动脚本的用户组(例如'users'),限制权限:
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 次要编辑。
如何使用 sudo 在 shell 脚本中 运行 命令?此脚本将 运行 由 cron 作业执行,因此应该不需要人工干预来手动输入密码。
为什么不 运行 脚本本身作为 cron 中的 root,因为这基本上是 sudo 会做的?您是在谈论用户 crontab 吗?
在
中输入cronjobsudo crontab -e
然后整个脚本将默认以 root 用户身份执行,无需密码。
回声'password' | sudo -S 命令
我认为你正在尝试这样做:
user# crontab -e
* * * * * sudo ./code_here
但每次调用脚本时您都需要提供凭据
所以你可以试试这个:
user# sudo su
root# crontab -e
* * * * * ./code goes here
这样:会运行有管理员权限。
无法发表评论所以我会尝试将其写为答案。
将 root 密码保存为明文存在安全风险。 如果脚本位于普通用户的文件夹中,则将脚本保存在 root 的 crontab 中也是有风险的——用户可以(至少在某些发行版中)删除该文件,即使无法写入该文件,然后该文件可能会被替换为具有相同名称的恶意程序(因此“注入”到 root 的 cronjob 中)。
建议:
sudo visudo
并添加类似
的内容username ALL= NOPASSWD: /home/username/scriptname.sh
分配给要启动脚本的用户组(例如'users'),限制权限:
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 次要编辑。