每个进程都有四个权限集,用于确定进程是否可以使用特定权限。内核会自动计算权限的有效集。可以修改权限的初始可继承集。通过编码来使用权限的程序可以减小程序的权限允许集。可以缩小权限的限制集。
允许权限集 (P)-可用的权限集。权限可通过继承或指定来供程序使用。执行配置文件便是一种将权限指定给程序的方法。setuid 命令可将 root 具有的所有权限指定给程序。可从允许集中删除权限,但不能向该集中添加权限。从 P 中删除的权限会自动从 E 中删除。
权限识别程序会从程序的允许集中删除该程序从不使用的权限。通过这种方法,程序或恶意进程便无法使用不必要的权限。有关可识别权限的程序的更多信息,请参见《Solaris 开发者安全性指南》中的第 2 章 “开发特权应用程序”。
可继承权限集 (I)-进程可以通过调用 exec 而继承的权限集。调用 exec 之后,允许集和有效集便会相同,但是 setuid 程序的特殊情况除外。
对于 setuid 程序,调用 exec 之后,可继承集会首先受限制集的限制。然后,将继承的权限集 (I) 减去限制集 (L) 中的所有权限后的权限指定给此进程的 P 和 E。
限制权限集 (L)-可用于进程及其子进程的权限的外部限制。缺省情况下,限制集为所有权限。进程可以缩小限制集,但是永远不能扩展限制集。L 用于限制 I。因此,L 会在调用 exec 时限制 P 和 E。
如果已为用户指定的配置文件中包括已指定有权限的程序,则此用户通常可以运行此程序。在未修改的系统上,为此程序指定的权限位于此用户的限制集中。已为程序指定的权限会成为此用户允许集的一部分。要运行已指定有权限的程序,用户必须从配置文件 shell 运行此程序。
内核可识别基本权限集。在未修改的系统上,每个用户的初始可继承集等效于登录时获取的基本集。可以修改用户的初始可继承集,但不能修改基本集。
E (Effective): basic I (Inheritable): basic P (Permitted): basic L (Limit): all |
因此,登录时所有用户在其各自的可继承集、允许集和有效集中包含基本集。用户的限制集包含所有权限。要在用户的有效集中加入更多权限,必须为该用户指定一个权限配置文件。此权限配置文件将包括已向其中添加了权限的命令。还可以将权限直接指定给用户或角色,尽管这种权限指定可能会存在风险。有关风险的介绍,请参见直接指定安全属性时的安全注意事项。