我安装了 Zentyal 4.0 并查看它的脚本是如何运行的。
我看到一个 perl 函数可以在机器中运行 shell 命令,如下所示
//Ebox::Sudo:root
...
/usr/bin/sudo -p sudo: {commands to perform}
任何人都可以解释它sudo
在shell中的含义吗?
谢谢
-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
这个答案给你一个答案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 文件条目的示例,它允许用户只运行一些dmidecode
并sar
使用 sudo,而不提示输入密码。
user123 ALL=(ALL) NOPASSWD: /usr/sbin/dmidecode, /usr/bin/sar
对于-p sudo:
部分。
( -p
prompt) 选项允许您覆盖默认密码提示并使用自定义提示。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
.