运行需要 sudo 的非交互式脚本的最安全方法

运行需要 sudo 的非交互式脚本的最安全方法

我想运行一个需要 的命令sudo,但非交互式,因此不能选择输入密码。在我的具体情况下,我想在手机上创建一个自动程序/快捷操作,以通过 ssh 登录在我的服务器上执行此脚本。

就我而言,我想使用 启动虚拟机virsh start,我知道我可以将其配置为允许非 root 用户启动计算机,但我总体上对这个解决方案感到好奇,特别是在非 root 用户的情况下root 选项不可用。

我还想象非特权用户只需要能够运行我定义的单个脚本,而不是任意命令。换句话说,用户只需要能够触发脚本运行 - 他们不提供任何参数,即使他们找到了这样做的方法,参数也会被忽略。

另外,就我而言,该服务器仅供我使用,并且位于防火墙后面。它具有互联网连接(因为它可以下载东西),但无法从互联网访问。我要么必须在 LAN 上,要么通过 VPN 连接才能访问它,而且我只希望在专门在家时使用此脚本。尽管如此 - 我还是担心在这里学习“良好实践”。

服务器本身正在运行 Debian 测试。我担心的是允许无密码 sudo 似乎有风险。有没有更好的方法来做到这一点,理论上非特权帐户可以触发特权脚本或命令运行?我是否应该使用运行的脚本来root监视每分钟左右创建的某个文件,并让该脚本只是touch该文件?我可以创建一个只能执行sudo该脚本的用户吗?

答案1

您可以配置sudo允许特定用户(或组)运行命名命令;在/etc/sudoers(用于visudo编辑它):

user ALL = NOPASSWD: /path/to/command

将允许用户user运行sudo /path/to/command而不提示输入密码。

答案2

我具体不知道 sudo 在这种情况下将如何表现,但是许多依赖用户交互的程序如果在调用时未连接到 tty,将会失败。创建一个不带“NOPASSWD”的 sudo 权限并通过 cron 或 at 运行它来测试是很简单的:

echo "sudo touch /tmp/writtenAsRoot" | at now

(并检查“ps -ef | grep sudo”的输出以检查它是否正在等待输入)。

如果用户没有 sudo 权限,则还可以测试潜在的情况。

相关内容