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。
归档时间: |
|
查看次数: |
2028 次 |
最近记录: |