/usr/sbin/sxadm enable [-c conf=value[,conf=value,...] extension[ extension...]
/usr/sbin/sxadm disable extension[ extension...]
/usr/sbin/sxadm delcust extension[ extension...]
/usr/sbin/sxadm exec [-s extension=value]... command
/usr/sbin/sxadm info [-p] [extension]
/usr/sbin/sxadm help [subcommand]
sxadm 命令可在系统级别(全局区域、非全局区域)和进程级别 (/usr/sbin/sxadm exec) 控制和配置 Solaris 安全扩展。
enable 和 disable 子命令用于在系统范围内启用和禁用给定的安全扩展。–c 选项用于传递要启用的特定于扩展的配置信息。delcust 子命令用于将扩展重置为现成的缺省配置。
info 子命令用于报告当前区域的安全扩展的状态。–p 选项用于为外部使用者生成易于解析的输出。
exec 子命令可用于在进程级别控制给定安全扩展的状态。指定的命令会使用所配置的安全扩展来执行,该安全扩展通过在 exec 子命令后面使用任何 –sextension=value 条目来表示。在命令行上配置的安全扩展由子进程继承。
进程的安全扩展将在 exec(2) 期间确定,并在从 exec(2) 系统调用退出时对进程生效。扩展将在进程整个生命周期内有效,直到进程退出或再次调用 exec(2)。
ASLR 将对进程的关键区域(例如,堆栈、基于 brk 的堆、内存映射等)激活随机化。
缺省情况下,全局区域和所有非全局区域在引导时仅会对标记的二进制文件启用 ASLR。标记的二进制文件可使用链接编辑器的 –z aslr 选项构建。有关更多详细信息,请参见《Oracle Solaris 11 开发者安全性指南》中的“地址空间布局随机化 (Address Space Layout Randomization, ASLR)”部分。许多经过标记的核心 Solaris 二进制文件都会启用 ASLR。sxadm enable、disable 和 restore 子命令可用于在系统范围内配置 ASLR。sxadm enable 的 ASLR 配置值为:
为所有进程启用 ASLR。
仅为标记的二进制文件启用 ASLR。
采用系统缺省设置。当前设置:tagged-files
sxadm exec 命令的 ASLR 配置值为:
为进程启用 ASLR。
为进程禁用 ASLR。
Solaris 10 Container 不支持 ASLR。
sxadm 命令包含以下子命令:
为当前区域启用指定扩展。sxadm 可以使用 –c 选项传递特定扩展的配置信息。
可以在命令行上同时指定多个扩展和多个配置值,但如果该配置值并不适用于所有扩展,则该命令将失败。此命令最常见的用法如下:
% sxadm enable extension1 extension2
也可以是:
% sxadm enable -c prop=value,prop2=value2 extension
有关更多示例,请参见“示例”部分。
为当前区域禁用指定扩展。
将扩展恢复为现成的缺省配置。
报告有关当前区域中所有安全扩展的状态的信息。如果指定 –p,则以易于解析的格式显示输出。在命令行上指定 extension 可过滤出特定扩展。
计算机可解析的输出是以冒号分隔的字段列表:
extension_name:status[.extra]:configuration[.extra]
其中:
扩展的名称。
扩展的当前状态(启用或禁用)。
表示扩展要报告的(重要)额外信息。以 ASLR 为例,如果启用了 ASLR,则 extra 可以是 tag 或 all,具体取决于模型。
为扩展存储的配置(启用、禁用或系统缺省设置)
extension_name、status、extra 和 configuration 组件均不允许使用冒号 (:)、空号 (\0) 和换行符 (\n)。
使用安全扩展的特定配置执行指定的命令。未在命令行上显式配置的每个安全扩展将使用系统配置。最终由 command 派生的子进程将继承在命令行上指定的相同安全扩展配置。set-uids 和特权二进制文件不会继承任何配置。可以在一个命令行上使用多个 –s 选项表示多个配置。如果多次配置相同的扩展,则优先使用最后配置的扩展。例如:
% sxadm exec -s aslr=disable -s aslr=enable /usr/bin/pmap
...将在启用 aslr 的情况下执行 /usr/bin/pmap。
sxadm exec 子命令仅用于处理一种常见情形,即,将一个调试器应用于该调试器直接启动的一个进程。对于更为复杂的情形,该子命令不足以处理。在这种情况下,为了便于调试,可能需要使用 sxadm 来更改系统或区域级别安全扩展缺省设置,或者使用 ld(1) 实用程序按对象应用标记。
显示有关 sxadm 的使用信息或有关每个子命令的更多详细信息。
以下 sxadm 命令将执行 pmap 二进制文件,并在运行时禁用 ASLR。
bash$ pmap self # memory addresses are randomized 101731: pmap self 101731: pmap self 0000000000400000 28K r-x-- /usr/bin/pmap 0000000000417000 4K rw--- /usr/bin/pmap 0000000000418000 8K rw--- /usr/bin/pmap 000003B0E8DF8000 36K rw--- [ heap ] [...] FFFFF843B8098000 344K r-x-- /lib/amd64/ld.so.1 FFFFF843B80FE000 12K rwx-- /lib/amd64/ld.so.1 FFFFF843B8101000 8K rwx-- /lib/amd64/ld.so.1 FFFFFBF4A14E0000 12K rw--- [ stack ] total 2592K bash$ sxadm exec -s aslr=disable /usr/bin/pmap self 101733: /usr/bin/pmap self 101733: /usr/bin/pmap self 0000000000400000 28K r-x-- /usr/bin/pmap 0000000000417000 4K rw--- /usr/bin/pmap 0000000000418000 40K rw--- [ heap ] [...] FFFFFD7FFF394000 344K r-x-- /lib/amd64/ld.so.1 FFFFFD7FFF3FA000 12K rwx-- /lib/amd64/ld.so.1 FFFFFD7FFF3FD000 8K rwx-- /lib/amd64/ld.so.1 FFFFFD7FFFDFD000 12K rw--- [ stack ] total 2588K示例 2 显示有关安全扩展配置的信息
以下 sxadm info 命令将显示有关安全扩展配置的信息。
bash$ sxadm info -p aslr:enabled.tagged-files:system default.default bash$ sxadm info EXTENSION STATUS CONFIGURATION aslr enable (tagged-files) system default (default) bash$ sxadm enable -c model=all aslr bash$ sxadm info EXTENSION STATUS CONFIGURATION aslr enable (all) enable (all) bash$ sxadm info -p aslr:enabled.all:enabled.all示例 3 重置为缺省配置
以下 sxadm delcust 命令会将扩展恢复为现成的缺省配置。
bash$ sxadm info EXTENSION STATUS CONFIGURATION aslr enable (all) enable (all) bash$ sxadm delcust aslr bash$ sxadm info EXTENSION STATUS CONFIGURATION aslr enable (tagged-files) system default (default)示例 4 运行调试会话
以下命令序列说明了在禁用 ASLR 的情况下执行的调试会话。
bash$ sxadm exec -s aslr=disable /bin/bash bash$ # Because all processes (except privileged ones) inherit the (disabled) # aslr configuration mdb, truss & co will have repeatable results. bash$ truss -t mmap /bin/true mmap(0x00000000, 32, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANON, -1, 0) = 0xFE5B0000 mmap(0x00000000, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANON, -1, 0) = 0xFE5A0000 mmap(0x00000000, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANON, -1, 0) = 0xFE590000 [...] bash$ truss -t mmap /bin/true mmap(0x00000000, 32, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANON, -1, 0) = 0xFE5B0000 mmap(0x00000000, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANON, -1, 0) = 0xFE5A0000 mmap(0x00000000, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANON, -1, 0) = 0xFE590000 [...] bash$ truss -t mmap /bin/true mmap(0x00000000, 32, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANON, -1, 0) = 0xFE5B0000 mmap(0x00000000, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANON, -1, 0) = 0xFE5A0000 mmap(0x00000000, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANON, -1, 0) = 0xFE590000
命令执行成功。
命令因运行出错而退出。
有关下列属性的说明,请参见 attributes(5):
|
在 Oracle Solaris 11.2 中确保系统和连接设备的安全
"Address Space Layout Randomization (PaxTeam)"(地址空间布局随机化 (PaxTeam))。网址为 http://pax.grsecurity.net/
"Address Space Layout Randomization in Windows Vista"(Windows Vista 中的地址空间布局随机化)。网址为 http://blogs.msdn.com/b/michael_howard/
"Address space randomization in 2.6"(2.6 中的地址空间随机化)。网址为 http://lwn.net/
"Official mention on the web site of Library Randomization for Mac OS X Snow Leopard (Mac OS X Lion has full randomization)"(用于 Mac OS X Snow Leopard 的库随机化(Mac OS X Lion 已完全随机化)Web 站点上的官方说明)。网址为 http://www.apple.com/macosx/security