在 Debian Linux 上允许复杂的 sudo 命令

在 Debian Linux 上允许复杂的 sudo 命令

我需要允许单个用户在 Debian Linux 机器上执行特定命令。我在文件中尝试过/etc/sudoers

# User privilege specification
zabbix  ALL=NOPASSWD: /usr/bin/apt-get --print-uris -qq -y upgrade 2>/dev/null |awk '{print $2}' | wc | awk '{print $1}'

这并没有按预期工作。如果我以 zabbix 用户身份使用 sudo 运行该命令,它会要求输入密码(尽管我已指定该NOPASSWD选项)。

但是,这是有效的:

# User privilege specification
zabbix  ALL=NOPASSWD: /usr/bin/apt-get

但缺点是所有子命令都apt-get被允许。有没有办法解决这个问题,只允许特定的命令?

答案1

我不同意 lain 的观点。虽然它可以工作,但您不需要awk以 root 身份运行。我对此不太满意,因为您可能会awk以某种方式发起攻击。毕竟,它是一个完整的编程语言解释器。

当一个运行时sudo /usr/bin/apt-get --print-uris -qq -y upgrade 2>/dev/null |awk '{print $2}' | wc | awk '{print $1}',它们实际上正在运行sudo /usr/bin/apt-get --print-uris -qq -y upgrade,然后作为调用用户进行管道/重定向。

尝试这个:zabbix ALL=NOPASSWD: /usr/bin/apt-get --print-uris -qq -y upgrade

顺便说一句,像 lain 那样将其放入脚本中并没有错,你仍然可以这样做。如果可能的话,我会避免以 root 身份运行 awk。

答案2

您可能对重定向与 sudo 交互的方式感到不满。重定向是在调用用户而不是特权用户处执行的。将命令包装在脚本中,然后允许 zabbix 用户运行该脚本可能会更容易,例如

#!/bin/bash
/usr/bin/apt-get --print-uris -qq -y upgrade 2>/dev/null |awk '{print $2}' | wc | awk '{print $1}'

设置 sudoers 为

zabbix  ALL=NOPASSWD: /path/to/script

现在整个脚本将以特权用户身份运行,而不仅仅是特定的 apt-get 命令。但请确保 zabbix 用户无法写入脚本。

相关内容