我想执行一个需要 root 权限的脚本,但不需要输入密码。有类似的问题/答案,但似乎对我都不起作用。
我将脚本放在 /home/kf/bin 中(我自己添加了 bin 目录)并将该目录包含在我的路径中,以便我可以从任何地方运行它。
剧本:trim.sh
:
#! /bin/sh
sudo fstrim -v /
我将脚本的所有权更改为root
:
sudo chown root:root /home/kf/bin/trim.sh
并使其可执行
sudo chmod 700 /home/kf/bin/trim.sh
接下来我在 sudoers 文件中添加了一行visudo
:
kf ALL=(ALL) NOPASSWD: /home/kf/bin/trim.sh
当我再次登录并执行脚本时,trim
我仍然需要输入密码。我知道我可以为此创建一个 cron,但我还希望能够手动执行脚本而无需输入密码。任何帮助表示感谢。
编辑:
我的 sudoers 文件如下所示:
Defaults env_reset
Defaults mail_badpass
Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin: /usr/bin:/sbin:/bin"
root ALL=(ALL:ALL) ALL
kf ALL=(ALL) NOPASSWD: /home/kf/bin/trim.sh
%admin ALL=(ALL) ALL
%sudo ALL=(ALL:ALL) ALL
答案1
将 sudoers 文件中的行更改为:
kf ALL=(ALL) NOPASSWD: /sbin/fstrim
我不建议在中添加脚本/etc/sudoers
,因为该脚本可以被更改,并且每个命令(整个脚本)都会以 root 权限执行。
答案2
你正在寻找的是设置用户标识位,它允许用户以其所有者的权限执行程序。
/!\ 一定要小心使用,由于它暴露的安全问题,它通常是一个糟糕的解决方案。