等一下,这本书不是关于配置sudo的吗?不管怎样,我们一直在读什么?
我们一直在sudoers中配置sudo安全策略。sudo程序本身的配置取决于sudo的构建方式,以及系统管理员如何通过 sudo.conf 更改sudo客户端配置。
从主网站下载的sudo软件套件附带了默认配置,但您的操作系统打包程序可能更改了其中的一些设置。您可以通过运行 sudo –V
来识别本地安装的实际默认值。
xxxxxxxxxx
$ sudo –V
Sudo version 1.8.7
Sudoers policy plugin version 1.8.7
Sudoers file grammar version 43
Sudoers I/O plugin version 1.8.7
在这里,一个普通用户向sudo询问了它的配置,并获得了sudo的版本号和一些关于配置的基本事实。
要真正查看sudo安装中的内容,请以root身份使用 -V
标志。
xxxxxxxxxx
# sudo -V
Sudo version 1.8.7
Configure options: --sysconfdir=/usr/local/etc --with-ignore-dot --with-tty-tickets --with-env-editor --with-logincap
…
Sudoers policy plugin version 1.8.7
Sudoers file grammar version 43
Sudoers path: /etc/sudoers
nsswitch path: /etc/nsswitch.conf
Authentication methods: 'pam'
Syslog facility if syslog is being used for logging: local2
Syslog priority to use when user authenticates successfully: notice
…
输出结果有一百多行。您将看到这个sudo二进制文件是如何配置编译的,它在哪里查找文件,如何进行身份验证,它自动清除哪些环境变量,允许哪些变量毫发无损地通过,等等。在您自己的sudo安装中查看此输出。
您可以使用 sudo.conf 中的条目更改其中一些设置。
您可以在 /etc/sudo.conf 中配置sudo程序本身。sudo通常在没有任何配置文件的情况下运行良好,但如果您需要调试问题或更改基本行为,您需要了解 sudo.conf 。该文件有四种有效的配置类型:Plugin(插件)、Path(路径)、Set(设置)和Debug(调试)。第12章包括调试sudo的信息,因此请查看那里的Debug标志的详细信息。对于其他每一个,我将给出一个简单的例子,说明sudo如何使用这种类型的配置,但我将在后面的章节中参考这些类型的设置。
sudo插件通过替换策略引擎或输入/输出系统,从根本上改变sudo的行为方式。您可以使用插件将 /etc/sudoers 替换为您自己的安全策略语言——实际上,sudo通过sudoers插件了解到sudoers的存在。如果你想构建一个特殊的日志系统,请使用I/O插件。插件是sudo 1.8的一项新功能,因此在我写这篇文章时,唯一存在的免费插件是默认插件。Quest One等商业公司(http://www.quest.com)已经编写了sudoers和日志插件,其他人肯定会效仿。
要使用插件,请提供plugin关键字、插件名称和共享库名称。在这里,我明确地配置了sudoers安全策略和sudo输入/输出日志模块(第12章)。
xxxxxxxxxx
Plugin sudoers_policy sudoers.so
Plugin sudoers_io sudoers.so
默认情况下,Sudo的共享库安装在 /usr/local/libexec/sudo 中,但您可以在 sudo.conf 中放置一个显式路径。如果您使用非标准位置构建Sudo,构建过程会设置相应的默认目录。但是,如果你有一个定制的sudo插件或来自供应商的东西,你可能需要提供完整的路径。
xxxxxxxxxx
Plugin sudoers_policy /opt/custom/moderninsults.so
如果你正在编写sudo代码并想指向你专门构建的库,你应该只需要显式定义完整路径。
一次只能有一个sudo策略引擎。如果您使用Quest策略引擎,则不能同时使用sudoers。拥有一个外部策略引擎的意义在于,它可以做一些sudoers做不到的事情。你可以使用多个日志系统。
Sudo可以使用外部程序和库来选择函数。我以noexec标签为例,但我们将根据需要在本书中参考Path设置。
NOEXEC标签使用共享库将执行程序的系统调用替换为返回错误的同名系统调用。此标记依赖于包含虚拟函数的共享库。除了sudo附带的共享库外,您永远不需要使用任何noexec共享库,但以下是您的设置方法。
xxxxxxxxxx
Path noexec /usr/local/libexec/sudo/sudo_noexec.so
您通常会使用路径来执行诸如调用外部密码程序之类的操作(请参阅第8章)。
Sudo有一些通过Set命令控制的功能。这些通常是具有预定义值(如 true 和 false )的开关。我将以核心转储为例。
Sudo处理敏感的安全信息。它通常会将这些信息保存在内存中,并尽快丢弃。来自崩溃的sudo进程的核心转储文件将包含所有敏感的安全信息。因此,Sudo默认禁用核心转储。如果要启用核心转储,请将 disable_coredump
设置为 false
。
xxxxxxxxxx
Set disable_coredump false
此设置处理创建核心文件的sudo部分,但大多数操作系统不允许setuid程序转储核心。在FreeBSD上,通过将sysctl kern.sugid_redump
设置为 1
,启用setuid程序的核心转储。在OpenBSD上,将sysctl kern.nosuidcoredump
设置为 0
,以允许setuid程序转储核心。在Linux上,将sysctls kern.suid_dumpable
和 fs.suid_dumpable
设置为 2
。
从现在开始,我将介绍如何在sudo.conf中创建条目,并希望您能理解。