我需要允许单个用户在 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 用户无法写入脚本。