上一主题: 默认文件规则下一主题: 自动定义 setuid/setgid 程序


保护 setuid 和 setgid 程序

设置的用户 ID (setuid) 程序是 UNIX 站点中使用最频繁的程序之一。 调用 setuid 程序的进程会自动获得 setuid 程序所有者的身份。 如果 setuid 程序的所有者是根,那么任何用户会自动通过调用 setuid 程序来成为超级用户。 setuid 程序启动时,进程执行超级用户具有权限的任何任务。 确保 setuid 程序仅执行必要的任务。 setuid 程序中的后门或 shell 授予用户访问系统中任何内容的权限。

CA ControlMinder 使用 PROGRAM 类来保护 setuid 和 setgid 程序。 安装时,CA ControlMinder 在默认情况下允许任何执行程序。 在数据库中定义受托程序之后,您可以更改 CA ControlMinder 的行为,因此禁止 setuid 或 setgid 程序的执行止,除非该程序定义为受托程序。 例如,要允许 /bin/ps(进程状态程序)作为 setgid 程序(假定)运行,请使用以下 selang 命令:

newres PROGRAM /bin/ps defaccess(EXEC)

CA ControlMinder 将程序 /bin/ps 注册为受托程序。 然后进行计算并将其 CRC、inode 数、大小、设备号、所有者、组、权限位、上次修改时间以及其他数字签名(可选)存储在数据库 PROGRAM 类的记录中。

Watchdog 定期检查程序的 CRC、大小、inode 以及其他特征。 如果这些值的任何一个已经更改,那么 Watchdog 会自动要求 seosd 从受托程序列表中删除该程序并不允许访问。 这确保不会有人通过修改或移动 setuid 程序而滥用该程序。 请注意,示例 newres 命令中的权限允许所有用户(包括在数据库中未定义的那些用户)运行 /bin/ps 命令。

未受托的 setuid 程序可能是基于 UNIX 的操作系统的最危险的安全漏洞。 通过使用受托程序的访问规则,安全管理员可以限制对某些受托程序(为确保完整性进行测试和检查)的 setuid 使用。 不过,任何用户无法自动启动受托的可执行程序;访问规则必须指定授权给该 setuid 程序的明确用户和组。 例如,以下 selang 命令集将 /bin/su 的执行仅授予系统部门用户(组 sysdept):

newres PROGRAM /bin/su defaccess(NONE)
authorize PROGRAM /bin/su gid(sysdept) access (EXEC)

使用星号 (*) 指定在数据库中定义的所有用户。 例如,要允许定义到 CA ControlMinder 的所有用户执行 su 命令,请输入以下命令:

authorize PROGRAM /bin/su uid(*) access(EXEC)

此说明也对 setgid 可执行文件成立。

您可以使用 nr 和 er 命令在 PROGRAM 类中注册 setuid 和 setgid 程序。 可以使用类似方法在 PROGRAM 类中注册一些重要的非 setuid 和 setgid 程序。 针对这些程序定义 FILE 规则,以便防止未授权的用户用户对他们进行升级。 如果在未受托时(升级之后,在没有重新受托的情况下执行程序)要允许程序执行,则将 blockrun 属性设置为 no。

要将 blockrun 属性的值设置为 yes,请使用以下 editres/newres 命令:

er program /bin/p blockrun

要将 blockrun 属性的值设为 no,请使用以下 editres/newres 命令:

er program /bin/p blockrun-

在默认情况下,对于在 PROGRAM 类中注册的所有程序,blockrun 属性均设置为 yes。 您可以使用 seos.ini 文件中的 SetBlockRun 标记更改该属性。 有关详细信息,请参阅 seos.ini 文件说明。

注意:CA ControlMinder 使用 PROGRAM 类,而不是 FILE 类来保护 setuid 和 setgid 程序。