0

我安装了 Zentyal 4.0 并查看它的脚本是如何运行的。

我看到一个 perl 函数可以在机器中运行 shell 命令,如下所示

//Ebox::Sudo:root

...

/usr/bin/sudo -p sudo: {commands to perform}

任何人都可以解释它sudo在shell中的含义吗?

谢谢

4

2 回答 2

1

-p 根据文档用于(使用带有可选转义序列的自定义密码提示)zentyal 使用 /usr/bin/sudo -p sudo: 仅用于测试目的

Readonly::Scalar our $SUDO_PATH   => '/usr/bin/sudo -p sudo:'; # our declaration eases testing

因为如果你改为

/usr/bin/sudo -p anything:

sudo zentyal 的功能是正常的。

在您的评论中,您想知道为什么 zentyal 可以在不提示密码的情况下运行任何 shell 系统命令,因为当您安装 zentyal 时,您必须将用户设置为 sudo 组或管理员(这类似于 sudo 组)

admin 组的成员可以获得 root 权限 %admin ALL=(ALL) ALL

最后 ALL 允许运行任何命令

案例相关: https ://forum.zentyal.org/index.php/topic,34663.0.html

于 2019-11-11T17:03:02.000 回答
0

这个答案给你一个答案sudo-p sudo:你的命令。

sudo本身就是一个权限命令,允许用户执行命令,如果sudoers文件中允许的话,一般普通用户是不允许的。

sudoers 文件可以准确地确定允许用户运行哪些命令。通常,这些命令可以通过设置 sudoers 文件来运行,方法是在每次运行命令时提示输入用户密码,或者添加允许用户运行 sudo 命令而无需重新输入密码的 NOPASSWD 选项。

示例:普通用户无法运行 dmidecode,因为您将获得拒绝访问。

[user@host ~]$ dmidecode
# dmidecode 3.0
Scanning /dev/mem for entry point.
/dev/mem: Permission denied

但如果在 sudoers 文件中允许,您可以允许用户以超级用户身份运行命令。

[user@host ~]$ sudo dmidecode

这是一个 sudoers 文件条目的示例,它允许用户只运行一些dmidecodesar使用 sudo,而不提示输入密码。

user123 ALL=(ALL) NOPASSWD: /usr/sbin/dmidecode, /usr/bin/sar

对于-p sudo:部分。

( -pprompt) 选项允许您覆盖默认密码提示并使用自定义提示。sudoers 支持以下百分比 ('%') 转义。

换句话说,在这种情况下,它将用sudo:文本替换 sudo 密码的默认提示。

例如,运行类似的命令df -h

[user@phost ~]$ sudo df -h
[sudo] password for host:

但是当运行时-p

[user@phost ~]$ sudo -p sudo: df -h
sudo:

小费!每当您需要编辑 sudoers 文件时,您需要确保永远不要这样做vi sudoers,因为它会更改文件所有权。visudo始终通过将命令运行为 sudoers 文件来编辑root.

于 2017-11-09T09:25:06.650 回答