secux 发表于 2007-09-18 17:17

ZTSolaris安全操作指南!

第一章 Solaris系统安全安装
1.1 安装步骤
下面将以安装Solaris 8 为例,描述系统安装的过程及相关的安全注意事项。请系统管理员在安装系统前,认真阅读Sun公司提供的系统安装指南和参考手册,了解系统安装的基本操作步骤。
断开网络连接
请确定网络是断开,即网线没有接入网络中。如果用户希望自动配置NIS服务,则需要网络处于连通状态,但是这样做会带来一些安全隐患,因为在安装期间,RPC服务处于启动状态,存在潜在的安全威胁。建议在系统处于安全保护状态下,才将系统联入网络。
Openboot口令和安全
请首先插入CD。为了防止无关人员执行EEPROM上的命令,请在OK提示符下,使用命令"setenv"设置EEPROM的安全模式为”command”,并设置相应的口令,要求口令至少为8位,必须有字母、数字和标点,不能使用名字、完整的英文单词或生日作为口令。下面是一个示例:
ok setenv security-mode command
security-mode = command

请再次确定已经设置了EEPROM的安全模式和口令,并且口令满足一定的复杂读要求。
·OK boot cdrom
在OK状态下,设置系统启动设备为CD-ROM。
开始Solaris 安装程序
进入系统安装初期,请系统管理员按照SUN公司提供安装手册所描述的步骤进行。在系统安装min-root,并进入StartWeb安装环境后,系统管理员注意下列安全事项:
1.设置root口令
设置一个强壮的root的口令,使其符合复杂性要求,即口令长度必须为8位,包含数字、字母和标点,不能为完整的英文单词或句子。
2.选择系统安装的类型
选择系统安装的类型是系统安装中关键一步,系统管理员需要根据系统安装的策略和最小化原则选择相应的系统软件包。
强烈建议:系统安装选择自定义核心组(core group)软件包,并且不安装附带软件和附加产品。
下一步是选择群集和包,在自定义核心组的默认选择的软件包基础上,可以增加如下软件包:
软件包编号
软件包描述
备注

SUNWast
通过监视或限制对系统文件和目录的访问来提高系统安全性的管理公用程序
此为SUN提供的安全工具,具体使用可以参阅有关手册

关于Solaris 8 系统安装的软件包信息,请系统管理员参阅附录3,以便根据具体应用选取相应的软件包。
3.网络配置
如果系统需要DHCP或NIS,则需要将系统接入网络,注意接入网络的时间要尽可能短,如果配置DHCP或NIS完毕,请暂时将网络再次断开。下一步是选择IP或DHCP,这里会询问是否安装IPv6,除非必要,否则禁用。同时,SUN的建议是安装所需要的所有服务,因为服务安全的,但是不要采用这个选项。后期在配置服务和网络的时候会证明前者的做法是会带来安全问题的,因为在默认安装后,系统将开放RPC、aotumount、NFS等可能不必要且有潜在危险的服务。
4.名字服务配置
下一步是配置NIS,建议最好不要使用NIS,除非必要。不要在安装中配置DNS,因为在安装时,系统要求联网以便校验DNS服务。系统就暴露在不安全的网络环境下了。建议在系统完成安装,并且根据本手册提供的方法完成系统加固之后,才对DNS进行配置。同样的,如果DNS服务的配置是必要的,那么系统接入网络的时间要尽可能的短,配置完毕立即断开网络连接。
5.磁盘分区
首先将/var分区与root分区分开,以防止日志文件耗尽root分区的空间。确保root分区足够大,建立一个/var分区用于存放系统记录文件和Email文件等。Swap分区为RAM的2倍。通常使用SUN的默认配置,需要进行一些调整。建议分为三个区,即/、/opt和/var。可以在/opt区创建/usr/local,以方便备份管理。
6.注意
其它版本的Solaris系统安装的顺序可能略有不同,系统管理员可根据具体情况,在上述相应的安装步骤中做好安全配置工作。
安装服务越少的软件,潜在的安全漏洞就越少,尽量选择最小安装,提高效率。了解更多关于建立最小安装的信息,请察看Solaris Minimization for Security。
1.2 安装后的工作
关闭不必要的服务
系统在安装core group后,默认开放如下不必要的服务:
1、NFS
2、RPC
3、automount
4、echo、time、chargen等TCP/IP简单服务
备份系统基本信息
系统安装完成后,系统管理员应该查看和备份系统关键信息,包括系统进程、网络服务信息、suid/sgid文件或目录、系统用户等。
安装和启用辅助安全工具
为了提高系统的安全性以及可维护性,建议安装建议的安全辅助工具。
安装补丁程序
在安装完其他系统软件和第三方软件后,马上更新系统补丁程序。并更新Tripwire数据库(如果使用了该软件的话)。 第二章 Solaris系统安全配置
2.1 系统安全配置的原则
Solaris的安全配置可以从以下几个方面来考虑:
2.1.1 本地安全增强
包括限制某些命令的访问、设置正确的文件权限、应用组和用户的概念、suid/sgid的文件最少、rw-rw-rw的文件最少等。
2.1.2 网络安全增强
包括使用安全的协议来管理、禁止所有不需要的服务、禁止系统间的信任关系、禁止不需要的帐号、增强认证需要的密码、保护存在危险的网络服务、限制访问等。
2.1.3 应用安全增强
包括限制用户的权限、限制进程所有者的权限、检查应用相关文件权限、限制访问其他系统资源、应用所依赖的suid/sgid文件最少、使用应用本身的安全特性、删除samples和其他无用的组件等。
2.1.4 监控与警报
包括日志、完整性、入侵检测等一些使用工具等。
2.2 主机的基本安全配置
主机的基本安全配置包括以下主要内容:
1、    系统补丁更新
2、    控制台安全
3、    文件系统安全
4、    用户管理
5、    系统启动与关闭
6、    内核调整
7、    日志与审核
8、    其它
2.2.1 系统补丁更新
及时更新系统补丁是系统管理员做好日常维护的一项重要工作。更新系统补丁的目的,除了满足某些兼容性的要求外,它的主要目的是修补系统的安全漏洞,避免系统漏洞被入侵者所利用。系统补丁包括操作系统的补丁,以及其它应用服务软件的补丁,诸如WEB服务、DNS服务、邮件服务、数据库等等。
1、    强烈建议定期从操作系统提供商或应用软件提供商的官方网站下载最新的系统补丁集,SUN的操作系统补丁列表可以以下网站获取:
ftp://sunsolve1.sun.com/pub/patches/
http://sunsolve1.sun.com/
2、    完整性检查,使用校验工具检查下载的补丁软件是否被篡改,以防止补丁软件感染病毒或植入木马程序。建议使用MD5检验工具(一般的SUN提供的补丁包内会有一个MD5校验数据文件,可以使用MD5校验工具计算文件的MD5值与之对照)。
3、    如果条件允许的情况下,建议最好先做补丁修补实验,因为某些补丁可能会影响部分服务的正常运行;
4、    在安装系统补丁软件后,建议按照本手册提供的方法和步骤对系统配置进行安全检查,因为某些系统补丁安装后可能会启动系统的默认配置,使系统状态发生变化,可能会导致系统服务异常或者使系统开放了某些不必要的服务而违背系统最小化原则。
另外,系统管理员可以使用showrev -p命令查看系统补丁修补情况,示例如下:
$showrev -p
Patch: 106541-16 Obsoletes: 106832-03, 106976-01, 107029-01, 107030-01, 107334-u
Patch: 106793-07 Obsoletes:Requires:Incompatibles:Packages: SUNWcsu, SUNWa
Patch: 107544-03 Obsoletes:Requires:Incompatibles:Packages: SUNWcsu, SUNWr
Patch: 107451-05 Obsoletes:Requires: 107117-03 Incompatibles:Packages: SUNWu
Patch: 107454-05 Obsoletes:Requires:Incompatibles:Packages: SUNWcsu
Patch: 107792-02 Obsoletes:Requires:Incompatibles:Packages: SUNWcsu
Patch: 108301-02 Obsoletes:Requires:Incompatibles:Packages: SUNWcsu, SUNWa
Patch: 108482-02 Obsoletes:Requires:Incompatibles:Packages: SUNWcsu
Patch: 106950-13 Obsoletes:Requires:Incompatibles:Packages: SUNWcsu, SUNWx
Patch: 107018-03 Obsoletes:Requires: 106938-01 Incompatibles:Packages: SUNWu
Patch: 109253-01 Obsoletes:Requires:Incompatibles:Packages: SUNWcsu
Patch: 108798-01 Obsoletes:Requires:Incompatibles:Packages: SUNWcsu
Patch: 108838-02 Obsoletes:Requires:Incompatibles:Packages: SUNWcsu
Patch: 109744-01 Obsoletes:Requires:Incompatibles:Packages: SUNWcsu
Patch: 107443-13 Obsoletes:Requires:Incompatibles:Packages: SUNWcsu, SUNWc
Patch: 107477-03 Obsoletes:Requires:Incompatibles:Packages: SUNWcsu
Patch: 108748-01 Obsoletes:Requires:Incompatibles:Packages: SUNWcsu
Patch: 108760-01 Obsoletes:Requires:Incompatibles:Packages: SUNWcsu
Patch: 108764-01 Obsoletes:Requires:Incompatibles:Packages: SUNWcsu


2.2.2 控制台安全
1.         设置OpenBoot的安全级别
设置OpenBoot的安全级别主要是防止可以物理接触系统的人任意修改系统OpenBoot参数,达到完全控制系统的目的。一方面,可以访问OpenBoot的用户能够从外部硬盘或光盘上启动系统,从而完全控制系统;另一方面,能够用Stop-A停止系统的用户可以修改所有OpenBoot环境变量。
Openboot的安全级别有3种:none、command和full。
·         None是不需要任何口令,所有的OpenBoot设置都可以修改(包括系统启动的硬盘分区),所有的OpenBoot命令都可以执行。任何可以物理接触系统的人就完全控制了系统。
·         Command是除了boot和go之外的所有命令都需要口令。系统可以从默认的启动设备启动。Go命令(在按下Stop-A或者发送中断序列之后继续系统操作)可以执行。对于任何其它命令,用户都必须输入OpenBoot命令;
·         Full是除了go命令(在按下Stop-A或者发送中断序列之后继续系统操作)之外的所以命令都需要OpenBoot口令。
建议把安全级别设为command。因为设置为full的话,如果忘记了OpenBoot口令,就只好更换PROM了。设置方法有两种:
a)         在root下,下面是一个配置示例:
# eeprom security-mode= command
Changing PROM password:
New password: password
Retype new password: password


b)      在OpenBoot PROM下,下面是一个配置示例:
ok setenv security-mode command
security-mode = command
ok setenv security-password password
security-password =


如果希望修改OpenBoot口令可以使用如下命令。
# eeprom security-password=
Changing PROM password:
New password: password
Retype new password: password

注意:
“=”不要忘记键入了,否则会出现错误信息:security-password:data not available;
在修改口令时,不会询问以前的口令。
如果希望禁用该项安全功能只需要将security-mode设置为none。方法同上。

2.         监视EEPROM 口令
如果用户敲错了OpenBoot的口令将被记录下来,使用下面的命令可以查看总共有多少次错误的尝试:
# eeprom security-#badlogins
security-#badlogins=3

可以使用下列命令初始化它的计数器:
# eeprom security-#badlogins=0
security-#badlogins=0

2.2.3 文件系统安全
文件系统是计算机系统的重要组成部分,用于存储和管理计算机中的信息,包括操作系统、应用程序和数据等。管理系统文件的工作主要包括设置访问权限、控制用户访问文件的方式(读、写、执行)。
一 文件权限
由于具备suid/sgid位的可执行文件可能会被入侵者利用获得系统最高权限root,因此,如果该文件或目录不需要suid/sgid权限的话,应该去除其相应的suid/sgid位。
1. 删除所有不使用的suid文件
大多数setuid程序都只是由root运行的,或者是由某些特定用户或组运行,那就可以将其setuid位移去,系统管理员应该根据实际需要的情况进行增减。请系统管理员参看SUN网站或CERT的安全公告,如果发现已知有漏洞的的程序还存在setuid位,请及时下载补丁进行补丁更新。若目前暂时无法获得相应补丁程序时,一个简单的临时解决方案是将该程序的setuid位去掉。而且还应该建立一个setuid/setgid程序的列表,以便作为系统审核的依据之一,这样可以通过对比发现是否有新的setuid程序出现。如果发现来历不明的带有setuid位的程序,就把它删掉。
可能需要用到的操作命令示例如下:
列出系统中所有suid 文件
Find / -type f \( -perm -4000 \) -exec ls -al {} \; find / -type f \( -perm -4000 \) -exec ls -al {} \; >; $HOME/search-4-suid-files.txt
首先备份 suid 文件:
mkdir /opt/backup/suid find / -type f \( -perm -4000 \) -print |cpio -pudm /opt/backup/suid
删除前建立tar备份,不要删除suid-files.tar!!
cd /opt/backup; tar -cvpf suid-files.tar /opt/backup/suid/* rm -r /opt/backup/suid
去除所有suid 文件中的suid位
find / -type f \( -perm -4000 \) -exec chmod -s {} \;
再查一遍
find / -type f \( -perm -4000 \) -exec ls -al {} \;
对一些常用文件建立suid位
chmod u+s /usr/bin/suchmod u+s /usr/bin/passwdchmod u+s /usr/bin/ps
2. 变更不必要sgid文件的权限
可能需要用到的操作命令示例如下:
列出系统中所有 sgid 文件
find / -type f \( -perm -2000 \) -exec ls -al {} \;find / -type f \( -perm -2000 \) -exec ls -al {} \; >; $HOME/search-4-sgid-files.txt
备份 sgid 文件:
mkdir /opt/backup/sgidfind / -type f \( -perm -2000 \) -print |cpio -pudm /opt/backup/sgid
对一些常用且必要的文件建立sgid 位。一般的是系统管理员在实践中根据应用的需要而设置,通常不必设置。
3. 去掉/etc下不必要的组可写文件的写权限
可能需要用到的操作命令示例如下:
列出所有组可写的文件
find /etc -type f \( -perm -20 \) -exec ls -al {} \;find /etc -type f \( -perm -20 \) -exec ls -al {} \; >; search-4-group-writeable-in-etc.txt find /etc -type f \( -perm -20 \) -exec chmod g-w {} \;
结合上述所列文件信息,系统管理员可以视具体需要,更改文件权限。
4. 去掉/etc下不必要的所有人可写文件的写权限
可能需要用到的操作命令示例如下:
列出所有人可写的文件
find /etc -type f-perm -2-exec xargs ls -als {} \;find /etc -type f-perm -2-exec xargs ls -als {} \; >; search-4-world-writeable-in-etc.txt   
结合上述所列文件信息,系统管理员可以视具体需要,更改文件权限。
5. 可以将不必要权限为所有人都可以读写(rw-rw-rw-)的文件改为权限为所有人可读仅属主可写(rw-r-r-)的文件
可能需要用到的操作命令示例如下:
find / -type f -perm 666 |xargs ls -al >; perm-666-before-change.txt   
结合上述所列文件信息,系统管理员可以视具体需要,更改文件权限。
6. 改变所有人可读写执行(rwxrwxrwx)文件的权限为所有人可读可执行仅属主可写的(rwxr-xr-x)文件
可能需要用到的操作命令示例如下:
find / -type f -perm 777 -exec xargs ls -al {} \; >; perm-777-before-change.txt
结合上述所列文件信息,系统管理员可以视具体需要,更改文件权限。
7. 查找world,group可写的目录
操作命令示例如下:
find / -type d-perm 2-print >; search-4-world-writeable-directories.txt find /etc -type f-perm -20-print >; search-4-group-writeable-dir.txt
8. 确保每个root启动的脚本属于root
首先查找所有启动脚本的属主
find /etc -type f -print | grep rc | egrep -v "skel|tty|mail|snmp |Mail" | xargs ls -al >; rc_files_before_change_ txt
改变属主
find /etc -type f -print | grep rc | egrep -v "skel|tty|mail|snmp|Mail" | xargs chown root:rootfind /etc -type f -print | grep rc | egrep -v "skel|tty|mail|snmp|Mail" | xa rgs ls -al >; rc-files-after-change.txt ls -al /etc/init.d >; etc-init.d-before.change.txtchown root:root /etc/init.dls -al /etc/init.d >; etc-init.d-after-change.txt
9. 确保所有cron行为有记录
在/etc/default/cron中 CRONLOG=YES
删除/var/spool/cron/crontabs 目录中除了root文件外所有文件
10. 查找无用户的文件
操作命令示例如下:
find / -type f -nouser >; files-nouser-before-change
11. 查找无组的文件
操作命令示例如下:
find / -type f -nogroup >; files-nogroup-before-change
12. 改变/var/cron权限
chmod 700 /var/cron && chown root /var/cron && chgrp sys /var/cron
13. 改变utmp\wtmp的权限
utmp文件记录当前登录到系统中的所有用户,wtmp文件记录用户登录和退出事件,如果这些文件是所有用户可写,那就可以轻松地修改或删除访问系统的记录。所以/var/adm/utmp、/var/adm/utmpx、/var/adm/wtmp、/var/adm/wtmpx的文件权限都应该设为644。
chmod 644 /var/adm/utmp && /var/adm/utmpx && /var/adm/wtmp && /var/adm/wtmpx
下面总结了常用系统目录的权限分配情况:
文件 权限或属主
/etc/utmp 644
/var/adm/wtmp 644
/etc/syslog.pid或/var/run/syslog.pid 644
/etc, /usr/etc, /bin, /usr/bin, /sbin, /usr/sbin, /tmp and /var/tmp 由root所拥有
/tmp 和/var/tmp 设置sticky-bit粘滞位
日志/var/log/ 只能由root写入
二 mount选项
在mount选项设置为nosuid的分区内的文件即使有suid位也不会被入侵者用以提升权限。如果mount 选项设置为只读(ro)则可以防止用户修改该分区内的关键数据文件,因此,推荐按照下表修改/etc/vfstab文件。
#device         device          mount         FS      fsck    mount   mount #to mount       to fsck         point         type    pass    at boot options /dev/dsk/c0t3d0s0 /dev/rdsk/c0t3d0s0 / ufs 1 no - /dev/dsk/c0t3d0s4 /dev/rdsk/c0t3d0s4 /usr ufs 1 no ro /dev/dsk/c0t3d0s5 /dev/rdsk/c0t3d0s5 /var ufs 1 no nosuid /dev/dsk/c0t3d0s6 /dev/rdsk/c0t3d0s6 /opt ufs 2 yes nosuid,ro
注意:/usr分区建议设置为只读,但是不要设置为nosuid,因为该分区下的部分命令有nosuid位。
需要把NFS服务器共享的目录装入到系统中时,建议加上nosuid和ro的选项,这样目录就会以只读的方式装入,并且以setuid运行也是不允许的。
三 卷管理
Solaris的卷管理可以方便简单地管理可移动介质设备,在有CD-ROM、软驱等设备接入时会自动安装到系统中,而不需要超级用户的介入。但是这样容易被入侵者所利用,入侵者只需要在CD-ROM、软盘等介质中存储有suid的命令,便可用以提升权限达到完全控制系统的目的。
因此,建议服务器不要使用自动mount的功能,而工作站如果需要使用自动mount功能,需要修改/etc/rmmount.conf使mount的文件系统具备nosuid的选项。在/etc/rmmount.conf加入如下信息:
mount hsfs -o nosuid mount ufs -o nosuid
四 其它
1、确定EXINIT的环境变量禁用了.exrc文件功能,并且删除了系统内不必要.exrc文件。可以使用如下命令查找.exrc文件:
# /bin/find /-name '.exrc' -exec /bin/cat {} \; -print
2、确定用户HOME目录下的.forward文件不能被非授权命令或程序所执行,邮件服务可能会由于错误配置导致普通用户的拥有root特权。可以使用如下命令查找.forward文件:
# /bin/find / -name '.forward' -exec /bin/cat {} \; -print
2.2.4 用户管理
1、禁止所有不需要的系统帐户
管理性的帐号应该被封锁起来,避免被入侵者所利用。这些帐号包括daemon、bin、sys、adm、lp、uucp、nuucp、listen、nobody和noaccess。封锁方法为在/etc/passwd文件中,将其对应的shell 置为/bin/false。
如果系统没有shadow文件,则编辑/etc/passwd,将需要禁止帐户的**用NP代替
Example: noaccess:NP:60002:60002:No Access User:/:/sbin/noshell
如果系统有shadow文件,则编辑shadow文件,在用户名后面直接加入‘:NP’。
daemon:NP:6445:::::: bin:NP:6445:::::: sys:NP:6445:::::: adm:NP:6445:::::: lp:NP:6445:::::: uucp:NP:6445:::::: nuucp:NP:6445::::::
2、口令及口令策略
· 长度至少为8位,必须包括数字、字母和标点。
· 设置密码相关参数,编辑/etc/default/passwd设置:
MINWEEKS=1 # 最短改变时间MAXWEEKS=4 # 密码最长有效时间PASSLENTH=8 # 最短密码长度
· 确保提示输入密码
可以在直接键入如下命令:
# passreq=YES
或者编辑/etc/login/文件,更改相应条目。
· 检查是否每个用户都设置了密码
检查/etc/passwd和/etc/shadow,每个用户的密码栏是否为空。
3、修改登录(login)配置文件
· 防止root远程登录
建议超级用户不要直接登录,设置方法为在/etc/default/login文件中设置CONSOLE=/dev/null。这样任何需要成为超级用户的系统管理员都必须先用普通帐号登录,然后用su命令切换成超级用户,因为系统会记录下用户使用su命令的情况,以便审计的用户行为。
编辑/etc/default/login,加上:
# If CONSOLE is set, root can only login on that device.CONSOLE=/dev/console
· 记录所有root登录尝试
编辑/etc/default/login
# SYSLOG determines whether the syslog(3) LOG_AUTH facility should be used# to log all root logins at level LOG_NOTICE and multiple failed login# attempts at LOG_CSYSLOG=YES
· 设置session超时时间
编辑/etc/default/login,加上:
# TIMEOUT sets the number of seconds (between 0 and 900) to wait before# abandoning a login session. TIMEOUT=120
· 设置缺省umask
编辑/etc/default/login,加上:
# UMASK sets the initial shell file creation mode mask. See umask(1).UMASK=027
权限设置为750. "rw--r------"
对于如下文件,同样加上缺省umask:
/etc/.login, /etc/profile ,/etc/skel/local.cshrc
/etc/skel/local.login, /etc/skel/local.profile
· 设置Shell环境变量
编辑/etc/default/login,加上:
# ALTSHELL determines if the SHELL environment variable should besetALTSHELL=YES
4、设置root的umask
检查root的.profile,确保umask为027或077 。
5、在所有path中,去掉所有"."路径。
检查所有缺省启动脚本和root启动脚本,在所有路径变量中删除"."路径,包括以下文件:
/.login , /etc/.login,/etc/default/login,/.cshrc,/etc/skel/local.cshrc,   /etc/skel/local.login,/etc/skel/local.profile,/.profile , /etc/profile
6、使用sugroup来限制su,将可以su的用户添加到这个组
在 /etc/group中创建特殊的组sugroup将系统管理员帐号加到这个组 ;
改变 /bin/su 的权限为:r-sr-sr-x 1 root sugroup
#chmod 550 /bin/su
#chmod +s /bin/su
#chown root:sugroup /bin/su
#ls -al /bin/su
-r-sr-s--- 1 root sugroup 18360 Jan 15 1998 /bin/su
#grep sugroup /etc/group
sugroup::600:root,httpadm,wspher
这样,只有sugroup组中的用户可以使用su,提升为超级用户,另外一个可行的方法是使用sudo来替代su。
2.2.5 系统启动与关闭
一.系统启动和关闭
1、检查系统的启动和关闭程序也就是/etc/init.d、/etc/rc.X目录和/etc/inittab文件,将这些文件和目录的权限设为只有超级用户可写。
2、在rc.x目录中将不需要的服务禁用,可以采取一定的格式进行更名处理,以便在有需要的时候可以重新启动服务。更名举例如下:
mv /etc/rc3.d/S92volmgt /etc/rc3.d/no_use_S92volmgt
以下服务原则上应该禁用,但是系统管理员可以根据系统应用需求,按照系统最小化原则进行取舍:
snmpdxautofs (Automounter)volmgt (Volume Deamon)lpsched (LP print service)nscd (Name Service Cache Daemon)Sendmail (注意,如果确要使用sendmail处理邮件信息,则请参照“网络服务安全配置”的相关内容进行配置) keyserv (注意Keyserv Deamon 在安装了NIS+ 或NFS才使用,如果启动时使用了-d 的选项,则默认的"nobody" key 是禁用的)   
另外,rpcbind提供远程呼叫,依靠远程系统的IP地址和远程用户的ID进行验证,这样很容易伪造和改变。建议关闭rpcbind服务。
3、禁止所有DMI服务
禁止所有DMI服务:mv /etc/rc3.d/S??dmi /etc/rc3.d/no_use??dmi
/etc/init.d/init.dmi中启动的dmi服务有:
/usr/lib/dmi/dmispd
/usr/lib/dmi/snmpXdmid
/etc/dmi/ciagent/ciinvoke
4、检查所有的.rhosts文件
.rhosts允许不要密码远程访问,
预先生成$HOME/.rhosts文件,并且设置为0000,防止被写入”+ +”。(攻击者经常使用类似符号链接或者利用ROOTSHELL写入)。
注:这种情况会导致一些如SSH的RCP命令无法使用(需要使用$HOME/.rhosts文件的一些命令)
touch /.rhosts ;chmod 0 /.rhosts
.rhosts可以被普通用户所创建在个人目录下。推荐使用脚本来发现.rhosts文件。并且利用cron自动检查,报告给特定用户。
Script for Find.rhost:
#!/bin/sh
/usr/bin/find /home -name .rhosts | (cat 、禁止使用.rhosts认证
在/etc/pam.conf中删除
rlogin auth sufficient /usr/lib/security/pam_rhosts_auth.so.1
将rsh的行改为:
rsh auth required /usr/lib/security/pam_unix.so.1
6、检查信任关系
检查/etc/hosts.equiv文件,确保为空
二.审核启动和关闭机制
由于在系统启动和关闭阶段,系统的保护措施暂时没有运行或访问,因此,提请系统管理员需要特别关注系统启动和关闭脚本的完整性。可以借助工具审核系统的启动和关闭脚本,如Tripwire。需要审核的文件和目录包括:/etc/rc*.X、/etc/inetd.conf等。
2.2.6 内核调整
修正堆栈错误,防止溢出(2.6以后版本已修正)
把堆栈设置为不可执行。步骤方法为:把下面两行加入/etc/system中
setnoexec_user_stack=1 setnoexec_user_stack_log=1
然后改变文件权限:#chmod 644 /etc/system
不可执行堆栈可以在一定程度上抵御基于栈(Stack)的缓冲区溢出攻击,但是,缓冲区溢出的攻击手段可以有多种方式实现,基于栈的溢出攻击只是其中的一种攻击手段,因此,设置不可执行堆栈不能抵御其它类型的缓冲区溢出攻击,如基于堆(Heap)的溢出攻击、基于函数指针的溢出攻击等。系统管理员应该时常关注系统安全漏洞信息,及时采取补救措施。
建议禁止系统进行核心转储(coredump),因为它会占用大量磁盘空间,并且可能会泄露某些敏感信息。设置方法为:在/etc/system中加入
setsys:coredumpsize=0
注意:以上三项配置都要重启系统后才能生效。
2.2.7 日志和审核
1、设置合适cron logfiles
编辑配置文件/etc/cron.d/logchecker中 LIMIT项。
系统管理员可以根据实际经验设置,一般要考虑的因素是日志查看的周期与通常情况下日志产生的信息量大小,建议对cron日志的审核以7天为一个周期。
2、记录所有inetd服务
编辑/etc/init.d/inetsvc,查找inetd的启动选项,示例如下:
/usr/sbin/inetd -s -t &
3、修改syslog.conf
编辑syslog.conf,增加
*.debug /var/adm/compass.messages #记录debug信息
auth.info /var/log/authlog
4、创建/var/adm/loginlog来记录登录失败信息
touch /var/adm/loginlog
chmod 600 /var/adm/loginlog
chown root /var/adm/loginlog
chgrp sys /var/adm/loginlog
5、辅助工具
建议使用Tripwire对系统文件进行完整性检查,这样能有效防止木马。具体Tripwire的安装与使用,请参见附录。
建议安装日志检测工具,比如swatch,以提高日志分析的效率。具体swatch的安装和使用,请参见附录。
2.2.8其它
1、cron和at是定时执行命令。因此要严格限制可以执行cron(at)命令的用户,以防止被入侵者所利用。
设置方法为:创建一个空的/etc/cron.d/cron.deny(/etc/cron.d/at.deny)文件,然后把可以执行cron(at)命令的用户加到/etc/cron.d/cron.allow(/etc/cron.d/at.allow)文件中。
2、不要使用crontab -e命令来配置cron,因为它会把用户的crontab文件的一份所有用户都可读的副本放在/tmp目录下,入侵者就可以根据这个副本探索出与cron项有关的可能的安全缺陷。
建议的设置方法为:首先输入命令crontab-l >;mycronfile;编辑mycronfile文件,完成所有需要的修改;最后输入命令crontab 。
2.3 系统网络服务安全配置
2.3.1网络接口的安全配置
利用ndd命令,可以检测或者更改网络设备驱动程序的特性。在/etc/init.d/inetinit启动脚本中增加以下各条命令,然后重启系统,可以提高网络的安全性。
1. 忽略并且不发送ICMP重定向报文
如果系统使用了动态路由机制,则攻击者可能会利用ICMP重定向报文更改路由信息,导致IP数据包流向转变,形成拒绝服务攻击或者被监听。
忽略ICMP重定向报文 /usr/sbin/ndd -set /dev/ip ip_ignore_redirect 1(默认值为 0)
禁止发送ICMP重定向报文 /usr/sbin/ndd -set /dev/ip ip_send_redirects 0 (默认值为 1)
2. 关闭数据包转发
除非系统需要路由转发功能,否则应该关闭数据包转发。
/usr/sbin/ndd -set /dev/ip ip_forwarding 0   
3. 不转发源路由数据包
源路由数据包是指由发送方指定传送路径的数据包。如果系统转发源路由数据包,则会带来潜在的安全隐患,入侵者可以将大量数据流引向攻击目标形成拒绝服务攻击。
/usr/sbin/ndd -set /dev/ip ip_forward_src_routed 0
4. 设置更安全的TCP初始序列号产生方式
TCP_STRONG_ISS的值决定TCP初始序列号的产生方式,它的可能取值有三个:
· 0 :旧式的序列号产生方式
· 1 :经过改进的序列号产生方式,每次建立新TCP连接的初始序列号不再连续取值,而是在此基础上增加一个随机的分量,这样就增大了TCP初始序列号猜测攻击的难度。
· 2 : 使用新型的序列号产生方法,杜绝根据一个初始序列号猜测下一次连接初始序列号的可能性。
/usr/sbin/ndd -set /dev/tcp tcp_strong_iss 2(默认值为1)
5. 缩短ARP缓存有效期
ARP缓存有效期如果太长,遭受ARP欺骗攻击后需要更长时间恢复。虽然缩短ARP缓存有效期不能真正阻止ARP欺骗攻击,但是加大了攻击难度。
/usr/sbin/ndd -set /dev/arp arp_cleanup_interval 60000   
以毫秒为单位,缺省值为300000,60000只是建议值,也可以根据自己需要取其它值。
2.3.2网络访问控制
网络系统的安全建立在这个基本原理之上:去掉不必要的网络访问,在所需要的网络访问周围建立访问控制。
一.停止运行不必要的网络服务
1、停止由inetd启动的网络服务
由internet服务器过程inetd启动的网络服务是由两个配置文件/etc/inet/services和/etc/inet/inetd.conf来配置的。
/etc/inet/services文件指定每个服务的端口号和端口类型,该配置文件的部分示例如下:

ftp             21/tcp
telnet          23/tcp
smtp            25/tcp          mail

/etc/inet/inetd.conf文件指定服务所对应的系统服务程序,该配置文件的部分示例如下:

ftp   streamtcp   nowaitroot    /usr/sbin/in.ftpd       in.ftpd
telnetstreamtcp   nowaitroot    /usr/sbin/in.telnetd    in.telnetd

当要停止某个服务,如ftp、telnet等时,只要注释掉文件/etc/inet/services和/etc/inet/inetd.conf中的相应条目,也就是在那一行的开头加上#字符,然后让inetd重新读配置文件,过程示例如下:
# ps -ef |grep inetd   root   149   10   Jan 18 ?      0:00 /usr/sbin/inetd -s   root 24621 246050 15:53:01 pts/1    0:00 grep inetd # kill -HUP 149
以上第一条命令是为了获得inetd的进程号,示例中输出的第二列内容就是进程号(149),然后将该进程号填入第二条命令的相应位置。
2、停止由rc脚本启动的网络服务
有些网络服务不是由inetd来启动,而是由自己的rc文件来启动的,如:
sendmail       /etc/rc2.d/S88sendmail
automounter    /etc/rc2.d/S74autofs
ntp            /etc/rc2.d/S74xntpd
syslog         /etc/rc2.d/S74syslog
打印服务       /etc/rc2.d/S80lp
apache         /etc/rc3.d/S50apache
要停止以上服务,只需用mv命令把它们的启动文件改名,如把/etc/rc2.d/S88sendmail改名为/etc/rc2.d/X88sendmail,然后先查找出相应的进程号(进程号查找方法同上,以下不再赘述),再用“kill -9 进程号”停止相应的进程。
要停止DNS服务时,在文件/etc/rc2.d/S72inetsvc中把运行in.named的一项注释掉,然后再停止相应的进程。
要停止NFS服务器时,首先注释掉/etc/dfs/dfstab文件中的所有条目,然后用mv命令把/etc/rc3.d/S15nfs.server文件改名为/etc/rc3.d/X15nfs.server,最后停止nfsd进程。
要停止NFS客户端时,首先注释掉/etc/vfstab文件中fstype为nfs的所有条目,接着用umount命令释放所有NFS装入的文件系统,最后用mv命令把文件/etc/rc2.d/S73nfs.client改名为/etc/rc2.d/X73nfs.client即可。
3、具有潜在危险的服务
以下是一些具有潜在危险的服务列表,除非有必要,否则建议关掉它们:
finger:该服务会泄漏系统的有关信息
exec、login、shell:这些服务是由r系列命令所使用的
tftp:一般文件传输协议服务,它没有任何的用户或系统身份验证机制
echo、discard、chargen:这些简单的TCP服务有可能被利用来充满网络或消耗系统资源
再次提醒系统管理员,只打开必须使用的服务,其余的服务都应该关掉。这也是由安全管理的“最小化原则”所要求的。
二.加强网络访问控制
对于必须开放的服务,就要加强网络访问控制。
a)使用共享软件tcp_wrapper
利用tcp_wrapper可以控制哪些系统或这些系统中的哪些用户可以访问在文件/etc/inet/inetd.conf中定义的网络服务。当系统安装tcp_wrapper后,文件/etc/inet/inetd.conf中的条目就会变成下面的形式:
telnet stream tcp nowait root /usr/sbin/tcpd /usr/sbin/in.telnetd
tcpd程序截获来自客户端的服务请求、记录请求发生的时间和IP地址,并按访问控制进行检查。当本次连接的用户、请求源的IP等信息符合管理员的预设值时,才将该次请求传递给系统in.telnetd完成后续工作;若连接不符合要求,该连接请求将被拒绝。参见附录1中的Tcp_wrapper。
b)R系列命令
R系列命令包括rlogin、rsh、rexec、rdist等,它们通过/etc/hosts.equiv或$HOME/.rhosts文件来设置信任关系。而这种信任关系具有很大的危险性,如果入侵者在以上文件中加入++,那远程用户就可以不输入口令直接成为本地系统用户。如果没有建立等价关系,那用户就会被提示输入口令,而口令在传输的时候没有任何的加密措施。所以强烈建议不要使用R系列命令,并把系统中的/etc/hosts.equiv和$HOME/.rhosts文件删除。
2.3.3常见网络服务的安全配置
一 Telnet
因为telnet的口令和内容在网络上都是明文传输的,很容易被窃听,所以建议尽量使用ssh来替代telnet,参见附录1中的OpenSSH。
对于需要开放telnet端口的系统,建议在/etc/services文件中修改telnet 的端口号,最好将该端口号改为五位数以上,以避免攻击者的扫描检测。示例如下:
telnet          23232/tcp
然后让inetd重新读配置文件,具体方法同上。
创建/etc/default/telnetd文件,写入BANNER="",这样telnet上来以后就不会显示系统信息,而只是显示login:,这就可以防止入侵者通过telnet来搜集系统信息。甚至可以在BANNER中写入其它的操作系统版本信息,以误导入侵者,增加入侵的难度。
二 FTP
与telnet类似,通过创建/etc/default/ftpd文件,写入BANNER="",这样ftp上来以后就不会显示系统信息,可以防止入侵者通过ftp来搜集系统信息。甚至可以在BANNER中写入其它的操作系统版本信息,以误导入侵者,增加入侵的难度。
ftp和telnet类似,所有的传输内容都是没有经过加密的,所以绝对不能以超级用户身份使用FTP,因为口令在网络上传输的时候是不加密的。要强制做到这一点,可在文件/etc/ftpusers中增加超级用户。
不要使用匿名ftp,只需在文件/etc/passwd中把ftp用户注释掉即可。
将ftpd的记录和调试功能打开,这时在文件/etc/inet/inetd.conf中的ftpd一项应该是:
ftp stream tcp nowait root /usr/sbin/in.ftpd in.ftpd -dl
然后让inetd重新读配置文件。
三 电子邮件
sendmail历史上安全问题严重,而且它的配置比较复杂,容易由于配置不当带来系统的安全隐患,所以如果系统不是作为邮件服务器的话,就不要把sendmail作为守护进程来运行,而是定时启动sendmail来发送邮件,设置步骤如下:
把sendmail服务关掉,可以参见4.3.2.1的相关步骤处理。
调整文件/etc/mail/aliases中的别名项,如帐号smith使用的是工作站gram,邮件服务器系统的名称是house,就应该做如下修改:
旧的别名: smith   smith@gram
新的别名: smith   smith@house
按照标准的NFS步骤,将服务器的/var/mail目录下相应的文件导出并装入到客户系统。
用crontab命令加入如下一项
   0 * * * * /usr/lib/sendmail -q
这样就可以每隔一个小时把客户机上所有加入队列的待发送邮件送到邮件服务器上。
如果机器要作为邮件服务器的话,要确保使用的是最新版本的sendmail,或者打上了最新的补丁。
四 DNS
DNS安全问题主要来源是当名字服务器高速缓存了无效数据,且该无效数据将在高速缓存中保留一段时间,从而可能误导查询结果。但多数系统都要使用DNS服务,不能把DNS完全禁止,只能尽量减少DNS缓存的数据和数据缓存时间。DNS的域名服务缓存进程是nscd,它把主机、口令和组等信息进行缓存。Nscd的配置文件是/etc/nscd.conf,应当通过调整其中的参数,把nscd缓存的条目数和缓存时间调到尽可能小。配置文件中Cachename可以是hosts、passwd或groups。
相关参数说明如下:
positive-time-to-live cachename value:是成功的查询在指定的cache中的缓存时间,这个值是以秒为单位。这个值应该调到尽量调小。
negative-time-to-live cachename value:是不成功的查询在指定的cache中的缓存时间,这个值是以秒为单位。这个值也应该调到尽量的小。
keep-hot-count cachename value:是在指定cache中当前的缓存的条目数。一般地,缓存内的条目数应接近24小时内经常访问到的条目数量。
调整完后,执行nscd -g命令,可以确认是否调整成功。示例如下:
$nscd -g nscd configuration:         0server debug level "/dev/null"is server log filepasswd cache:         Yescache is enabled      617cache hits on positive entries          1cache hits on negative entries         39cache misses on positive entries          7cache misses on negative entries         93% cache hit rate          0queries deferred          9total entries      211suggested size      600seconds time to live for positive entries          5seconds time to live for negative entries         20most active entries to be kept valid      Yescheck /etc/{passwd,group,hosts} file for changes         Nouse possibly stale data rather than waiting for refresh ……
五 NFS
NFS服务器的目录是通过share命令来共享的。要提高NFS服务器共享的安全性,首先要对哪些系统可以装入这个服务器的NFS目录进行限制,而不应把目录开放给所有的系统。尽可能以只读的方式共享目录,同时共享目录应该尽可能地少。最好采用比较强的身份验证方式,如AUTH_DES或AUTH_KERB。
设置nfs特殊tcp,udp端口
ndd -set /dev/tcp tcp_extra_priv_ports_add 2049
ndd -set /dev/udp udp_extra_priv_ports_add 2049
默认情况下NFS会对所有UDP端口的请求作出响应,建议设置NFS portmon,那么系统会忽略从非特权端口发出的NFS装入和I/O请求。设置方法为:在/etc/system中加入
setnfssrv:nfs_portmon=1
set nfs:nfs_portmon = 1
六X window
缺省配置下,系统对X server缺乏有效的访问控制。此时,任何主机上的任何用户都可以打开X窗口并运行任何程序,因此可以连接到X server的客户端应该被严格控制。
尽量不要允许任何主机访问X server。要确保”xhost +”命令没有被包含在系统的任何文件中,包括.xsession文件和域X server有关系的任何脚本中,因为执行”xhost +”命令,会使任何主机都可以访问X server。
确保目录/tmp的访问权限被设置为1777(即drwxrwxrxt),也就是说该目录的sticky位要被设置。该目录的所有者必须设为root。这样只有root才有权限删除文件/tmp/.X11-unix/X0,该文件是X server的一个socket,一旦该文件被删除,用户就不能访问系统的X server。这可以防止恶意用户进行破坏。
七 WEB
以常见的web服务器软件Apache为例,默认安装下,系统将在rc3.d下产生一个启动脚本S50apache,应首先将该脚本更名,并停用相应的守护进程httpd,然后选择如下提供的安全措施以加固系统:
· 在chroot的环境下运行httpd服务,这样服务器就可以控制http客户对系统磁盘的访问。
· 几乎所有的httpd漏洞都是因为CGI配置的错误或者不合理造成的,因此若非必要,建议禁用CGI脚本。Cgi-bin目录的属性应设置为755或751。
· 在应用允许的前提下(如httpd端口可以绑定于1024以上,且不采用chroot安全模式),不要以root的身份来运行httpd守护进程,这样即使黑客发现了httpd服务上的安全漏洞,他们也只能以非root用户的身份来访问系统,从而降低系统受损害的可能性。
2.4系统管理员的日常安全工作
2.4.1 安全补丁
系统管理员日常最重要的安全工作,就是给系统打上最新的补丁。
Solaris的安全补丁可以以下官方网站获取:
ftp://sunsolve.sun.com/pub/patches/ ;
;
2.4.2 监测
操作系统一般由文件系统和进程系统构成,文件系统的特点是静态的,而进程则是动态的。
系统的配置一般是以文件的形式存放的,unix系统的配置文件一般是放置在/etc目录下,如/etc/services为系统可以提供的服务列表、/etc/default/login为系统登录时的默认配置等等。因此,优秀的系统管理员会对系统配置情况有清楚的了解和掌握。例如,系统管理员可以通过查看对于系统当前开放的网络服务情况,检查系统是否有可疑的端口开放,判断是否被入侵者安装了木马程序。可通过如下命令进行查看:
netstat -an | more
Solaris下常见的网络端口服务列表如下:
UDP
111 sunrpc
4045 lockd
517 talk
512 biff
42 name
TCP
111 sunrpc
514 shell
540 exec
512 login
进程是系统运行的单元,是一个系统运行的动态表现。系统管理员必须对系统的运行情况进行适当监控,及时发现系统的异常。例如,我们可以查看通过如下命令查看当前系统运行的所有进程情况:ps -ef。
下面的几个命令可以帮助系统管理员来查看系统的其他信息:
1、 查看CPU的性能
$uptime   8:50pmup6:46,1 user,load average: 0.98, 1.01, 2.09
上面是一个示例,其中load average表示平均负载,数据0.98、 1.01、2.09表示前1分钟、5分钟、15分钟的系统平均负载情况。系统管理员可以定期运行该命令,以观察系统的平均负载及变化趋势。一般的,UNIX系统负载数在2~3之间为轻载,5~6为中等负载,而10以上为过载。系统负载增大时,说明有多条命令阻塞在内存或I/O系统,可能有入侵者正在窃取系统的重要数据或者企图消耗系统资源使系统无法正常提供服务,即所谓的拒绝服务攻击(DoS)。
另外,solaris系统还为用户提供一个图形化的工具可以直观的观察系统的变化趋势,即perform,它可以显示系统的CPU利用率、交换作业个数、网络数据包个数、运行队列平均个数等信息。
2、 查看内存的使用情况
$vmstatprocs   memory            page            disk          faults      cpur b w   swapfreere   mfpi po frdesr f0 s0s1s2in   sy    cs us sy id0 0 0 467024 5839040   0100000000403   37   2900 100
命令vmstat不仅可以显示虚存的使用情况,而且还可以查看到系统进程、CPU等活动情况。在”procs”列下表示进程情况,”r”为进程运行队列,”b”表示进程阻塞个数,”w”表示可运行的但是在交换区(swap)内的进程个数。”memory”表示虚存使用情况,”swap”表示交换区的可供使用的空间大小,”free”表示虚存内未使用的空间。”page”表示内存页的使用情况,”re”表示页回收,”mf”表示镜像错误,”pi”表示进入页的数据量,”po”表示数据换出页的大小。
3、 查看磁盘系统的性能
$iostat       tty      fd0            sd0         sd1          sd21          cpu   tin   toutkps tps   servkps   tps serv    kps tps serv   kpstpsservus sy wt id    0    0    0   0    0    1   0   30    0   0    0    0   0    0   000 100
命令iostat可以查看磁盘的输入输出,报告吞吐量、利用率、队列长度、传输率等信息。对磁盘而言,”kps”表示每秒传送的比特率,”tps”表示每秒传送的次数,”serv”表示平均服务时间。系统管理员还可以使用参数”-xtc”得到每个磁盘的使用的详细信息,即”iostat -xtc”,具体可以参考系统提供的手册。
4、 查看网络性能
$netstat -i NameMtuNet/Dest      Address      IpktsIerrs OpktsOerrs Collis Queue lo0   8232loopback      localhost      65   0   65   0   0      0 hme01500sun450      sun450      375150   209    0   0      0
总的来说,系统管理员需要掌握系统配置的信息和系统运行状态,做到心中有数。
2.4.3 配置
了解了系统安全配置的所在,下一步就是学会配置。系统安全配置的原则是系统最小化原则,对系统资源访问做出限制,启用一些安全功能,限制对外的服务,以增加入侵者的攻击代价(包括时间与金钱)。
对于操作系统而言,通常需要系统管理员进行配置的工作包括:
1、 有效严格的系统访问控制,对系统文件和用户访问权限进行严格的限制;
2、 完善的口令策略,对口令的长度、复杂度以及时效做出合理的限制;
3、 安全的网络服务,根据系统最小化原则关闭不必要的网络服务。
我们还可以启用系统的安全功能以增强系统的安全性,如可执行堆栈的保护(见4.2.6)、配置Tcp Wrapper建立防火墙(见附录)等等。
总的来说,系统管理员需要学会使用系统提供安全工具,按照系统最小化的原则对系统资源访问做好限制,以增加入侵者的代价。
2.4.4 审计
跟踪目前系统常见的严重漏洞,收集解决方案。因为系统安全是一个动态的过程,每天都可能会有新的漏洞被发现,可能被利用来攻击系统。因此,系统管理员需要养成一个好习惯,就是每天上网浏览一下有没有出现新的系统漏洞,它的危害有多大,它是否可以通过远程的手段进行系统攻击,目前是否有可行的解决方案。
可供参考网络资源如下:
;or;
;
;
;
2.4.5 借助工具
可以适当采用一些辅助工具以减轻系统管理员的负担,提高效率。例如,使用个人防火墙、系统文件校验工具、日志审核工具、漏洞扫描工具、口令破解工具。
1、 个人防火墙:目前在Unix平台上有一些防火墙软件包,这些工具都可以在一定程度上保护系统安全,并能够及时提供报警和日志功能。
2、 系统文件校验工具:重要的系统文件,尤其是启动时运行的文件是需要定期进行校验看是否被篡改。一个简单可行的方法是对重要文件进行备份,以备在出现可疑情况的时候查看文件大小是否有变化。
3、 日志审核工具:借助日志的审核工具可以大大提高系统管理员审核日志的效率。
4、 漏洞扫描工具:使用漏洞扫描工具可以对系统进行模拟攻击以发现安全隐患,有针对性对系统配置做调整。
5、 口令破解工具:使用口令破解工具有助于及时发现弱口令的问题,尽可能避免弱口令问题的出现。
注意:扫描工具和口令破解工具的使用必须在授权下才能进行.

本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/24754/showart_384602.html
页: [1]
查看完整版本: ZTSolaris安全操作指南!