1、3 最小特权的实现 (1) 传统 UNIX/Linux特权管理 1)普通用户没有特权,超级同户拥有所有特权。 2)当进程要进行某特权操作时,系统检查进程所代表的用户是否为超级用户、 3)普通用户涉及特权操作时,通过 setuid/setgid实现。用户希望访问 /etc/passed来修改自己的密码,必须使他能超越对客体的受限访问。setuid/setgid可以使得代表普通用户的进程不继承用户的 uid/gid, 而是继承该进程对应的应用程序文件 (可执行文件 )的所有者的 uid/gid、即普通用户暂时获得其他用户身份,并通过该身份访问客体。由于此项活动具有局限性,具系统还会进行安全检查,有
2、助于维护系统安全性。(2) Linux最小特权的实现 1)系统安全管理员:用来维护系统中与安全性相关的信息,包括对系统用户账户的管理、系统中的主体客体安全级的管理以及设置和维护系统的安全数据库; 2)系统审计员:用来设置审计开关和审计阈值,启动和关闭审计机制以及管理审计日志; 3)系统操作员:用来完成系统中日常的操作和维护,包括开启和关闭系统、对文件的档案备份和恢复、安装或卸载文件系统以及向终端发送消息等等。 4)网络管理员:用来完成所有与网络相关的管理与操作。(1)Linux系统中对权能的定义 系统将系统管理的权限进行分割,共 30种权能:例如,超越改变系统文件所有者和组所有的的特权;超越所
3、有自主访问控制机制的约束的特权;超越所有强制访问控制机制的约束的特权;修改文件属性的特权; 写审计文档的特权; 配置进程记帐的特权;打开或关闭缓冲区的特权;删除信号量的特权;文件系统上设置加密口令的特权; 安装或卸下文件系统的特权;改变和设置进程安全的级特权;改变和设置文件安全级的特权;处理系统时钟和设置实时时钟的特权; 设置加密密钥的特权, 等等。(2)基于 Linux系统中的权能构造最小特权机制 要在 Linux系统中实现最小特权管理,可以参照多级安全模型对强制访问控制机制的实现方法,对系统中的每个可执行文件赋予相应的特权集,同时对于系统中的每个进程,根据其执行的程序和所代表的用户,也赋予
4、相应的特权集。 新进程继承的特权 新进程继承的特权既有进程的特权,也有所运行文件的特权,称为 “ 基于文件的特权机制 ” 。这种机制的最大优点是特权的细化,其可继承性提供了一种执行进程中增加特权的能力。 1)文件的特权的实现 可执行文件具有两个特权集,当通过 exec系统调用时,进行特权的传递。 固定特权集:固有的特权,与调用进程或父进程无关,将全部传递给执行它的进程。 可继承特权集:只有当调用进程具有这些特权时,才能激活这些特权。 这两个集合是不能重合的,即固定特权集与可继承特权集不能共有一个特权。当然,可执行文件也可以没有任何特权。当文件属性被修改时(例如,文件打开写或改变它的模式),它的
5、特权会被删去,这将导致从 TCB中删除此文件。因此,如果要再次运行此文件,必须重新给它设置特权。2)进程的特权 当 fork一个子进程时,父子进程的特权是一样的。但是,当通过 exec执行某个可执行文件时,进程的特权取决于调用进程的特权集和可执行文件的特权集。每个进程都具有三个特权集: 最大特权集( permitted privileges set):可能具有的最大特权。 可继承特权集( inheritable privileges set): 决定进程执行 exec后进程是否保留提升后特权的特权集。 有效特权集( effective privileges set): 进程当前使用的特权集。新
6、进程时的特权计算 调用进程调用进程继承特权集3,5,9最大特权集3,5,9有效特权集5继承特权集3,9固定特权集2,6可执行文件继承特权集3,5,9最大特权集2,3,6,9有效特权集2,3.6,9exec( ) ( 3)权能表的修改 为在 Linux系统中实现最小特权机制,可以在Linux/include/Linux/capabilities中加入以下几项能力: 1) CAP_MAC_READ 用来超越强制访问控制机制的读访问限制。 2) CAP_MAC_WRITE 用来超越强制访问控制机制的写访问限制。 3) CAP_AUDIT 用来管理审计系统的权限。( 4)进程的特权 在 Linux系统的进程结构中,已经有三个向量表示进程的特权类型: cap_ effective、cap_inheritable、 cap_permitted。 它们是kernel_cap_t类型(无符号长整形)的数据。进程的有效特权集( cap_effective) 表明了进程当前使用的特权情况,进程的最大特权集(cap_permitted) 表明了进程可拥有的最多特权,进程的可继承特权集( cap _inheritable) 包含进程下一步 exec新文件时所拥有的特权集。kernel _cap _t类型是一个无符号整数表示,共32位,每一个位表示系统细分的一命特权。