我想以另一个非登录用户的身份运行一个脚本,如下所示:
/srv/system/check_alerts.sh <NAME>
有 1 个仅包含大写字母的参数并且可变长度。因为 Visudo 已经过时并且不允许 extglob - 所以我不能允许可变长度参数。
我尝试将其添加到 sudoers 中:
alerter ALL=(gmail) NOPASSWD: /srv/system/check_alerts.sh [a-z][a-z][a-z][a-z][a-z]
alerter ALL=(gmail) NOPASSWD: /srv/system/check_alerts.sh [a-z][a-z][a-z][a-z]
alerter ALL=(gmail) NOPASSWD: /srv/system/check_alerts.sh [a-z][a-z][a-z]
alerter ALL=(gmail) NOPASSWD: /srv/system/check_alerts.sh [a-z][a-z]
alerter ALL=(gmail) NOPASSWD: /srv/system/check_alerts.sh [upper][upper][upper][upper][upper]
alerter ALL=(gmail) NOPASSWD: /srv/system/check_alerts.sh [upper][upper][upper][upper]
alerter ALL=(gmail) NOPASSWD: /srv/system/check_alerts.sh [upper][upper][upper]
alerter ALL=(gmail) NOPASSWD: /srv/system/check_alerts.sh [upper][upper]
然后运行测试:
sudo -u alerter bash
和:
bash-4.2$ sudo -u gmail /srv/system/check_alerts.sh TEST
We trust you have received the usual lecture from the local System
Administrator. It usually boils down to these three things:
#1) Respect the privacy of others.
#2) Think before you type.
#3) With great power comes great responsibility.
[sudo] password for alerter:
这仍然令人烦恼地提示输入密码。为什么 ?
我不想对任意参数使用常见的“*”通配符。这不是一个选项,因为它允许使用“&”之类的东西进行子 shell。
那么如何正确执行此操作以允许可变长度参数并避免不安全的“*”?是否有至少一种工作方式,不会受到密码提示的困扰?
编辑:暂时添加了这个:
alerter ALL=(gmail) NOPASSWD: /srv/system/check_alerts.sh *
到 visudo ,它仍然要求输入密码并且不尊重 NOPASSWD 选项。
调试:我运行:visudo -f /etc/sudoers.d/alerter
并添加了这一行:
alerter ALL=(gmail) NOPASSWD: ALL
之后,在“alerter”bash shell 中我运行:
bash-4.2$ sudo -u gmail /srv/system/check_alerts.sh TEST
gmail is not in the sudoers file. This incident will be reported.
“sudo -l”的输出:
User alerter may run the following commands on test-host:
(ALL) NOPASSWD: /usr/bin/mailq
(gmail) NOPASSWD: ALL
更新:
不确定这是否重要,但用户“alerter”和“gmail”都属于一个组“mycompany”。
更新2:
我按照建议从“check_alerts.sh”脚本中删除了“sudo”。当我有以下命令时,命令工作正常:
alerter ALL=(gmail) NOPASSWD: /srv/system/check_alerts.sh *
- 无需密码提示即可正常工作。
现在已经在 /etc/sudoers.d/alerter 中配置:
alerter ALL=(gmail) NOPASSWD: /srv/system/check_alerts.sh [[\:upper\:]][[\:upper\:]][[\:upper\:]][[\:upper\:]][[\:upper\:]]
这很好用。感谢所有参与调查的人!