现在我们要深入到sudo
的“微观结构”了——它的属性、语法、操作以及是否有传统意义上的“API”。这就像我们从宏观的宇宙现象深入到基本粒子的相互作用一样,充满了探索的乐趣!
一、 sudo
的基本属性 (Fundamental Attributes)
这些属性是sudo
作为一款软件和系统工具的核心特征:
-
可执行文件 (Executable):
sudo
本身是一个编译后的二进制可执行文件,通常位于/usr/bin/sudo
或/bin/sudo
。
-
SetUID Root 程序 (Set User ID Root Program):
- 关键属性:
sudo
程序文件通常设置了SetUID位,并且其所有者是root
用户。
ls -l $(which sudo) # 输出可能类似:-rwsr-xr-x 1 root root 157000 Jan 1 2023 /usr/bin/sudo # 注意那个 's' 位,它替代了所有者的 'x' 位,表示SetUID
- 含义:当任何用户执行一个设置了SetUID位且所有者为
root
的程序时,该程序在执行期间会以root
用户的权限运行。这是sudo
能够提升权限的根本机制。它先以root
身份启动,然后根据/etc/sudoers
的策略决定是否以及如何为用户执行后续命令。
- 关键属性:
-
配置文件驱动 (Configuration File Driven):
- 其行为完全由
/etc/sudoers
文件(以及/etc/sudoers.d/
目录下的片段文件)中的策略定义。
- 其行为完全由
-
日志记录能力 (Logging Capability):
- 通过
syslog
(或系统配置的其他日志机制)记录所有授权尝试和执行结果。
- 通过
-
用户认证机制 (User Authentication Mechanism):
- 依赖PAM (Pluggable Authentication Modules) 或系统自身的认证方式来验证发起用户的密码。
-
有状态 (Stateful - regarding timestamp):
sudo
会在成功验证用户密码后,在一段时间内(timestamp_timeout
)记住这个验证状态,允许用户在此期间无需重复输入密码即可再次使用sudo
。这个状态信息通常存储在/var/run/sudo/ts/
或类似目录下,以用户名为文件名。
二、 sudoers
文件的语法 (Syntax of /etc/sudoers
)
/etc/sudoers
的语法是sudo
功能的核心,虽然初看复杂,但其设计是为了提供极大的灵活性和精确性。记住,始终使用<