网络安全体系结构
第1 章• 面向开发者的Solaris 安全(概述) 19
20
开发特权应用程序
本章介绍如何开发特权应用程序。本章包含以下主题:
第21 页中的“特权应用程序”
第22 页中的“关于权限”
第24 页中的“使用权限进行编程”
第31 页中的“关于授权”
特权应用程序
特权应用程序是可以覆盖系统控制并检查特定用户ID (user ID, UID)、组ID (group ID,
GID)、授权或权限的应用程序。这些访问控制元素由系统管理员指定。有关管理员如何使
用这些访问控制元素的一般讨论,请参见《System Administration Guide: Security
Services》中的第8 章,“Using Roles and Privileges (Overview)”。
Solaris 操作系统为开发者提供了两个用于更为精细地授予权限的元素:
权限-权限是可以授予应用程序的独立权利。使用权限,进程可以执行Solaris OS 针对
其他不具有该权限的进程禁止的操作。例如,通常情况下,如果没有正确的文件权限,
进程就无法打开数据文件。file_dac_read 权限为进程提供了超出(或超越) UNIX 文件
权限来读取文件的能力。权限是在内核级别上强制实施的。
授权-授权是可以执行安全策略针对其他不具有该授权的用户和角色禁止的一类操作的
权限。可以向角色或用户指定授权。授权是在用户级别上强制实施的。
授权与权限之间的差异与定义谁可以执行哪种强制操作的策略的级别有关。权限是在内核
级别上强制实施的。没有正确的权限,进程就无法在特权应用程序中执行特定的操作。授
权是在用户应用程序级别强制执行策略的。访问特权应用程序或执行特权应用程序中的特
定操作时可能需要授权。
2第2 章
21
关于权限
权限是授予进程执行Solaris 操作系统禁止执行的操作的独立权利。大多数程序不使用权
限,因为程序通常在系统安全策略界限内运行。
权限是由管理员指定的。权限是根据程序的设计来启用的。登录或进入配置文件shell 时,
管理员的权限指定将应用于任何在shell 中执行的命令。运行应用程序时,将通过编程方式
启用或禁用权限。如果使用exec(1) 命令启动新程序,则该程序可能会使用父进程的所有可
继承权限。但是,该程序不能添加任何新权限。
管理员如何指定权限
系统管理员负责为命令指定权限。有关权限指定的更多信息,请参见《System
Administration Guide: Security Services》中的“Privileges (Overview)”。
如何实现权限
每个进程都有四个权限集,用于确定进程是否可以使用特定权限:
允许权限集
可继承权限集
限制权限集
有效权限集
允许权限集
允许权限集中必须包含进程可能使用的所有权限。相反,应该从相应程序的允许权限集中
排除任何永远不会使用的权限。
启动进程时,该进程将从父进程继承允许权限集。通常,在登录时或进入新的配置文件
shell 时,在初始的允许权限集中包含所有权限。此集中的权限由管理员指定。每个子进程
都可以从允许集中删除权限,但不能向允许集中添加其他权限。作为安全预防措施,应该
从允许集中删除程序从不使用的那些权限。这样,便可避免程序使用错误分配或继承的权
限。
系统将从有效集中自动删除从允许集中删除的权限。
可继承权限集
在登录时或在新的配置文件shell 中,可继承集包含管理员指定的权限。调用exec(1) 后,可
以将这些可继承权限传递给子进程。进程应该删除任何不必要的权限以防止这些权限传递
给子进程。通常,允许集和可继承集是相同的。但是,可以从可继承集删除某个权限,而
允许集中仍保留该权限。
关于权限
22 Solaris 开发者安全性指南• 2006 年11 月
限制权限集
使用限制集,开发者可以控制进程可以使用或传递给子进程的权限。子进程和后续进程只
能获取限制集中的权限。执行setuid(0) 函数时,限制集将确定允许应用程序使用的权限。
限制集是在执行exec(1) 时强制实施的。执行exec(1) 之前,从限制集中删除权限不会影响
任何其他集。
有效权限集
进程可实际使用的权限包含在该进程的有效集中。启动程序时,有效集等于允许集。之
后,有效集将成为允许集的子集,或等于允许集。
建议将有效集缩小至基本权限集。第23 页中的“权限类别”中介绍了基本权限集(包含
核心权限)。请将程序中不需要的所有权限全部删除。禁用任何基本权限,直到需要该权
限为止。例如,使用file_dac_read 权限可以读取所有文件。程序可以具有多个读取文件的
例程。对于适当的读取例程,程序最初会禁用所有权限,然后启用file_dac_read。这样,
开发者可以确保程序不会针对错误的读取例程使用file_dac_read 权限。此做法称为权限包
括。第26 页中的“权限编码示例”中说明了权限包括。
超级用户模型与权限模型之间的兼容性
为了适应传统应用程序,权限的实现使用超级用户模型和权限模型。此适应通过使用
PRIV_AWARE 标志(指示程序使用权限)得以实现。PRIV_AWARE 标志由操作系统自动处
理。
请考虑不能识别权限的子进程。此类进程的PRIV_AWARE 标志为false。从父进程继承的所
有权限均可在允许集和有效集中找到。如果子进程将UID 设置为0,则进程的有效集和允
许集将仅限于限制集中的那些权限。子进程不会获取全部的超级用户权限。这样,可识别
权限进程的限制集会限制不能识别权限的子进程的超级用户权限。如果子进程可以修改任
何权限集,则可以将PRIV_AWARE 标志设置为true。
权限类别
可以按照以下方式根据权限范围对权限进行逻辑分组:
基本权限-执行最基本操作需要的核心权限。基本权限如下所示:
PRIV_FILE_LINK_ANY-允许进程创建指向文件的硬链接,这些文件由进程的有效UID
以外的UID 所有。
PRIV_PROC_EXEC-允许进程调用execve()。
PRIV_PROC_FORK-允许进程调用fork()、fork1() 或vfork()。
PRIV_PROC_SESSION-允许进程发送信号或跟踪其会话以外的进程。
PRIV_PROC_INFO-允许进程检查特定进程(查询进程可以将信号发送给这些进程)以
外的进程的状态。没有此权限,就无法检查在/proc 中不能看到的进程。
关于权限
阅读(433) | 评论(0) | 转发(0) |