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

Dan*_*iel 13 linux debian 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}'
Run Code Online (Sandbox Code Playgroud)

这不会按预期工作。如果我使用 sudo 作为用户 zabbix 运行命令,它会要求输入密码(尽管我已经指定了该NOPASSWD选项)。

但是,这有效:

# User privilege specification
zabbix  ALL=NOPASSWD: /usr/bin/apt-get
Run Code Online (Sandbox Code Playgroud)

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

use*_*517 25

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

#!/bin/bash
/usr/bin/apt-get --print-uris -qq -y upgrade 2>/dev/null |awk '{print $2}' | wc | awk '{print $1}'
Run Code Online (Sandbox Code Playgroud)

设置 sudoers 为

zabbix  ALL=NOPASSWD: /path/to/script
Run Code Online (Sandbox Code Playgroud)

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


use*_*723 10

我不同意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。