的语法sudo
是
user ALL=(ALL) ALL
由此:
第一个字段是可以执行的用户
sudo
sudo
第三个字段是可以进入的用户第四个字段是可以执行的命令
sudo
第二名sudo
字段用于放置可以运行的主机。
===================================
我不明白使用第二名场地。我们如何sudo
在主机 A 上启用以便在另一台主机 B 上使用?
答案1
第二名全部= 在所有主机上(如果您将同一sudoers
文件分发到多台计算机)
答案2
这sudoers 语法的完整规范比你列出的更复杂。主机规范只是告诉 sudo 用户可以在哪些主机上运行这些命令。如果主机规范是“ALL”,正如手册页所述:
保留字 ALL 是一个内置别名,始终会导致匹配成功。它可以用在任何可能使用 Cmnd_Alias、User_Alias、Runas_Alias 或 Host_Alias 的地方。
sudo 只关心本地主机上的 sudo 规则;如果您运行连接到另一台主机的命令,则处理会从那里重新开始。
您可能会感到困惑的是看到多个主机的 sudoers 配置;适用于特定主机的唯一规则集是具有该主机名和“ALL”的规则。
答案3
所以第二个字段实际上仍然只适用于本地系统,对吗?它不允许主机 A 上的用户在另一个权限上执行 sudo 吗? - 小白
是的。该文件并不是所有主机都使用的单个副本,它的复制次数与主机的数量相同。制作单个 sudoers 文件然后将其副本提供给多个主机会更容易。
举一个实际的例子,假设您有几十台服务器,它们共享 80% 的 sudoers 配置,但每台服务器都有一些特殊的配置。通过使用主机列表,您可以为每个主机提供相同的 sudoers 文件(例如,使用 Ansible 为所有这些主机提供该文件的副本),同时仍然具有适当的每主机配置。
您应该搜索单词host_list
in man sudoers
,您会在那里看到 EBNF。根据 sudoers 手册页,它们是“逗号分隔的”,可以使用主机名、IP 地址、具有可选网络掩码的网络、网络组或主机别名。
Host_List ::= Host |
Host ',' Host_List
Host ::= '!'* host name |
'!'* ip_addr |
'!'* network(/netmask)? |
'!'* +netgroup |
'!'* Host_Alias