[转帖]常见Unix安全设置方案(1)--Solaris 系列_VMware, Unix及操作系统讨论区_Weblogic技术|Tuxedo技术|中间件技术|Oracle论坛|JAVA论坛|Linux/Unix技术|hadoop论坛_联动北方技术论坛  
网站首页 | 关于我们 | 服务中心 | 经验交流 | 公司荣誉 | 成功案例 | 合作伙伴 | 联系我们 |
联动北方-国内领先的云技术服务提供商
»  游客             当前位置:  论坛首页 »  自由讨论区 »  VMware, Unix及操作系统讨论区 »
总帖数
1
每页帖数
101/1页1
返回列表
0
发起投票  发起投票 发新帖子
查看: 3673 | 回复: 0   主题: [转帖]常见Unix安全设置方案(1)--Solaris 系列        下一篇 
liulin_2
注册用户
等级:少校
经验:1143
发帖:85
精华:5
注册:2012-12-10
状态:离线
发送短消息息给liulin_2 加好友    发送短消息息给liulin_2 发消息
发表于: IP:您无权察看 2012-12-10 16:51:17 | [全部帖] [楼主帖] 楼主

常见Unix安全设置方案
3.1 Solaris 系列
3.1.1 PROM OpenBoot 和物理安全
3.1.1.1 OpenBoot安全级别
none :不需要任何口令。所有OpenBoot设置都可以修改,任何人只要物理接触到主控台,就
可以完全控制。command:除了bootgo之外所有命令都需要口令。full:除了go命令之外所
有命令都需要口令。
3.1.1.2 改变OpenBoot安全级别
首先使用eeprom security-password 命令设置OpenBoot口令,然后在root登入状态使用eep
rom security-mode=command命令改变安全级别为command或在OK状态:ok setenv security
-mode=command的密码保护来实现。
3.1.2 文件系统的安全
3.1.2.1 基础知识
文件系统是unix系统安全的核心。在unix中,所有的事物都是文件。Unix中的基本文件类型
有正规文件、目录、特殊文件、链接、Sockets等等。这些不同类型的文件以一个分层的树结
构进行组织,以一个叫"root"的目录为起始位置("/")。整个就是一个文件系统。每个文件对
应一个"i节点""i节点"包括UID(文件拥有者)GID(文件所在组)、模式(文件的权限)、文
件大小、文件类型、ctime("i节点"上次修改时间)mtime(文件上次修改时间)atime(文件
上次访问时间)nlink(��接数)。它表示了文件的基本属性。
大家注意到,"/"下有很多的目录,那么这些目录是干什么的呢?下面简要介绍一下目录结构
。如下:
/bin 用户命令的可执行文件
/dev 特殊设备文件
/etc 系统执行文件、配置文件、管理文件,主要是配置文件
/home 用户起始目录
/lib 引导系统以及在root文件系统中运行命令所需的共享库文件
/lost+found 与特定文件系统断开连结的丢失文件
/mnt 临时安装的文件系统(如光驱、软驱)
/proc 一个伪文件系统,用来作为到内核数据结构或正在运行的进程的接口(用于调试)
/sbin 只有root使用的可执行文件和只需要引导或安装/usr的文件
/tmp 临时文件
/usr 为用户和系统命令使用的可执行文件、头文件、共享库、帮助文件、本地程序(/usr
/local)
/var 用于电子邮件、打印、cron等的��件,统计文件,日志文件
文件系统有多种类型,unix内核支持如下文件系统:
1) ext2 固定和可移动磁盘都支持的一种高性能文件系统,用于linux
2) msdos MS-DOSWindows使用
3) umsdos Linux使用的一种扩充的DOS文件系统,支持长文件名、权限设置
4) iso9660 遵从ISO9660标准的CD-ROM文件系统
5) hpfs High Performance Filesystem,高性能文件系统,OS/2使用
6) minix Minux OS中使用,最早的Linux文件系统
7) nfs 用来访问远程计算机中磁盘的网络文件系统
8) swap 用作交换的磁盘分区
3.1.2.2 文件权限
文件权限是unix文件系统安全的关键。Unix中的每个用户有一个唯一的用户名和UID(用户ID
),每个用户属于一个或多个组。基本分组成员在/etc/passwd中定义,附加的分组成员在
/etc/group中定义。例如,用户tigerUID225,分组为11(students),此外,他还是分组
185(postgraduates)的成员。每个文件和目录有三组权限,一组是文件的拥有者、一组是文
件所属组的成员、一组是其他所有用户。"r"表示可读,"w"表示可写,"x"表示可执行。一共
9(每组3),合起来称为模式位(mode bits)
模式位通常由一列10个字符来表示,每个字符表示一个模式设置,第一个指明文件类型,如
(d表示目录,-表示普通文件,l表示链接文件等等)。例如,用ls -l 命令显示如下:

drwxr-xr-x 2 root root 1024 Aug 13 09:22 backup/
-rw-r--r-- 1 root root 1824 Apr 21 18:45 client.c
-rw------- 1 root root 65536 Apr 22 17:56 core
-rw-r----- 1 root root 2351 Apr 22 14:01 cry1.bak
-rwxr-xr-x 1 root root 27492 Apr 21 18:47 crypt*
-rw-r----- 1 tiger tiger 2450 Apr 22 15:16 cryption_server.c
-rw-r----- 1 tiger tiger 1544 Apr 22 15:02 myinclude.h
-rwxr-xr-x 1 root root 8280 May 3 10:35 test*


例如最后一行以"-"开始,表示test使一个普通文件,文件拥有者可以读写执行、本组其他成
员可以读执行、其他用户可以读执行。我们可以用chmodumask命令来改变权限,这很简单
,察看相应的帮助就知道怎么修改权限。
3.1.2.3 SUID/SGID
为什么要单独把他们从文件权限中分出来讲呢?因为,这是网络入侵者非常爱用的入侵入口
SUID表示"设置用户ID"SGID表示"设置组ID"。当用户执行一个SUID文件时,用户ID在程
序运行过程中被置为文件拥有者的 户ID。如果文件属于root,那用户就成为超���用户。同
样,当一个用户执行SGID文件时,用户的组被置为文件的组。例如,PS命令以SUID root运行
,他从系统内存中读取,这是一般用户不能做的。SUID程序代表了重要的安全漏洞,特别是
SUID设为root的程序。
Unix实际上有两种类型的用户ID"real user ID"是在登录过程中建立的用户ID。 "effect
ive user ID"是在登录后的会话过程中通过SUIDSGID位来修改。当一个用户运行一条命令
时,进程继承了用户登录Shell的权限,这时"real user ID""effective user ID"是相同
的。当SUID位被设置时,进程继承了命令拥有者的权限。例如普通用户运行passwd命令时,
他能够修改/etc/passwd文件,尽管文件是属于root的。这成为可能是因为passwd命令以roo
tSUID权限运行。那么如何识别SUID程序呢?我们检查文件的权限模式,在它的第四位如果
不是"x",而是"s",就是一个SUID程序。例如,ls -l /bin/su命令显示:

-rwsr-xr-x 1 root root 14888 Aug 15 1999 /bin/su*


表明su是一个SUID程序。
Unix系统安全的一种典型攻击就是创建一个SUIDrootshell拷贝,然后把他隐藏。通过调
用后门,攻击者就获得了root的权利。例如,某个系统管理员忘了关闭某个rootShell,一
个坏人经过运行如下命令:

cp /bin/bash /home/badman/.bash; chmod 4777 /home/badman/.bash


badman现在就有了一个bashSUID root拷贝任其处理。他就有完整的root权限了。因此,系
���管理员应该定期察看系统中有哪些SUIDSGID文件。用下面的命令可以实现:find / -ty

pe f ( -perm -4000 -o -perm -2000 ) -ls


当然,攻击者可以通过修改find命令来逃避检测,所以要运行专门的检测软件(Tripwire)
来进行检查。
3.1.2.4 加密与验证
Tripwire工具提出了使用密码校验和来确定文件是否经过了未认证的修改,加密技术可以用
来保护机密文件甚至整个文件系统。加密是通过密钥将明文转化为一堆乱码的密文,从而起
到保护文件内容的作用。Unix常用的加密算法有crypt(最早的加密工具)DES(目前最常用的
)IDEA(国际数据加密算法)RC4Blowfish(简单高效的DES)RSA等等。具体的加密算法
这里不再阐明,需要了解请阅读Bruce Schneier的《应用密码学》一书。注意单向hash函数
,他处理任意长度的信息并返回一个固定长度的hash(128)。常用的有MD5SHAHAVAL
Snefru等等。单向hash函数经常和公开密钥算法一起来创建数字签名,提供身份证明。与
传统的签名相比,数字签名还可以指出文件是否被修改过。
PGPunix下用来保护信息特别是电子邮件的工具。他使用IDEA算法为数据加密,使用RSA
法来进行密钥管理和数字签名,使用MD5来作为一个单向hash函数。其特点在于安全:不仅内
容被伪装,连发送者的签名也加密。PGP还可以用来加密本地文件。现在常用的Linux下的PG
P工具为:pgpe(加密)pgps(签名)pgpv(��认/解密)pgpk(管理密钥)。请参考相应的帮
助来使用。
"特洛伊木马"的故事不知道大家听说过没有。古希腊人久攻特洛伊城不下,于是假装求和,
送了一个巨大的木马作为礼物,向城主Minerva表示和解。特洛伊人将木马拉入城内,到了夜
晚,藏在木马中的希腊士兵钻出来,里应外合,攻破特洛伊城。在计算机安全领域,这种欺
骗技巧成为攻击计算机安全的一种标准方式。他藏在你的计算机里,随时可能爆发,如果攻
击者需要的话。因此,一旦一个系统被装了特洛伊木马,他就不能在信任了,必须从新安装
。怎么避免呢,要养成良好的习惯,例如:限制下载,只从有声望的站点下载东西;检验下
载的文件;避免运行已编译好的二进制代码,从源代码开始编译;不执行不信任的电子邮件
发送的程序;不执行从非信任的Web站点得到的Java appletsJava Script
MD5校验和有时与软件一起发行,用户可以用他来检验一个软件包。用户可以运行Red Hat L
inux中包含的md5sum工具,例如:md5sum cops.1.04.tar.gz
结果:lfa416872934e5bee99068f9989cb8b0 cops.1.04.tar.gz
和软件包自带的校验和文件比较,如果不符,则说明文件在传输过程中出了问题,最好从新
下载,本文件不可靠。md5sum还可以用来检验系统文件,在第一次安装系统之后对重要的li
lo系统二进制文件进行一下校验:md5sum lilo,其结果应该一直保持不变,除非升级。
3.1.2.5 完整性检查
完整性是安全系统的核心属性。用户需要知道昨天写的文件和今天打开的文件没有被改动。
攻击者可以用很多方法破坏文件系统,从依靠错误配置的权限获益到放置特洛伊木马和病毒
Linux中用cksum命令对一个特定文件执行16位校验和的计算,上面的md5sum也是一个检验
的命令。
RPM(Red Hat Package manager)是由Red Hat Software开发并包含在其Linux产品之中的多功
能软件安装管理器。他可以用来建立、安装、查询、检验、升级和卸载独立的软件包。
3.1.2.6 加密文件系统
加密文件系统是文件系统安全的一个更引人注目的方法。他根据一个简单的推断:如果一个
系统保存机密数据,那么就应该以加密形式保存。加密文件系统(CFS)的核心思想是: CFS
目录和文件提供一个透明的接口,并自动使用用户的密钥加密。一条单独的命令把一个密钥
和一个目录关联起来,从这时起,目录的内容在写时自动加密,在打开时自动解密。
一个由意大利人开发的透明加密文件系统(TCFS),用户甚至不知道他们的文件倍加密了。从
下面的地址下载:http://tcfs.dia.unisa.it/
3.1.2.7 备份
备份的重要性我想不需要多说了,那么备份有那些策略呢?常见的有:系统初装时的备份、
定期备份、增量式备份(只备份改动的)、特别备份(为某些文件备份)等等。Linux系统提供了
以下备份工具:
1) cp:拷贝,例如把dir1中的所有内容拷贝到dir2cp -R dir1 dir2
2) tar:可以创建、把文件添加到或从一个tar档案中解开文件。档案本身也是一个文件,它
包含其他的许多文件和有关信息。Tar最初用于磁带机。
3) cpio:把文件拷贝进或拷贝出一个cpio档案或tar��案,与tar类似
4) dump:得到整个文件系统并把他拷贝到备份介质上,一个确保完整备份的正规方式是跟随
定期增量备份运行一个0级或完全备份,dump支持10个级别并能把上次备份后改动的所有文件
以更低的级别备份。缺省情况dump将备份到磁盘介质。例如,把一个SCSI硬盘(/dev/rsd0a)
0级备份到磁带(/dev/rst0)dump 0f0 /dev/rst0 1500 /dev/sd0a
5) restore:用来恢复整个文件系统或提取单个文件。与dump相对。注意,restore命令特别
冒险,因为他运行SUID root,像任何SUID root程序一样,可以根据自己的风险来运行rest

ore。


3.1.2.8 其他常见系统安全工具导航
1CRYPT BREAKERS WORKBENCH一个集成多种工具的平台,帮助一个加密人员读取BSD4.2加密
的文件。

ftp://coast.cs.purdue.edu/pub/tools/unix/cbw
2)HOBGOBLIN
ftp://coast.cs.purdue.edu/pub/tools/unix/hobgoblin/


3TRIPWIRE,强烈推荐,是一个文件系统完整性检查工具。

http://www.tripwiresecurity.com/


4TROJAN,一个可以被任何用户运行来检查特洛伊木马的perl程序。

ftp://coast.cs.purdue.edu/pub/tools/unix/trojan/trojan.pl


5PGP,流行的邮件和文件加密程序。

http://rufus.w3.org/linux/RPM/pgp.html


6LIBDES,建立一个DES加密库和一个DES加密程序的工具。包括一个crypt(3)的快速实现。

ftp://ftp.psy.uq.oz.au/pub/Crypto/DES/


3.1.3 用户账号和环境的安全
3.1.3.1 口令管理增强方法
可以使用如下命令及其参数来增强对用户密码的管理:
1passwd -n 30 user #强迫用户每30天修改一次密码;
2passwd -f user #强迫用户在下一次登录时修改口令;
3passwd -n 2 -x 1 user #禁止用户修改口令;
4passwd -l user #封锁用户账号,禁止登录。
3.1.3.2 CRACK
Crack可以找出/etc/shadow中那些容易猜测的口令,虽然运行crack将会使CPU的负载加重,
但它在第一次运行时就可以给出10%系统帐号的口令。

URL:ftp://sable.ox.ac.uk/pub/comp/security/software/crackers/


3.1.3.3 取消ROOT的远程登陆
默认在/etc/default/login里加上 "CONSOLE"行,在/etc/ftpusers里加上root
3.1.3.4 配置ROOT的环境
1)将umask设为077或者027.
2)查看你的环境中路径设置情况,不要有./
3.1.3.5 删除不必要的帐号
移去或者锁定那些不是必须的帐号,比如sysuucpnuucplisten等等,简单的办法是在/et
c/shadowpassword域中放上NP字符。
3.1.3.6 NIS的安全问题
NIS从来就不是一个安全的服务,如果配置得当的话NIS+会更好些,就象暴力破解密码一样,
NIS域名如果被猜出来,就会给入侵者提供相当丰富的信息,要关闭这个漏洞,可以将信任主
机的地址放在/var/yp/securenets中。并且考虑使用NIS+或者secure RPC
3.1.3.7 取消rlogin/rsh服务
移去/etc/hosts.equiv/.rhosts以及各home目录下的.rhosts,并且在/etc/inetd.conf
r系列服务都杀掉,然后找出inetd的进程号,重启它。
3.1.3.8 限制通过网络进入系统
Telnetftp守护进程是从inetd进程启动的,inetd的配置文件是/etc/inetd.conf,还包含了
其它的各种服务,所以你可以干脆移去这个文件,新建一个只包括以下两行的文件:

ftp stream tcp nowait root /usr/local/bin/tcpd /usr/local/bin/wu-ftpd
telnet stream tcp nowait root /usr/local/bin/tcpd /usr/sbin/in.telnetd


当然这是基于你需要telnetftp的基础上的,如果你连这两个服务都不用的话,你就可以将
它注释掉或者删除,这样在系统启动的时候inetd就不需要启动了。
Tcpd的访问控制是由/etc/hosts.allow/etc/hosts.deny文件控制的,tcpd先查找/etc/ho
sts.allow,如果你在这里面允许了某几台主机的telnetftp访问的话,那么deny访问就是
对其它所有机器的了。这是"默认拒绝"的访问控制策略,下面是一个hosts.allow文件的样本


ALL: 172.16.3.0/255.255.255.0


这将允许172.16.3.0网络的主机上任何用户访问你的telnetftp服务,记住在这里要放置I
P地址,因为域名比较容易受到欺骗攻击……
现在我们准备拒绝其余所有人的连接了,将下面的语句放在/etc/hosts.deny中:

ALL: /usr/bin/mailx -s "%d: connection attempt from %c" root@mydomain.com


这条指令不仅拒绝了其它所有的连接,而且能够让tcpd发送emailroot--一旦有不允许的连
接尝试发生时。
现在你可能希望用syslog记录下所有的访问记录,那么在/etc/syslog.conf放进如下语句:

auth.auth.notice;auth.info /var/log/authlog


注意两段语句间的空白是tab键,否则syslog可能会不能正常工作。
3.1.3.9 配置S/Key
S/Key是一个用于实现安全的一次性口令方案的软件,它根据一系列信息(包括一个秘密口令
)通过MD5处理而形成的初始钥匙,该初始钥匙再交给MD4进行处理,资助将128位的数字签名
缩成64位,该64位信息再次传给MD5函数,这个过程一直持续直到达到期望值……
开始使用S/Key时,要建立一个以/usr/local/bin/keyshshell的帐号:
/etc/passwd中加入

access:x:100:100:Access Account:/tmp:/usr/local/bin/keysh


并且在/etc/shadow中加入

access:NP:6445::::::


然后使用passwd access命令来设定用户的访问密码。
由于/usr/local/bin/keysh不是一个标准的shell,所以你的/etc/shells文件中内容如下:

/sbin/sh
/usr/local/bin/keysh


只有使用这两种login shell的用户才允许接入。
然后建立一个文件/etc/skeykeys并赋予一定的许可权限:

touch /etc/skeykeys
chmod 600 /etc/skeykeys
chown root /etc/skeykeys
chgrp root /etc/skeykeys


使用keyinit access命令来初始化S/Key秘密口令。
现在你可以配置允许用户通过keysu命令来成为超级用户,首先改变/etc/group:

root::0:root,access


只有在这里列出来的用户才允许通过keysu成为超级用户。现在可以使用不着keyinit root
令来初始化超级用户的S/Key秘密口令,建议该口令要与user的有所区别。
本来你可以将/bin/su删掉以确定用户只能使用keysu……,但不幸的是,许多脚本使用/bin
/su来开启进程,所以只需用chmod 500 /bin/su来改变它的权限就行了。
3.1.3.10 X的安全配置
使用SUN-DES-1选项来调用Secure RPC来通过X鉴别,可以使用xhost +user@host来通过访问
请求。
3.1.3.11 开启SUN-DES-1鉴别机制

set DisplayManager*authorize: true
set DisplayManager._0.authName: SUN-DES-1
rm ~/.Xauthority


增加对localhost的许可权限,通过

xauth local/unix:0 SUN-DES-1 unix.local@nisdomain
xauth local:0 SUN-DES-1 unix.local@nisdomain
Start X via xinit -- -auth ~/.Xauthority


把你自己加入,并移去其他所有人:

xhost +user@ +unix.local@nisdomain -local -localhost


赋予用户foo进入主机"node"的权限:
允许foo进入node: xhost +foo@
建立适当的fooxauthority: xauth add node:0 SUN-DES-1 unix.node@nisdomain
foo现在就能连上"node": xload -display node:0
3.1.4 系统的启动和关闭
3.1.4.1 更改不必要的启动文件
通常情况下,你要检查所有在/etc/rc2.d/etc/rc3.dS开头的文件,所有并非必要的设备
或者服务都可以重命名(不要再以S开头),然后你可以重新启动,从/var/adm/messages中来
观察自启动的情况,并且从ps -elf的输出中加以检查。
3.1.4.2 系统里的Strip
Solaris下,你可以通过对/etc/rc[S0-3].d文件来修改启动时自引导的动作。考虑移去/e
tc/rc2.d中在你系统中用不到的服务,我还建议你移除/etc/init.d里除下以下列表中文件外
的所有东西:

K15rrcd S05RMTMPFILES K15solved S20sysetup
S72inetsvc S99audit S21perf
S99dtlogin K25snmpd S30sysid.net S99netconfig
K50pop3 S74syslog S75cron S92rtvc-config
K60nfs.server K65nfs.client S69inet
K92volmgt README S95SUNWmd.sync
S01MOUNTFSYS S71sysid.sys S88utmpd S95rrcd


这些文件可能会与你的不同--这取决于你机器里的图形卡/是否使用Solaris DiskSuits等等
。移除/etc/rc3.d里的文件........
3.1.4.3 取消NFS服务
NFS的共享输出是由/etc/dfs/dfstab文件管理的.可以删除它。要将NFS服务器的守护进程关
闭则可以重命名/etc/rc3.d/S15nfs.server。要防止一台机器成为NFS客户机,可以重命名文
/etc/rc2.d/S73nfs.client--当重命名这些自启动文件时,要注意不要将文件的首字母设
"S"
3.1.4.4 rpcbind中的安全问题
Rpcbind是允许rpc请求和rpc服务之间相互连接的程序,但标准的rpc是不安全的北京联动北方科技有限公司,它使用的
"AUTH_UNIX"验证也就是说它依靠的是远程系统的IP地址和远程用户的UID来验证。一般
的系统可能需要某些rpc存在,但对各种服务器如Web servers, ftp servers, mail server
s, etc)最好将rpc服务关闭,你也可以通过一些安全工具来确定rpc服务是否会影响到你系统
的安全性。可以通过将/etc/rc2.d/S71RPC改名来禁止rpc��
3.1.4.5 in.finger的安全问题
in.fingerd在过去有一些安全问题,如果你想提供finger工具,用nobody来运行它。
3.1.4.6 sendmail的设置
/usr/lib/sendmail守护程序并没有打开,因为你不必总在25端口监听mail的列表请求,你可
以在rootcrontab文件中增加:

0 * * * * /usr/lib/sendmail -q > /var/adm/sendmail.log 2>&1


这条命令要以每小时调用sendmail进程处理排队中的邮件。
3.1.5 cron 和 at
3.1.5.1 cron任务的注意事项
1) 查看所有的cron任务--/var/spool/cron/crontabs文件中可以找到它们。
2) 必须在/etc/default/cron里设置了"CRONLOG=yes" 来记录corn的动作。
3.1.5.2 cron用户配置
/etc/cron.d/cron.allow/etc/cron.d/cron.deny两个文件决定了一个特定用户是否可以运
crontab命令。daemonbinsmtpnuucplistennobodynoaccess这些用户不应该有
执行crontab权限。
3.1.5.3 at 用户配置
/etc/cron.d/at.allow/etc/cron.d/at.deny两个文件决定了一个特定用户是否可以运行a
t命令。daemonbinsmtpnuucplistennobodynoaccess这些用户不应该有执行at
限。
3.1.5.4 cronTripwire
Tripwire应该配置成定期检查下面文件和目录:/etc/cron.d/etc/default/var/cron

/var/spool/cron、/etc/cron.d/cron.allow、/etc/cron.d/at.allow、/etc/cron.d/at.de
ny




赞(0)    操作        顶端 
总帖数
1
每页帖数
101/1页1
返回列表
发新帖子
请输入验证码: 点击刷新验证码
您需要登录后才可以回帖 登录 | 注册
技术讨论