打印

【Solaris 10 专题】系统安全管理

本帖已经被作者加入个人空间

【Solaris 10 专题】系统安全管理

目录:
# 1.系统安全概述
# 2 系统、文件及设备的安全
# 3 Solaris加密体系

系统安全问题是每一个网络操作系统管理员都十分关注的问题。因为任何系统服务都可能存在固有的缺陷和弱点,并对系统安全构成威胁。虽然Solaris对比LinuxWindows,安全漏洞可能相对较少,但我们也不能忽视安全问题。

1 系统安全概述

Solaris系统安全的第一道防线是对系统访问的控制。控制对系统访问的方法有以下几种。
1.维护系统的物理安全

为了控制对系统的访问,必须保证计算机所处环境的物理安全。比如,一个用户登录计算机后就离开了,这时任何其他人可以利用这个系统访问操作系统和网络。因此要提醒用户注意维护系统的物理安全,避免出现上述的情况。
2.维护登录的控制

使用密码和登录控制来避免对系统或网络的未被授权的登录。系统中的所有账户都应该有密码。因为即使系统中只有一个账户没有密码,对那些知道这个账户或可以猜到这个账户名的人来说整个网络也都是可用的。
3.维护网络控制

计算机往往是网络的一部分。网络就是使得连接在一起的系统之间可以交换信息,并能访问连接到网络中的系统所提供的数据和其他资源。网络提供了一种强大且精密的计算方式。同时,网络也使得破坏系统安全成为可能。

比如,在一个网络中,每个系统都提供了信息的共享。因为很多用户要访问网络,所以不受欢迎的访问出现的机会就会增加。特别是因为用户的错误,比如用户使用了一个很容易被猜到的密码,很容易使这样的情况发生。

具体防范措施就是:首先安装防火墙是控制网络访问,是保障系统安全的有效措施。

其次,即使可以访问系统的用户也要有严格的权限才能访问系统文件和设备,这对保障系统资源使用及系统服务的正常运行非常重要。
4.限制对文件中数据的访问

使用UNIX中对目录和文件的权限设置来对文件中数据访问进行控制。在一个用户对某个文件有读权限的同时,使其他用户改变或删除该文件,也可以把一个文件设置为其他用户都不可读。
5.监控文件或目录的完整性

基本审计和报告工具(BART)是在文件系统级的文件跟踪工具。使用BART工具使你能快速、容易和可靠地得到系统中的软件构成信息。通过对某个目录的不同时间点的比较,可以确认目录中的内容是否被改动。
6.限制对设备的访问

限制对设备的访问,对资源分配系统设备的安全均有重要的意义。Solaris设备策略是限制或防止访问完整的系统设备,它是在内核中强制执行的。设备分配是限制和防止访问外围设备的,它在用户得到分配的时间中是强制配给的。

使用身份验证服务可防止非法用户登录系统。身份验证也是Solaris系统安全保障措施之一。Secure RPC服务负责在客户主机和用户对服务器进行任务申请时做安全身份验证。它使用Diffie-Hellman或Kerberos来进行身份验证。这两种身份验证方法都使用了DES(数据加密标准)来进行加密。

除了DES数据加密外,Solaris加密体系还提供了其他的加密方法。这些加密方法可以为我们带来文件和系统访问等方面的安全保障。只有了解整个加密体系,才能使我们对Solaris系统的安全有全面的认识。

TOP

2.1 系统、文件及设备的安全 --系统访问控制

系统、文件和设备的安全是Solaris系统安全的基本组成部分,下面我们进行分别介绍之。

系统访问控制
1.登录和密码的安全

我们可以要求远程的用户在登录系统的时候输入用户名和密码,也可以来监控未能成功登录系统的信息。

(1)如何显示用户的登录状态。

使用logins命令可以显示用户的登录状态。它从用户密码数据库中获得用户的登录状态,这个密码数据库可能是/etc/passwd文件,也可能是其他命名服务的数据库。

 例20-1 显示用户的登录状态。

# logins -x -l rimmer

rimmer 500 staff 10 Annalee J. Rimmer

/export/home/rimmer

/bin/sh

PS 010103 10 7 -1

选项解释如下:

 -x显示扩展的登录状态信息

 -l username显示专门用户的登录信息。username就是用户的登录名。

显示信息解释如下:

 rimmer登录的用户名。

 500登录用户ID。

 Staff登录用户主要组名。

 10登录用户组的ID。

 Annalee J. Rimmer注释信息。

 /export/home/rimmer用户的主目录。

 /bin/sh用户登录的Shell。

 PS 010170 10 7 -1用户密码信息,顺次为下列:

 最后改变密码的信息;

 需要多少天就要改变一次密码;

 还要多少天就可改变密码;

 警告期限。

(2)如何显示出没有密码的用户。

使用-p选项可以显示没有密码的用户列表。

 例20-2 显示没有密码的用户。

# logins -p

pmorph 501 other 1 Polly Morph

#

(3)如何临时关闭用户的登录。

如果系统在一段时间内正在维护,不允许用户登录,则可以在/etc目录下建立一个nologin文件,文件的内容可以是一些关于本次禁止登录的声明。

 例20-3 禁止用户登录。

# vi /etc/nologin

(Add system message here)

# cat /etc/nologin

***No logins permitted.***

***The system will be unavailable until 12 noon.***

(4)如何监控失败的登录信息。

为了记录试图登录的终端用户的登录信息。我们可以专门建立一个日志文件。

 例20-4 使用日志记录终端用户登录信息。

(1)建立一个日志文件:

# touch /var/adm/loginlog

(2)改变日志文件的读写权限和拥有者:

# chmod 600 /var/adm/loginlog

# chgrp sys /var/adm/loginlog

(3)以后,再使用错误密码的终端登录者试图登录的信息就会被写在文件中:

# more /var/adm/loginlog

jdoe:/dev/pts/2:Tue Nov 4 10:21:10 2003

jdoe:/dev/pts/2:Tue Nov 4 10:21:21 2003

jdoe:/dev/pts/2:Tue Nov 4 10:21:30 2003

jdoe:/dev/pts/2:Tue Nov 4 10:21:40 2003

jdoe:/dev/pts/2:Tue Nov 4 10:21:49 2003

#

例20-4只能监控终端登录信息,下面介绍可以监控所有登录失败信息的方法。

(1)编辑/etc/default/login文件,确保“SYSLOG=YES”。/etc/default/login文件内容如下:

# grep SYSLOG /etc/default/login

# SYSLOG determines whether the syslog(3) LOG_AUTH facility

# should be used

SYSLOG=YES

...

SYSLOG_FAILED_LOGINS=0

#

(2)建立一个日志文件:

# touch /var/adm/authlog

# chmod 600 /var/adm/authlog

# chgrp sys /var/adm/authlog

(3)打开syslog.conf文件,添加日志记录功能,添加内容如下:

auth.notice <Press Tab> /var/adm/authlog

(4)重新启动syslog程序:

# svcadm refresh system/system-log

这时候,如果我们登录一下,故意输错密码,就会在日志中找到登录错误的信息:

# more /var/adm/authlog

Nov 4 14:46:11 example1 login: [ID 143248 auth.notice]

Login failure on /dev/pts/8 from example2, stacey

#

如果只想将三次错误登录的用户记录下来,可以编辑/etc/default/login文件,将SYSLOG_FAILED_LOGINS的值改为3即可。

2.如何改变系统密码的加密算法

强悍的密码加密算法可以给系统提供更多的安全保障。Solaris提供的加密算法如下表所示:

标志符--描 述--帮 助
1--是md5算法,它兼容BSD和Linux的MD5算法--crypt_bsdmd5(5)
2a--Blowfish算法,兼容BSD系统的Blowfish算法--crypt_bsdbf(5)
Md5--Sun公司的md5算法--crypt_sunmd5(5)
_unix_--传统UNIX的加密算法--crypt_unix(5)

(1)如何为密码指定专门的算法。

改变默认加密算法的配置文件是/etc/security/policy.conf文件。在此文件中有一个CRYPT_DEFAULT字段,将其值赋予不同的加密算法的标识符,就可以改变系统默认加密算法。

 例20-5 将系统默认加密算法改为Blowfish算法。

修改/etc/security/policy.conf,使其具有下面内容:

CRYPT_ALGORITHMS_ALLOW=1,2a,md5

#CRYPT_ALGORITHMS_DEPRECATE=__unix__

CRYPT_DEFAULT=2a

(2)如何安装新的第三方的加密模块。

新的第三方加密算法是以软件模块的方式添加到系统的。当你运行pkgadd命令时,软件包将修改/etc/security/crypt.conf文件。然后,你可以修改/etc/security/policy.conf文件来增加新加密算法。

 例20-6 增加crypt_rot13算法。

首先,使用pkgadd命令添加软件包。

其次,确认新的模块和模块标识符被添加到/etc/security/crypt.conf文件中:

# crypt.conf

#

md5 /usr/lib/security/$ISA/crypt_md5.so

rot13 /usr/lib/security/$ISA/crypt_rot13.so

# For *BSD - Linux compatibility

# 1 is MD5, 2a is Blowfish

1 /usr/lib/security/$ISA/crypt_bsdmd5.so

2a /usr/lib/security/$ISA/crypt_bsdbf.so

最后,将新的模块标识符写到/etc/security/policy.conf文件中:

# Copyright 1999-2002 Sun Microsystems, Inc. All rights reserved.

# ...

#ident "@(#)policy.conf 1.6 02/06/07 SMI"

# ...

# crypt(3c) Algorithms Configuration

CRYPT_ALGORITHMS_ALLOW=1,2a,md5,rot13

#CRYPT_ALGORITHMS_DEPRECATE=__unix__

CRYPT_DEFAULT= rot13

现在,当前新增用户密码的加密算法就是crypt_rot13算法。
3.监控和限制超级用户

(1)如何监控哪些用户使用了su命令。

sulog文件列出了哪些用户使用了su命令,不仅仅指那些使用su命令转为超级用户的用户。

查看/var/adm/sulog文件:

# more /var/adm/sulog

SU 12/20 16:26 + pts/0 stacey-root

SU 12/21 10:59 + pts/0 stacey-root

SU 01/12 11:11 + pts/0 root-rimmer

SU 01/12 14:56 + pts/0 pmorph-root

SU 01/12 14:57 + pts/0 pmorph-root

信息内容解释如下:

 使用命令的日期和时间都被记录下来。

 命令使用成功以“+”标识;不成功以“-”标识。

 显示了命令运行的端口。

 最后是用户被转换了其他用户的身份的记录。

su的日志默认就是开启的,它的配置文件是/etc/default/su,其内容如下:

SULOG=/var/adm/sulog

(2)如何显示超级用户登录控制台。

有了上面的知识,在控制台上显示超级用户的登录就非常简单了。只需要在/etc/default/su中加入下面一行:

CONSOLE=/dev/console

(3)如何防止用户通过超级用户远程登录。

用户在远程使用超级用户权限登录,对系统的安全会造成较大威胁。大多数系统都禁止超级用户直接在远端登录。具体方法是在/etc/default/login文件中,写入:

CONSOLE=/dev/console

这样,超级用户只能在控制台上登录。远程用户只有以其他用户名登录后,在使用su命令,才能获得超级用户权限。

[ 本帖最后由 云杉上的蝴蝶 于 2008-4-12 05:50 编辑 ]

TOP

2.2 系统、文件及设备的安全 --控制访问设备

Solaris有两种方法来控制访问设备。设备策略是限制或禁止访问完整的系统设备,它是在内核中强制执行的。设备分配是限制和禁止访问外围设备的,它在用户得到分配的时间中是强制配给的。

设备策略是用权限在内核中保护特定的设备驱动。比如,在网络端口上设备策略就需要有全部的读写权限。

设备分配给使用授权来保护外围设备,比如打印机和麦克风。在默认情况下,设备分配是关闭的。默认外围设备控制如下:

 任何用户能读写磁盘或CD-ROM。

 任何用户可以用麦克风。

 任何用户可以访问附属的打印机。

一旦设备分配开启,设备分配能防止使用设备或需要授权才能使用设备。当设备分配给某用户时,其他任何用户都不可以访问这个设备。
1.设备策略

设备策略机制能使得只有使用特权才能访问设备。Solaris操作系统提供了默认的驱动程序策略。比如,网络端口的访问需要net_rawaccess权限等。这在内核中是强制的。

在以前的Solaris版本,设备节点的保护只是通过文件的权限。比如,sys组拥有的设备只能被sys组成员用户打开。在Solaris 10中,文件的许可不再通过谁能打开设备而预知,代替的是,设备的保护是通过文件的许可和设备策略。

(1)查看设备策略。

 例20-7 显示系统中所有设备的设备策略。

% getdevpolicy | more

DEFAULT

read_priv_set=none

write_priv_set=none

ip:*

read_priv_set=net_rawaccess

write_priv_set=net_rawaccess

...

(2)增加设备策略。

 例20-8 在已有的设备上增加设备策略。

(1)查看现有策略:

# getdevpolicy /dev/ipnat

/dev/ipnat

read_priv_set=none

write_priv_set=none

(2)使用update_drv命令增加策略:

# update_drv -a -p ’read_priv_set=net_rawaccess write_priv_set=net_rawaccess’ ipnat

(3)检查更新:

# getdevpolicy /dev/ipnat

/dev/ipnat

read_priv_set=net_rawaccess

write_priv_set=net_rawaccess

(3)删除设备策略。

 例20-9 将读权限从ipnat设备上删除。

(1)查看现有策略:

# getdevpolicy /dev/ipnat

/dev/ipnat

read_priv_set=net_rawaccess

write_priv_set=net_rawaccess

(2)将读权限从ipnat设备上删除:

# update_drv -a -p write_priv_set=net_rawaccess ipnat

(3)检查结果:

# getdevpolicy /dev/ipnat

/dev/ipnat

read_priv_set=none

write_priv_set=net_rawaccess
2.管理设备分配

设备分配机制可以严格限制访问外围设备,比如CD-ROM。设备分配要求只有授权用户才能访问限制设备,能防止设备被任意访问。

(1)如何启动设备分配。

当你已经使用bsmconv命令启动了基本安全模块(BSM)的时候,设备分配在你的系统中就已经启动。

 例20-10 启动设备分配。

# bsmconv

This script is used to enable the Basic Security Module (BSM).

Shall we continue with the conversion now? [y/n] y

bsmconv: INFO: checking startup file.

bsmconv: INFO: move aside /etc/rc3.d/S81volmgt.

bsmconv: INFO: turning on audit module.

bsmconv: INFO: initializing device allocation files.

The Basic Security Module is ready.

If there were any errors, please fix them now.

Configure BSM by editing files located in /etc/security.

Reboot this system now to come up with BSM enabled.

(2)如何查看设备分配的信息。

# list_devices device-name

device-name是指下列设备:

 audio[n] – 麦克风和喇叭;

 fd[n] – 磁盘设备;

 sr[n] – CD-ROM;

 st[n] – 磁带设备。
3.分配设备

分配设备的目的就是保障一个设备在同一时间只能有一个用户使用。需要mount的设备要在mount后才能使用。

(1)如何分配设备。

 例20-11 将音频设备分配给jdoe用户。

% whoami

jdoe

% allocate audio

 例20-12 将打印机强制分配给任何用户。

$ deallocate -F /dev/lp/printer-1

 例20-13 将磁带机分配给用户jdoe。

% whoami

jdoe

% allocate st0

(2)如何分配需要mount的设备。

 例20-14 用户的角色能分配和mount设备fd0。这个磁盘设备的文件系统是PCFS。

% roles

devicealloc

% su devicealloc

Password: <Type devicealloc password>

$ mkdir /home/devicealloc/mymnt

$ chmod 700 /home/devicealloc/mymnt

$ list_devices -l

...

device: fd0 type: fd files: /dev/diskette /dev/rdiskette /dev/fd0a

...

$ allocate fd0

$ mount -o ro -F pcfs /dev/diskette /home/devicealloc/mymnt

$ ls /home/devicealloc/mymnt

…显示出磁盘内容

 例20-15 用户的角色能分配和mount CD-ROM设备,sr0。设备的文件系统是HSFS。

% roles

devicealloc

% su devicealloc

Password: <Type devicealloc password>

$ mkdir /home/devicealloc/mymnt

$ chmod 700 /home/devicealloc/mymnt

$ list_devices -l

...

device: sr0 type: sr files: /dev/sr0 /dev/rsr0 /dev/dsk/c0t2d0s0 ...

...

$ allocate sr0

$ mount -o ro -F hsfs /dev/sr0 /home/devicealloc/mymnt

$ cd /home/devicealloc/mymnt ; ls

…显示CD-ROM的内容

(3)如何交出设备。

当你使用完设备后,unmount的设备后,可以使用deallocate命令,将设备交给其他用户使用。

TOP

2.3 系统、文件及设备的安全 --文件访问控制

对文件的访问控制有两种方法:一是UNIX的文件权限管理;二是使用访问控制列表来管理。
1.UNIX文件权限管理

(1)如何显示文件信息。

 例20-16 显示文件信息。

% cd /sbin

% ls -la

total 13456

drwxr-xr-x 2 root sys 512 Sep 1 14:11 .

drwxr-xr-x 29 root root 1024 Sep 1 15:40 ..

-r-xr-xr-x 1 root bin 218188 Aug 18 15:17 autopush

lrwxrwxrwx 1 root root 21 Sep 1 14:11 bpgetfile -> ...

-r-xr-xr-x 1 root bin 505556 Aug 20 13:24 dhcpagent

-r-xr-xr-x 1 root bin 456064 Aug 20 13:25 dhcpinfo

(2)如何改变文件的拥有者。

 例20-17 将文件的拥有者改为stacey。

# chown stacey example-file

(3)如何改变文件的组。

 例20-18 将文件的组改为scifi。

$ chgrp scifi example-file

(4)如何改变文件权限。

$ chmod a+rx example-file2

$ chmod 700 my_script
2.用访问控制列表设置文件安全

(1)如何检查文件是否有访问控制列表。

 例20-19 检查文件是否有访问控制列表。

% ls -l ch1.sgm

-rwxr-----+ 1 stacey techpubs 167 Nov 11 11:13 ch1.sgm

输出结果有“+”号时,表示文件有访问控制列表。

(2)如何给文件增加访问控制列表。

 例20-20 给ch1.sgm文件设置访问控制列表。

% setfacl -s user::rw-,group::r--,other:---,mask:rw-,user:anusha:rw- ch1.sgm

使用ls -l查看,ch1.sgm文件有“+”符号,说明访问控制列表已经起作用:

% ls -l

total 124

-rw-r-----+ 1 stacey techpubs 34816 Nov 11 14:16 ch1.sgm

-rw-r--r-- 1 stacey techpubs 20167 Nov 11 14:16 ch2.sgm

-rw-r--r-- 1 stacey techpubs 8192 Nov 11 14:16 notes

查看文件的访问控制列表的详细内容:

% getfacl ch1.sgm

# file: ch1.sgm

# owner: stacey

# group: techpubs

user::rwuser:

anusha:rw- #effective:rwgroup::

r-- #effective:r--

mask:rwother:---

(3)如何复制访问控制列表。

 例20-21 将ch2.sgm文件的访问控制列表复制到ch3.sgm上。

% getfacl ch2.sgm | setfacl -f - ch3.sgm

(4)如何改变文件的访问控制列表。

 例20-22 改变文件的访问控制列表。

% setfacl -m user:anusha:6 ch3.sgm

% getfacl ch3.sgm

# file: ch3.sgm

# owner: stacey

# group: techpubs

user::rwuser::

anusha:rw- #effective:r--

group::r- #effective:r--

mask:r--

other:r-

(5)如何删除文件的访问控制列表。

 例20-23 删除文件的访问控制列表。

% setfacl -d user:anusha ch4.sgm

[ 本帖最后由 云杉上的蝴蝶 于 2008-4-12 06:09 编辑 ]

TOP

2.4 系统、文件及设备的安全 --系基本审计和报告工具(BART)

BART是在文件系统级的文件跟踪工具。使用BART工具使你能快速、容易和可靠地得到系统中的软件构成信息。使用BART能很大程度地减少网络系统的管理成本。BART能够在目标系统软件目录的文件层执行检查操作。该实用程序可用于收集有关系统已安装了哪些内容的信息。BART还使你能够对已安装的系统及系统内容随时间的变化情况进行比较。
1.BART的组成

基本审计和报告工具(BART)由两个主要部分和一个可选部分组成。

(1)BART文件列表(Manifest)。

你可以使用bart create命令在特定时刻建立文件层的快照。输出的文件目录或文件属性被称为文件列表。文件列表中列出文件的信息,包括着文件属性信息及一些其他的惟一信息,比如md5的检查信息等。

(2)BART报告。

BART报告有三个输出:两个文件列表的比较和一个可能出现的差异标记。你能用bart compare命令比较两个文件列表:控制文件列表和测试文件列表。这些文件列表必须是具有相同的文件系统、选项和创建时使用的规则文件。bart compare命令报告两个文件列表的每一行的差异。这个差异就是指文件列表内表示的文件属性的任何差异。两个文件列表中条目的增加和删除也视为差异。

(3)BART规则文件。

规则文件是用来管理bart命令的文件,是可选的。它使用或排除一些规则。规则文件用来创建定制文件列表和报告。规则文件使你能使用简单的语法设置文件的类别,以及哪些属性需要监控。当你比较文件列表时,规则文件帮助识别差异。使用规则文件是得到系统专门信息的有效方法。
2.如何使用BART

规则用户、超级用户或具有重要管理权限的用户可以使用bart命令。如果你是运行bart的规则用户,你只能监控有权限访问的文件和目录,比如主目录信息。超级用户使用bart命令的优势是可以监控隐藏目录和私人目录的信息。如果要监控严格限制的目录,比如/etc/shadow和/etc/passwd目录,就需要是超级用户或具有相当角色的用户。

(1)如何创建文件列表。

 例20-24 创建包含目录/etc/ssh下所有文件信息的文件列表。

# bart create -R /etc/ssh

! Version 1.0

! Saturday, November 29, 2003 (14:05:36)

# Format:

#fname D size mode acl dirmtime uid gid

#fname P size mode acl mtime uid gid

#fname S size mode acl mtime uid gid

#fname F size mode acl mtime uid gid contents

#fname L size mode acl lnmtime uid gid dest

#fname B size mode acl mtime uid gid devnode

#fname C size mode acl mtime uid gid devnode

/ D 512 40755 user::rwx,group::r-x,mask:r-x,other:r-x 3f81eab9 0 3

/ssh_config F 861 100644 user::rw-,group::r--,mask:r--,

other:r-- 3f81e504 0 3 422453ca0e2348cd9981820935600395

/ssh_host_dsa_key F 668 100600 user::rw-,group::---,mask:---,

other:--- 3f81eab9 0 0 5cc28cdc97e833069fd41ef89e4d9834



 例20-25 创建包含文件/etc/passwd和/etc/shadow的信息的文件列表。

# bart create -I /etc/passwd /etc/shadow

! Version 1.0

! Monday, December 15, 2003 (16:28:55)

# Format:

#fname D size mode acl dirmtime uid gid

#fname P size mode acl mtime uid gid

#fname S size mode acl mtime uid gid

#fname F size mode acl mtime uid gid contents

#fname L size mode acl lnmtime uid gid dest

#fname B size mode acl mtime uid gid devnode

#fname C size mode acl mtime uid gid devnode

/etc/passwd F 542 100444 user::r--,group::r--,mask:r--,

other:r-- 3fcfd45b 0 3 d6

84554f85d1de06219d80543174ad1a

/etc/shadow F 294 100400 user::r--,group::---,mask:---,

other:--- 3f8dc5a0 0 3 fd

c3931c1ae5ee40341f3567b7cf15e2

上面已经显示了这两个文件的详细信息,我们可以对比一下ls –al命令的输出,体会一下它们之间的不同:

# ls -al /etc/passwd

-r--r--r-- 1 root sys 542 Dec 4 17:42 /etc/passwd

# ls -al /etc/shadow

-r-------- 1 root sys 294 Oct 15 16:09 /etc/shadow

显然,文件列表的内容要比ls –al详细得多。

(2)如何比较文件列表。

如果我们在不同的时间对系统中某个目录分别建立了两个文件列表,就可以通过比较这两文件列表的不同而找到这个目录的轻微改动,这也将为系统安全带来新的保障。

 例20-26 比较不同时间的/etc目录的变化。

首先,建立/etc的文件列表:

bart create -R /etc > system1.control.121203

在另一个时间建立/etc目录的新的文件列表:

bart create -R /etc > system1.test.121503

最后,比较两个文件列表的内容:

# bart compare system1.control.121203 system1.test.121503

/vfstab:

mode control:100644 test:100777

acl control:user::rw-,group::r--,mask:r--,other:r-- test:user::rwx,

group::rwx, mask:rwx, other:rwx

通过上面的输出报告,我们发现/etc/vfstab文件已经被更改了。

TOP

3.1 Solaris加密体系 -- 概述

Solaris系统的安全与其加密体系密切相关。系统管理员应了解Solaris加密体系。

Solaris加密体系(Cryptographic Framework)以无缝透明的形式向用户提供应用和内核模块的加密服务,用户应用很少察觉到,也很少受到干扰。密码体系中包括命令、用户程序编程接口、内核编程接口和优化加密算法的程序。
1.加密体系中的术语

加密算法

加密算法是一些公式和法则,它规定了明文和密文之间的变换方法。下面简要列出Solaris加密体系中的一些加密算法。

 AES:Advanced Encryption Standard高级加密标准,是美国联邦政府标准,是指定的标准密码系统,未来将在政府和银行业用户使用,因为它的执行速度很快,十分适合于现代需求(如智能卡),而且能够使用的密钥大小范围很广。

 DES:Data Encryption Standard,在1977年被美国政府正式采纳,是全世界最广泛使用的加密算法。除政府以外,银行业是加密的最大用户,主要问题是其密钥长度很短,密钥实际上有64位,但密钥有8位是奇偶校验位,DES密钥实际只有56位在起作用,完全不适合当今的形势,它已由AES高级加密标准算法代替了。

 3DES:即三重DES,只是以某种特殊的顺序使用2个密钥执行三次DES,也可以使用三个单独密钥。

 DH:Diffie-Hellman密钥协议,由公开密钥密码体制的奠基人Diffie和Hellman所提出的一种思想,允许两名用户在公开媒体上交换信息以生成“一致”的、可以共享的密钥。

 DSA:所谓数字签名就是信息发送者用其私钥对从所传报文中提取出的特征数据(或称数字指纹)进行RSA算法操作,以保证发信人无法抵赖曾发过该信息(不可抵赖性),同时也确保信息报文在经签名后末被篡改(完整性)。当信息接收者收到报文后,就可以用发送者的公钥对数字签名进行验证。

 HMAC:Keyed-hash message authentication code,MAC有几种工作方式。第一种方式是在计算摘要之前,将秘钥并置到数据末尾。如果没有秘钥,则无法确认数据未经改动。另一种计算更复杂的方式是照常计算散列,然后再使用对称算法(如 DES)加密散列。要认证散列,必须首先对它解密。

 MAC:Message Authentication Code消息认证代码,使用一个密钥生成一个固定大小的小数据块,并加入到消息中。该密钥可以用于认证可疑数据,确保加密位流在传输中免遭恶意修改。

 MD5:Message-Digest Algorithm,由麻省理工学院为开发的用于数字签名的信息摘要算法,做Message的Hash变换,将任意长度的Message变换成一个128位的大整数,并且它是一个不可逆的字符串变换算法。MD5的典型应用是对一段Message产生数字指纹,以防止被篡改,即数字签名应用。

 PKCS:Public-Key Cryptography Standards是由美国RSA数据安全公司及其合作伙伴制定的一组公钥密码学标准,其中包括证书申请、证书更新、证书作废表发布、扩展证书内容,以及数字签名、数字信封的格式等方面的一系列相关协议。PKCS已经公布了PKCS#1到PKCS#15。

 PKCS#5:基于口令的加密标准,是一种利用从口令派生出来的安全密钥加密字符串的方法。使用MD5从口令中派生密钥,并采用DES-CBC模式加密。主要用于加密从一个计算机传送到另一个计算机的私人密钥,不能用于加密消息。

 PKCS#11:定义了一套独立于技术的程序设计接口,用于智能卡和PCMCIA卡之类的加密设备。

 RSA:美国麻省理工学院研究人员开发,是最有名的公钥算法,也是第一个能同时用于加密和数字签名的算法,出口受限。RSA背后的一般思想将两个大素数相乘十分容易,但是想分解它们的乘积却极端困难,因此可以将乘积公开作为加密密钥。在1999年,用了7个月时间完成了对特定 RSA 512位数(称为 RSA-155)的因式分解。由于进行的都是大数计算,使得RSA最快的情况也比DES慢。

 SHA-1:安全散列算法(SHA)是由美国国家标准和技术协会(National Institute of Standards and Technology)开发的,1994年发布了原始算法的修订版,称为SHA-1。与MD5相比,SHA-1生成160位的消息摘要,虽然执行更慢,却被认为更安全。明文消息的最大长度可达到264位。

机制

机制就是应用加密算法的目的。比如,对于DES来说,CKM_DES_MAC的机制就是验证。

消费者

消费者就是使用加密服务的用户、应用软件或内核操作。

提供者

提供者就是消费者使用的加密服务。


2.Solaris加密体系中命令介绍

管理命令

cryptoadm命令是在Solaris加密体系中的管理命令。它可以管理下列内容:

 显示加密服务提供者的信息。

 启动或关闭提供者。

用户命令

Solaris加密体系提供了几个用户级的命令来检查文件的完整性和保密性。

 Digest:计算文件的数字签名。通过比较数字签名来检查文件的完整性。

 Mac:计算消息身份验证代码。消息身份验证保证了被传输的消息不会在途中被修改。

 Encrypt:对文件加密。

 Decrypt:对文件解密。

TOP

3.2 Solaris加密体系 -- 使用加密方法来保护系统文件

Solaris加密体系从以下两个方面来保护文件。

 保密性:保密性是指确保数据处于私有和保密状态,并且不会被可能使用网络监控软件的窃听者查看到。通常借助加密来达到保密目的。

 完整性:以防止数据在传输过程中遭到意外或蓄意(恶意)的修改。完整性通常是通过使用数字签名或者“消息身份验证代码”(Message Authentication Code, MAC)来实现的。

用户可以将自己的文件以加密的方式存储,尽管这些文件对于超级用户还是可读的,但内容确是超级用户无法识别的。因为,此时的文件内容已经被加密算法打乱了,只有用户才可以通过解密算法来恢复文件的内容。

文件在传输的过程中能否保持与原来文件的内容一致,我们如何察觉到传递的文件已经被别人修改过了?有两种方法可以验证文件的一致性:

 数字签名。

 消息身份验证代码。
1.产生对称密钥

密钥是控制加密算法和解密算法的关键信息,它的产生、传输、存储等工作是十分重要的。对称密钥是无论加密还是解密都采用一个密钥。密钥的产生最好是随机产生的。下面我们介绍使用dd命令和/dev/urandom设备随机产生的密钥的方法。

(1)在产生密钥前需要了解系统中加密算法所支持的密钥长度。

显示数字签名算法:

% encrypt -l

Algorithm Keysize: Min Max (bits)

-----------------------------------------------------------------------

aes 128 128

arcfour 8 128

des 64 64

3des 192 192

显示MAC机制:

% mac -l

Algorithm Keysize: Min Max (bits)

--------------------------------------------------------------------------

des_mac 64 64

sha1_hmac 8 512

md5_hmac 8 512

我们只需要在最大值和最小值之间取一个长度数值就可以了。比如对于sha1_hmac和md5_hmac来说,我们可以取的密钥长度是8、16、64等。

(2)用随机数产生长度为16个字节的对称密钥,并存在$HOME/keyf目录的05.07.aes16文件中:

% dd if=/dev/urandom of=$HOME/keyf/05.07.aes16 bs=16 count=1

(3)保存密钥,不让其他用户读取。

% chmod 400 ~/keyf/05.07.aes16
2.检查文件的完整性

检查文件的完整性有下面两种方法。

(1)通过比较文件的数字签名,可以了解文件是否被改动。

比如,我们在下载许多UNIX软件的时候,总会看到一个文件名相同而文件扩展名却为.md5的文件。在这个文件中通常只有一行文本,大致结构如下:

md5 (duanf.tar.gz) = 85c0a53d1a5cc71ea34d9ee7b1b28

这就是duanf.tar.gz文件的数字签名。MD5将整个文件当做一个大文本信息,通过其不可逆的字符串变换算法,产生了这个惟一的MD5信息摘要。如果在以后传播这个文件的过程中,无论文件的内容发生了任何形式的改变(包括人为修改或者下载过程中线路不稳定引起的传输错误等),只要你对这个文件重新计算时MD5就会发现信息摘要不相同,由此可以确定你得到的只是一个不正确的文件。如果再有一个第三方的认证机构,用MD5还可以防止文件作者的“抵赖”,这就是所谓的数字签名应用。

检查文件的数字签名:

% digest -v -a md5 duanf.tar.gz >> $HOME/digest.duanf.05.07

% cat ~/digest.duanf.05.07

md5 (duanf.tar.gz) = 85c0a53d1a5cc71ea34d9ee7b1b28

可见,下载文件与原文件一致。


(2)“消息身份验证代码”(Message Authentication Code, MAC)

MAC也是可以检查文件内容是否正确。所不同的是,在验证过程中,还需要输入正确的密钥,才能完成验证过程。

% mac -v -a des_mac duanf.tar.gz

Enter key: <Type passphrase>

des_mac (duanf.tar.gz) = dd27870a

% echo "des_mac (duanf.tar.gz) = dd27870a" >> ~/desmac.daily.0

需要指出的是这个密钥不是文件加密解密的密钥。
3.确保文件的保密性

文件的加密和解密的目的就是为了确保文件的保密性。我们可以通过encrypt命令来对文件进行加密,使用decrypt命令来对文件进行解密。这两个命令的参数选项是一样的,我们选择encrypt命令来解释说明:

% encrypt -a algorithm [ -k keyfile ] -i input-file -o output-file

 -a 加密算法标识。

 -k 包含密钥内容的文件。

 -i input-file 你想要进行加密的文件,这个文件在命令中无改变。

 -o output-file 已经加密后,形成的加密文件,需要密钥才能打开它。

 例20-27 使用aes加密算法对ticket.to.ride文件进行加密,加密后文件名为e.ticket.to.ride。

05.07.aes16文件中存有密钥:

% encrypt -a aes -k ~/keyf/05.07.aes16 -i ticket.to.ride -o ~/enc/e.ticket.to.ride

对e.ticket.to.ride文件进行解密:

% decrypt -a aes -k ~/keyf/05.07.aes16 -i ~/enc/e.ticket.to.ride -o ~/d.ticket.to.ride

TOP

3.3 Solaris加密体系 -- 管理Solaris加密体系

本节介绍如何管理Solaris加密体系中的软件和硬件加密服务。当系统不再需要加密服务的时候,软件和硬件的加密服务都可以被关闭。比如,你可以关闭一个软件加密服务提供的算法,也可以迫使系统使用其他软件提供的加密算法。
1.如何列出可用的加密服务

Solaris加密体系提供了下面几个类型的加密算法:

 用户级的提供者;

 内核软件提供者;

 内核硬件提供者。

对于一般用户来说,只有用户级的加密机制才有可能被使用。

 例20-28 显示一般用户可以使用的加密机制。

% cryptoadm list

user-level providers:

/usr/lib/security/$ISA/pkcs11_kernel.so

/usr/lib/security/$ISA/pkcs11_softtoken.so

kernel software providers:

des

aes

blowfish

arcfour

sha1

md5

rsa

kernel hardware providers:

dca/0

如果要查看系统中有多少个加密机制,而不在意这些机制是否起用,请见下面例子:

 例20-29 查看所有的加密机制。

% cryptoadm list -m

user-level providers:

=====================

/usr/lib/security/$ISA/pkcs11_kernel.so: CKM_MD5,CKM_MD5_HMAC,

CKM_MD5_HMAC_GENERAL,CKM_SHA_1,CKM_SHA_1_HMAC,CKM_SHA_1_HMAC_GENERAL,

...

/usr/lib/security/$ISA/pkcs11_softtoken.so:

CKM_DES_CBC,CKM_DES_CBC_PAD,CKM_DES_ECB,CKM_DES_KEY_GEN,

CKM_DES3_CBC,CKM_DES3_CBC_PAD,CKM_DES3_ECB,CKM_DES3_KEY_GEN,

CKM_AES_CBC,CKM_AES_CBC_PAD,CKM_AES_ECB,CKM_AES_KEY_GEN,

...

kernel software providers:

==========================

des: CKM_DES_ECB,CKM_DES_CBC,CKM_DES3_ECB,CKM_DES3_CBC

aes: CKM_AES_ECB,CKM_AES_CBC

blowfish: CKM_BF_ECB,CKM_BF_CBC

arcfour: CKM_RC4

sha1: CKM_SHA_1,CKM_SHA_1_HMAC,CKM_SHA_1_HMAC_GENERAL

md5: CKM_MD5,CKM_MD5_HMAC,CKM_MD5_HMAC_GENERAL

rsa: CKM_RSA_PKCS,CKM_RSA_X_509,CKM_MD5_RSA_PKCS,CKM_SHA1_RSA_PKCS

swrand: No mechanisms presented.

kernel hardware providers:

==========================

dca/0: CKM_MD5,CKM_MD5_HMAC,CKM_MD5_HMAC_GENERAL,...

可以看到,系统加密机制分为三类,分别列出。

 例20-30 列出系统中可以应用的加密机制。

% cryptoadm list -p

user-level providers:

=====================

/usr/lib/security/$ISA/pkcs11_kernel.so: all mechanisms are enabled.

random is enabled.

/usr/lib/security/$ISA/pkcs11_softtoken.so: all mechanisms are enabled.

random is enabled.

kernel software providers:

==========================

des: all mechanisms are enabled.

aes: all mechanisms are enabled.

blowfish: all mechanisms are enabled.

arcfour: all mechanisms are enabled.

sha1: all mechanisms are enabled.

md5: all mechanisms are enabled.

rsa: all mechanisms are enabled.

swrand: random is enabled.

kernel hardware providers:

==========================

dca/0: all mechanisms are enabled. random is enabled.
2.如何增添软件的加密服务

 例20-31 增添PKCS#11加密库。

(1)安装软件包:

# pkgadd -d /cdrom/cdrom0/SolarisNew

(2)刷新系统加密服务:

# svcadm refresh system/cryptosvc

(3)查看加密列表,PKCS#11加密库已经在列表中:

# cryptoadm list

user-level providers:

==========================

/usr/lib/security/$ISA/pkcs11_kernel.so

/usr/lib/security/$ISA/pkcs11_softtoken.so
3.如何关闭加密服务

对于软件、硬件和内核加密服务来说,关闭的命令是一样的。我们只举一个例子说明。

 例20-32 关闭内核中aes加密。

(1)查看有无aes加密服务:

$ cryptoadm list -m provider=aes

aes: CKM_AES_ECB,CKM_AES_CBC

(2)查看aes加密服务是否启动:

$ cryptoadm list -p provider=aes

aes: all mechanisms are enabled.

(3)使用disable关闭加密服务:

$ cryptoadm disable provider=aes mechanism=CKM_AES_ECB

(4)查看aes服务是否已经关闭:

$ cryptoadm list -p provider=aes

aes: all mechanisms are enabled, except CKM_AES_ECB

TOP


感谢一直以来您对我们的支持!
当前时区 GMT+8, 现在时间是 2008-9-8 12:20 京ICP证060528 号

Designed By 17DST