跳过导航链接 | |
退出打印视图 | |
Oracle Solaris 11 开发者安全性指南 Oracle Solaris 11.1 Information Library (简体中文) |
为了实现系统安全,Oracle Solaris OS 提供了进程特权。进程特权是基于超级用户的 UNIX 标准模型的替换模型,可用来授予对特权应用程序的访问权限。系统管理员需要为用户指定一组允许其访问特权应用程序的进程特权。用户不必成为超级用户即可使用特权应用程序。
特权使得系统管理员可以将有限的权限委托给用户而不是授予用户完全的 root 用户权限,以忽略系统安全。相应地,创建新特权应用程序的开发者应该测试特定的特权,而不是检查 UID 是否等于 0。请参见第 2 章。
为了实现非常严格的系统安全,Oracle Solaris OS 提供了 Trusted Extensions 功能,该功能不在本书的讲述范围内。Trusted Extensions 功能允许系统管理员指定能够由特定用户访问的应用程序和文件。有关更多信息,请参见《Trusted Extensions Developer’s Guide》和《Trusted Extensions 用户指南》。
为安全起见,Oracle Solaris 提供了以下公共接口:
加密框架-加密框架是 Oracle Solaris OS 中加密服务的主干。该框架提供了标准的扩展 PKCS#11 v2.20 修订 3 库(今后称为 PKCS #11)、适用于使用者的接口和加密服务的提供者。该框架有两个部分:用户级应用程序的用户加密框架和内核级模块的内核加密框架。连接到框架的使用者无需了解有关所安装加密机制的专业知识。插入到框架中的提供者不包括针对不同类型使用者的特殊代码。
加密框架的使用者包括安全协议、某些机制和需要执行加密的应用程序。框架的提供者可以是加密机制,也可以是硬件和软件插件中的其他机制。有关加密框架的概述,请参见第 8 章。要了解如何编写从框架使用服务的用户级应用程序,请参见第 9 章。
用于加密框架的库基于 RSA PKCS #11 规范而实现。使用者和提供者都可以通过标准的 PKCS #11 调用来与用户级加密框架进行通信。
Java API-Java 安全技术包含大量的 API、工具以及常用安全算法、机制和协议的实现。Java 安全 API 跨越多个领域,包括加密、公钥基础结构、安全通信、验证和访问控制。Java 安全技术为开发者提供了一个全面的用于编写应用程序的安全框架,还为用户或管理员提供了一组用于安全管理应用程序的工具。请参见 http://www.oracle.com/technetwork/java/javase/tech/index-jsp-136007.htm。
ASLR 是 Oracle Solaris 系统的一种功能,利用此功能可以随机生成进程地址空间(例如栈、库和基于 brk 的堆)的关键部分的起始地址。缺省情况下,为显式标记为需要 ASLR 的二进制文件启用 ASLR。以下命令提供有关 ASLR 状态的信息:
% sxadm info
EXTENSION STATUS CONFIGURATION aslr enable (tagged-files) enable (tagged-files)
ld(1) 命令的 -z 选项用于标记需要使用 ASLR 的新建目标文件。用法如下所示:
ld -z aslr[=mode]
其中 mode 可设置为 enable 或 disable。如果未指定 mode,则假定使用 enable。
以下示例说明了如何使用 -z 选项创建启用了 ASLR 的可执行文件:
% cat hello.c #include <stdio.h> int main(int argc, char **argv) { (void) printf("Hello World!\n"); return (0); } % cc hello.c -z aslr
ASLR 标记由目标文件动态部分中的条目提供,该条目可以使用 elfdump(1) 进行检查。
% elfdump -d a.out | grep ASLR [28] SUNW_ASLR 0x2 ENABLE
elfedit(1) 命令可用于在现有目标文件中添加或修改 ASLR 动态条目。
% cc hello.c % elfedit -e 'dyn:sunw_aslr enable' a.out % elfdump -d a.out | grep ASLR [29] SUNW_ASLR 0x2 ENABLE
% elfedit -e 'dyn:sunw_aslr disable' a.out % elfdump -d a.out | grep ASLR [29] SUNW_ASLR 0x1 DISABLE
给定进程对 ASLR 的要求是在该进程启动时建立的,该进程一旦启动就无法对此要求进行修改。因此,ASLR 标记仅对进程中的主要可执行目标文件有意义。
pmap(1) 实用程序可用于检查进程的地址映射。使用该实用程序观察启用了 ASLR 的可执行文件的映射时,会看到用于栈、库映射和基于 brk 的堆的具体地址在每次调用时均不同。
sxadm(1) 命令用于控制系统的 ASLR 缺省行为。显式标记为禁用 ASLR 的二进制文件优先于 sxadm 建立的系统缺省行为。
调试期间,地址空间随机化可能会出现问题。某些调试需要重复调用同一程序时使用相同的地址映射。您可以采用以下方式之一禁用 ASLR:
临时在系统范围内禁用 ASLR
% sxadm exec -s aslr=disable /bin/bash
使用 ld 或 elfedit 命令将相关二进制文件标记为禁用 ASLR
建立禁用 ASLR 的 shell,从中执行调试操作
% sxadm exec -s aslr=disable /bin/bash
注 - 此 ASLR 修改不会应用到 SUID 或特权二进制文件。
有关更多信息,请参见 sxadm(1M) 手册页和《Oracle Solaris 11 安全准则》中的第 2 章 "配置 Oracle Solaris 安全"。