Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2520740
  • 博文数量: 867
  • 博客积分: 10010
  • 博客等级: 上将
  • 技术积分: 9800
  • 用 户 组: 普通用户
  • 注册时间: 2006-07-27 14:44
文章分类

全部博文(867)

文章存档

2007年(6)

2006年(861)

我的朋友

分类:

2006-09-08 19:23:21

1、安装系统前的准备工作 
2、系统的初始化安装
3、安装YASSP工具包 
4、在/etc/vfsab文件中对mount文件系统加以限制 
5、在Solaris 8中安装Sunscreen EFS防火墙 
6、进一步增强系统的可靠性:路由、邮件、 解析及工具的设置 
7、补丁 
8、RPC 
9、日志、Cron、权限 
10、限制SUID类型的文件 
11、安装完整性检查工具:如Tripwire 
12、安装、检测并提高应用程序的可靠性 
13、开始工作 
1、安装系统前的准备工作 
* 简化:建议在一台主机上只运行一至两种服务。使用多台服务器,而不要只用一台超级服务器去完成所有的工作。这样便于应用的隔离,可靠性的提高,也易于排错及进行软/硬件地升级。切记,只运行必要的程序。 
* 硬件:考虑使用串囗终端安装系统。保证网络环境的可信以及封闭。 
* 保证安全地下载软件:在一个封闭的或者没有对外路由的网络环境中,通过ftp与网络内部其它主机传送文件。如果网络并不是完全封闭的,要在文件传输完成后,马上断开网络的连接,以减小遭到攻击的机会。添加一个以/tmp为HOME目录的非特权用户专门用来在主机间传送文件。
* 清楚系统的用途、硬件的配置等。有时为了提高系统的可靠性可能会导致某些程序不能正常运行,如CDE/OpenWindows,Disksuite及Legato运行都需要RPC的支持,但是在用作为防火墙的主机上,要关闭RPC。 
* 理解各种应用的工作方式非常重要(比如应用如何使用端囗、设备及文件),这样才可以判断哪些方面需要加强及存在的风险。 
2、系统的初始化安装 
连接串囗终端,加电,按下Stop-A键使主机进入到OK提示符模式,使用boot cdrom -install命令开始安装过程。 
选择以最终用户包(end user bundle)或者核心包(core)模式进行安装,设置主机名,终端类型,IP地址,所在时区等,不要开启任何的命名服务,如NIS或NFS。不要打开电源管理或者mount远程文件系统。 
注:对于Solaris 8系统,使用F4功能键可以对最终用户包内的软件进行定制。 
分区注意的事项: 
* 对于syslog、web、新闻、代理服务器或者防火墙过滤主机,要为其/var文件系统建立一个独立的,较大磁盘空间的分区。将要存储大量数据的服务器,如web或ftp服务器,也应该使用独立的分区存储其数据。 
* 将/usr及/opt分区与根区分离,使得/usr及/opt分区可以使用只读(read-only)方式mount。 
* 如果一定要使用Disksuite工具,设置RAID及磁盘镜像,需要为其保留5MB的磁盘空间。使用Veritas的文件卷管理,还需要额外的两个分区。 
* 分区实例: 
2GB硬盘,不在本地记录日志,将在/opt下安装大量程序 
200MB /(root+var),200MB swap,400MB /usr,1.2GB on /opt 
2GB硬盘,为程序保留最大空间,/var分区独立(使得日志文件不会把根区占满) 
1.6GB /(root+usr+opt),200MB swap,200MB /var 
9GB硬盘,主机提供服务 
200MB /,500MB swap,2GB /usr,5GB /opt,1GB /var 
系统重启 
为root设置一个不易破解的囗令(7到8位,包含数字、字母及标点符号)。安装过程将保留在/var/sadm/install_data/install_log文件中。 
以最终用户包模式安装时,需要手工安装帮助文件(man pages)。如果用核心包模式安装,为了使用帮助文件,还需要安装SUNWlibc包: 
cd /cdrom/cdrom0/s0/Solaris_2.6/Product; 
pkgadd -d . SUNWman SUNWdtma SUNWjvman SUNWpmowm SUNWolman SUNWxwman 
cd /cdrom/cdrom0/s0/Solaris_2.7/Product; 
pkgadd -d . SUNWman SUNWdtmaz SUNWdtma SUNWjvman SUNWpmowm SUNWxwman 
针对Solaris8系统,使用2号光盘安装标准帮助文件及java帮助 
cd /cdrom/cdrom0/Solaris_*/Product; 
pkgadd -d . SUNWman SUNWjvman SUNWj2man 
此外,还需要安装一些常用的工具,如解压缩及其它shell。 
pkgadd -d . SUNWgzip SUNWbash SUNWbzip SUNWtcsh SUNWzlib 
升级索引,以便使用“man -k keyword”命令时,搜索相关的帮助: 
/usr/lib/makewhatis /usr/man; 
/usr/lib/makewhatis /usr/openwin/man; 
使用核心包模式安装的用户,还需要安装其它常用的软件包,如: 
Terminfo:SUNWter 
Accounting:SUNWaccr SUNWaccu 
NTP:SUNWntpr SUNWntpu 
UCB tools:SUNWscpu 
Man pages tools:SUNWlibC SUNWdoc。 
下载并安装Sun的最新推荐安装补丁包到/opt/install目录: 
2.6 SPARC 2.6_Recommended.tar.Z 
7 SPARC 7_Recommended.zip 
7 Intel 7_x86_Recommended.zip 
8 SPARC 8_Recommended.zip 
8 Intel 8_x86_Recommended.zip 
* 安装补丁之前,阅读README文件并保存系统已经安装的补丁列表,解压缩补丁包文件。 
cd /opt/install; 
showrev -p > patches.before; 
unzip -q 8_*Recommended.zip 
注:如果只安装了核心包,showrev命令将不能使用,使用patchadd -p命令代替。 
在Solaris7系统中使用patchadd命令,需要对命令做以下改动: 
cd /usr/sbin; 
mv patchadd patchadd-orig; 
sed s/\\/xpg4// patchadd-orig > patchadd; 
chown root:bin patchadd; 
chmod 555 patchadd; 
* 进入解压缩补丁包后产生的目录,使用下面两种方法执行安装角本文件: 
a) 在新安装的系统中,使用带有nosave参数的安装命令,可以节省磁盘空间: 
cd 8_*Recommended;./install_cluster -nosave 
b) 在需要可能进行反安装补丁文件的系统中,使用如下命令进行补丁的安装,这时将在/var/sadm/pathc目录下保留备份文件。补丁只可以逐个加以删除,系统没有提供"deinstall_cluster"的命令。 
./install_cluster 
* 检查实际安装了哪些补丁 
cd ..; 
showrev -p > patches.after; 
diff patches.after patches.before; 
* 查看安装日志文件,返回值8代表没有安装,返回值2表示补丁安装正常。 
more /var/sadm/install_data/Solaris_*Recommended_log 
重新启动系统,以root登录。 
3、安装YASSP工具包 
安装YASSP(Yet Another Solaris Security Package,目前的版本是Yassp beta#15)加强Solaris系统的安全性,它包含多个编译好的安全工具。
注:安装YASSP后,所有有改动过的文件将在/yassp.bk/Before_DATE目录中保留备份。
将YASSP安全工具的安装过程记录到文件中,提供日后查询: 
script -a /yasspinstall.log 
下载yassp.tar.gz文件,保存到/opt/install目录中,切断网络连接。 
ifconfig hme0 down 
解压缩软件包,产生yassp目录 
gunzip < yassp.tar.gz | tar xf - 
cd yassp; ls -l 
Yassp包文件详细清单 
drwxr-xr-x 2 7644 7001 512 Nov 20 06:54 RCS 
-r-------- 1 7644 100 14482 Nov 20 06:54 README 
-r--r--r-- 1 7644 100 8418 Nov 20 06:52 WhatIsNew 
-rw-r--r-- 1 7644 7001 66 May 21 2000 admin 
-rw-r--r-- 1 7644 100 61952 Nov 20 01:20 aubtocsin 
lrwxrwxrwx 1 7644 100 9 Nov 22 10:13 aubtocsin_i386 -> aubtocsin 
lrwxrwxrwx 1 7644 100 9 Nov 22 10:13 aubtocsin_sparc -> aubtocsin 
-rw-r--r-- 1 7644 100 136192 Nov 20 06:54 gnugzip_i386 
-rw-r--r-- 1 7644 100 147456 Nov 20 06:54 gnugzip_sparc 
-rw-r--r-- 1 7644 100 903168 Nov 20 06:54 gnurcs_i386 
-rw-r--r-- 1 7644 100 1021952 Nov 20 06:54 gnurcs_sparc 
drwxr--r-- 3 7644 100 512 Nov 20 06:53 html_doc 
-r-xr-xr-x 1 7644 100 5323 Nov 20 05:25 install.sh 
-rw-r--r-- 1 7644 100 3180544 Nov 20 06:54 openssh_i386 
-rw-r--r-- 1 7644 100 4121600 Nov 20 06:54 openssh_sparc 
-rw-r--r-- 1 7644 100 26624 Nov 20 06:54 parcdaily 
lrwxrwxrwx 1 7644 100 9 Nov 22 10:12 parcdaily_i386 -> parcdaily 
lrwxrwxrwx 1 7644 100 9 Nov 22 10:12 parcdaily_sparc -> parcdaily 
-rw-r--r-- 1 7644 100 231936 Nov 20 06:54 prftripw_i386 
-rw-r--r-- 1 7644 100 293888 Nov 20 06:54 prftripw_sparc 
-rw-r--r-- 1 7644 100 1290240 Nov 20 06:54 secclean 
lrwxrwxrwx 1 7644 100 8 Nov 22 10:12 secclean_i386 -> secclean 
lrwxrwxrwx 1 7644 100 8 Nov 22 10:12 secclean_sparc -> secclean 
-rw-r--r-- 1 7644 100 271360 Nov 20 06:54 wvtcpd_i386 
-rw-r--r-- 1 7644 100 609792 Nov 20 06:54 wvtcpd_sparc 
执行安装文件 
./install.sh 
依据提示安装下列工具:SECclean GNUrcs GNUgzip PARCdaily WVtcpd(包括rpcbind) PRFtripw OPENssh 
SECclean是一个脚本文件,它通过对文件权限的配置,tcp/ip的调整,关闭不必要的服务加强系统的可靠性。 
Yassp beta#15中的问题: 
1. SSH: 
* Yassp在Solaris7及以前版本的系统中不安装SSH,只在Solaris8中安装。 
* Scp的服务器端需要如下设置: 
chmod 755 /usr/local /opt/local 
ln -s /usr/local/bin/scp /usr/bin/scp 
2. Solaris 8 10/00版本的系统中,有一个新的守护进程'picld',是一种对客户端发布特定平台信息的机制,picld进程负责维护及控制客户及内插模块对 PICL(Platform Information and Control Library)信息的访问。 
关闭此进程 
mv /etc/rcS.d/S95picld /etc/rcS.d/.S95picld 
mv /etc/init.d/picld /etc/init.d/.picld 
3. Tocsin是Yassp内含的入侵检测工具,用来侦听网络数据包,缺省情况下不安装。
pkgadd -d aubtocsin 
配置YASSP 
安装完YASSP后,首先浏览一下/etc/yassp.conf配置文件,带有注释,很容易理解。查看yassp.conf及yassp的man pages帮助。一般情况下,除了SSH,不需要改动什么。
1. 帐号 
* 守护进程及用户(DEF_UMASK)的缺省umask值都被设置成为077,禁止组及全局访问。在某些情况下,可能需要将umask值改为027,使组可读。 
* cleanup_passwd脚本会关闭/usr/passwd文件中的用户帐号,但是不会删除他们。Yassp.conf文件中的USERDENIED变量包含缺省的列表。加入非标准的应用帐号。 
* 如果确定删除某些帐号,将其加入yassp.conf文件中的USEDELETED变量项中,并从新执行cleanup_passwd。 
注:此操作可能会产生无主文件或导致错误,如删除uucp将使tip命令不能使用。
* ROOTALLOWED变量包含所有UID为0的帐号列表,cleanup_passwd会关闭所有列表之外的UID为0的帐号。 
2. Cron: 
* 非root用户需要使用at/cron命令时,需要编辑/etc/cron.d目录下的allow/deny文件。
* root的cron列表将会被替换。如果在安装yassp之前,你已经在cron中添加了条目,这些条目需要重新加入,旧的cron列表备份于/yassp.bk目录中。 
* yassp的daily脚本用来整理日志记录,在cron中将其注释掉。 
3. SSH:Yassp将同时安装SSH的客户及服务器端 
* 最新版本的SSH可以被“tcp wrapper"保护,因此使用前,要在/etc/hosts.allow文件中放开,缺省是全部关闭。 
* SSH服务对所有主机开放,编辑/etc/hosts.allow加入 
sshd : ALL 
* 允许X11转发使用SSH,编辑/etc/hosts.allow加入 
sshdfwd-X11 : LOCAL 
* 提示:在hosts.allow/deny,SSH的规则中不要使用反向finger查询。 
* 在SSH中,通常使用'scp'传送文件。' sftp'使用于新的SSH2中,如果需要,在/etc/sshd_config中打开它,当然,由于这是一项新的功能,因此有可能会存在问题。 Subsystem sftp /opt/local/libexec/sftp-server 
* 不接受RSA用户认识,而只允许使用囗令。 
RSAAuthentication no 
* 检查服务器(/etc/sshd_config)及客户端(/etc/ssh_config)其它的设置,如设置只允许特定的用户使用SSH,禁止用守护进程的帐号使用SSH。
4. Syslog:在Solaris8系统中,Yassp会以‘-t'参数启动syslog,因此它将不接受其它主机syslog连接。因此,如果你想使用一台中心log服务器,需要设置SYSLOGFLAGS="" 
5. 如果需要启动INETD服务,设置RUNINETD值为YES,并在/etc/inetd.conf中开放相应的服务。 
缺省情况下,yassp会关闭所有的服务。如果确实需要,使用tcp wrapper,编辑/etc/hosts.allow和/etc/hosts.deny文件中对访问服务进行限制。 
6. nscd守护进程 
* 不启动nscd进程,有些应用,如Netscape的http代理服务将不能工作,设置NETSCAPE或者NSCD变量可以设置激活nscd进程。 
* 关闭nscd进程将加重nameserver的负载,因此,通过调整resolv.conf文件中nameserver的顺序,可以达到平衡负载的目的。 
7. 编辑登录的标语文件,对非法的用户访问提出警告。对于telnet和SSH,登录前的文件为/etc/issue,登录后的文件是/etc/motd 
8. Yassp更改/etc/system文件内的参数对Solaris系统进行调整。
* Yassp增加对文件描述的字节限制,rlim_fd_max=1024、rlim_fd_cur=256。有些应用也许会需要更大的值,根据需要改动。 
* 将小于8的soft-limit增加到256对一些应用会有帮助。Hard-limit不需要改变,仍为1024。系统管理员需要知道哪些应用需要更多的hard-limit值,并对/etc/system做相应的改动。
* 设置sys:coredumpsize=0从而不产生corefiles。当然有时候,管理员需要corefiles进行分析,但是也要注意corefiles可能会泄露敏感的信息。
* 其它的设置: 
*Increase SVR4 style ptys 
set pt_cnt=128 
*Attempt to prevent and log stack-smashing attacks
set noexec_user_stack=1 
set noexec_user_stack_log=1 
*enable advanced memory paging technique 
*NOT NEEDED ON Solaris 8:set priority_paging=1 
set tcp:tcp_conn_hash_size=16348 
*If the NFS_PORTMON variable is set,then clients are required to use 
*privileged ports(portsSet nfssrv:nfs_portmon=1 
*max users processes in here too 
set maxuprc=150 
关闭记录动作,删除yassp安装目录 
#exit 
script done,file is /yasspinstall.log 
#cd; rm -rf /opt/install/yassp 
重新启动,使改动生效 
#reboot 
重新启动后,检查控制台上的错误信息,如果有,更正之。以root登录,检查网络联接情况,应该只有ssh和syslog(Solaris7及以前版本)在监听: 
netstat -a 
UDP: IPv4 
Local Address Remote Address State 
-------------------- -------------------- ------- 
*.* Unbound 
TCP: IPv4 
Local Address Remote Address Swind Send-Q Rwind Recv-Q State 
-------------------- -------------------- ----- ------ ----- ------ ------- 
*.* *.* 0 0 24576 0 IDLE 
*.ssh *.* 0 0 32768 0 LISTEN 
*.* *.* 0 0 32768 0 IDLE 

4、在/etc/vfsab文件中对安装文件系统做限制 

在安装文件系统时,使用一些参数可以提高文件系统的安全性和鲁棒性。使用mount命令检查哪些参数生效,这些参数包括:nosuid、logging、noatime、size=xxxm、ro。 

Mount参数 

OS版本 

描 述 

用 途 

nosuid 

2.x 

关闭SUID程序及SUID设备 

不允许存在SUID的/var、 /home或者数据磁盘分区及设备(建议使用chroot environments).。如果/tmp分区不在磁盘上,此参数无效。 

logging 

2.7或者更高版本

为分区记录transaction日志。可以大提高文件系统检查的速度,特别是针对大容量的磁盘。缺点是需要耗费时间进行写log的操作。 

/usr /opt /home分区

建议除根区(如果使用了Veritas的VxVM)和对磁盘写性能要求非常高的分区外,都使用此参数。 

noatime 

2.7或者更高版本 

允许mount的文件系统,在每次访问文件时对文件节点号不做更新,这样可以显著提高某些服务, 

如对大量小文件进行频繁IO操作的web cache或者新闻服务。 

/var或者文件频繁存取的分区 (web缓存或news分区)。 

size=100m 

2.5.1 or later 

允许/tmp分区只使用100MB的交换空间。这个值通常取交换的30%。 

在mount /tmp时使用 

ro 

2.x 

只读。将文件系统mount成为只读只能对文件系统做有限制的保护(因为攻击者一旦取得root权限,他可以将文件系统重新mount成读写)。 

可以缩短系统启动时,执行fsck的时间,提高性能的同时,可以避免管理员无意中的错误(如误删除文件等)。 

/usr及/opt分区最好mount成为只读方式,但是将/usr分区mount成为只读方式的情况下,通常需要将/usr/local建立的另外的分区上。 

在编辑vfstab文件时要特别小心,对/ 及/usr分区的错误改动可能会导致系统不能引导。如果出现这种情况,使用安装光盘将以单用户模式引导后,mount上有错误的磁盘,更正vfstab文件后,reboot使改动生效。 

下面是vfstab文件的两个例子: 

一个只有/及/var的服务器,操作系统是Solaris2.8 

fd - /dev/fd fd - no - 

/proc - /proc proc - no - 

/dev/dsk/c0t3d0s1 - - swap - no logging 

/dev/dsk/c0t3d0s0 /dev/rdsk/c0t3d0s0 / ufs 1 no logging 

/dev/dsk/c0t3d0s7 /dev/rdsk/c0t3d0s7 /var ufs 1 no logging,nosuid,noatime 

swap - /tmp tmpfs - yes size=100m 

有较多分区的服务器 

fd - /dev/fd fd - no - 

/proc - /proc proc - no - 

swap - /tmp tmpfs - yes size=200m 

/dev/dsk/c0t8d0s0 /dev/rdsk/c0t8d0s0 / ufs 1 no logging 

/dev/dsk/c0t8d0s1 - - swap - no - 

/dev/dsk/c0t8d0s4 /dev/rdsk/c0t8d0s4 /usr ufs 1 no logging 

/dev/dsk/c0t8d0s6 /dev/rdsk/c0t8d0s6 /var ufs 1 no nosuid,noatime,logging 

/dev/dsk/c0t8d0s5 /dev/rdsk/c0t8d0s5 /opt ufs 2 yes logging 

5、在Solaris 8中安装Sunscreen EFS防火墙 

安装本地防火墙对系统进行保护。 

1. 在Solaris 8系统的iPlanet CD#2光盘上,带有Sunscreen EFS的限制版。也可以从Sun的主页下载此版本。 

2. 对于老版本的Solaris系统,可以使用Ipfilter作为本机防火墙。 

Sunscreen EFS可以保护网络通信,下面使用命令行对防火墙规则的设置作简单介绍。 

* 防火墙的安装:在最终用户模式安装Solaris8系统,安装防火墙时,如果提示没有安装SUNWsprot,需要用Solaris2号光盘先行安装: 

pkgadd -d /cdrom/sol_8_sparc_2/Solaris_8/Product SUNWsprot 

再使用iPlanet CD#2光盘,启动Sunscreen安装工具: 

/cdrom/cdrom0/SunScreen/screenInstaller 

除了Naming services=DNS(不使用NIS)外,其它选项都使用缺省设置。 

配置:设置简单的防火墙规则,找到正在运行的防火墙规则,显示缺省规则并对其进行编辑。 

#cd /opt/SUNWicg/SunScreen/bin; 

#./ssadm active 

Active configuration:www default Initial.2 

#./ssadm edit Initial 

edit>list rule 

1 "common""*""*"ALLOW 

edit>list address 

"*"RANGE 0.0.0.0 255.255.255.255 

"le0.net"RANGE 176.17.17.0 176.17.17.255 

"localhost"HOST 

"smtp-server"HOST 1.1.1.1 

"www_le0"GROUP{}{} 

edit>list service common 

"commom"GROUP"tcp all""udp all""syslog""dns""rpc all""nfs prog""icmp 

all""rip""ftp""real audio""pmap udp all""pmap tcp all""rpc tcp 

all""nis""archie""traceroute""ping" 

可以看出,缺省的规则让很少的服务通过。 

我们假设在设置一台HTTPD服务器(在80端囗),并使用SSH进行管理。允许使用ping和 

traceroute命令进行初步的错误检查。我们需要如下设置防火墙的规则: 

#./ssadm edit Initial 

edit>add service ssh SINGLE FORWARD "tcp" PORT 22 

edit>add service myhttp GROUP ping traceroute ssh www 

edit>replace rule 1 ALLOW myhttp"*""*" 

edit>list rule 

1 "myhttp""*""*"ALLOW 

edit>save 

edit>verify 

Configuration verified successfully(not activated) 

edit>quit 

www#./ssadm activate Initial 

Configuration activated successfully on www 

* 在一台管理机上,允许使用ssh和smtp(用来email报警),可以对外使用ping/traceroute,进行检查,为降低风险,只响应其它管理主机的ping/traceroute请求。允许通过HTTPS及使用dns查询。 

# cd /opt/SUNWicg/SunScreen/bin; 

# ./ssadm edit Initial 

edit> add address mgt_net RANGE 176.17.17.0 176.17.17.255 

edit> add service mgt GROUP ping traceroute ssh 

edit> add service https SINGLE FORWARD"tcp" PORT 443 

edit> add service outgoing GROUP ping traceroute dns 

edit> 

edit> replace rule 1 ALLOW www "*" localhost 

edit> replace rule 2 ALLOW https "*" localhost 

edit> replace rule 3 ALLOW mgt mgt_net localhost 

edit> replace rule 4 ALLOW outgoing localhost "*" 

edit> replace rule 5 ALLOW smtp localhost mgt_net 

edit> 

edit> save 

edit> verify 

Configuration verified successfully (not activated). 

# ./ssadm activate Initial 

Configuration activated successfully on

检查网络连接,确定改动的规则已经生效。如果要恢复初始设置,将所有的规则删除后,加入下面一行: 

replace rule 1 ALLOW "common""*""*" 

最后,关闭防火墙的远程图形管理功能,只使用"ssadm"命令行工具进行管理。 

注释掉/etc/rc2.d/S63sunscreen文件中的下面一行: 

$SS_LIBDIR/run_httpd start efshttpd 

在/opt/SUNWicg/SunScreen/lib/ss_boot中,注释掉: 

$SS_LIBDIR/ssadmserver star>/dev/console 2>&1 

6、进一步增强系统的可靠性:路由、邮件、 解析及工具的设置到此,系统已经进行了初步的加固,以root方式登录。 

* 设置路由 

* 对于缺省路由,将网关的IP地址添加到/etc/defaultrouter文件中。 

* 对于静态路由,使用route命令创建/etc/init.d/static_routes文件及 

/etc/rc2.d/S99static_routes符号连接 

* 清空路由表,为特定网络指定路由,如: 

route -f add net 129.97 `cat /etc/defaultrouter` 

* 如果需要运行路由守护进程(不建议使用),要清楚其工作原理,否则它可能会导致你网络通信的不正常。使用'-q'参数的“安静”模式(quiet mode),或者在使用ifconfig命令配置网络接囗设备时,使用'private'参数,告诉网络接囗设备不要对外广播路由信息。运行“安静”模式,要在/etc/yassp.conf文件中设置SUNSTARTUP=YES并确定没有设置缺省路由。 

* 配置/etc/hosts文件,添加不想通过DNS解晰的服务器名。 

* DNS客户端:(对于关键任务的主机不要设置)在/etc/resolv.conf文件中添加域名及DNS服务器名,在/etc/nsswitch.conf文件中hosts行添加DNS条目。 

* 环境的设置:在/.cshrc /.profile:设置aliases和变量(如VISUAL,EDITOR和PATH,路径的环境变量中不要包括当前路径".")。 

* 使用useradd工具在系统中添加新的用户。首次运行后,会产生/etc/sadm/defadduser缺省新加用户设置。可以编辑此文件,对新增用户做缺省的设置。 

* 邮件客户端的设置:如果不对外网外送邮件,则不需要配置mailhost alias(在/etc/hosts文件中),如果不需要任何形式的邮件服务,删除/etc/lib/sendmail程序。否则: 

* 编辑/etc/mail/aliases文件,至少将mailer-daemon、根及其它系统帐户指向其真实地址。 

* 在/etc/hosts文件中加入带有IP地址的邮件服务器条目,alias用mailhost。 

* 将完整的域名添加到/etc/hosts中,设置hostname.YOURDOMAIN.COM的alias。 

* 在/etc/mail/sendmail.cf文件中作如下设置,确保所有的外发邮件通过邮件主机发送(前面两行在Solaris8中无需设置): 

Dj$w.YOURDOMAIN.COM. 

DSmailhost 

DRmailhost 

Dhmailhost 

O FallbackMXhost=mailhost 

* 在root的cron中加入如下条目,将缓存的邮件在工作时间内每小时发送一次 

0 6-22 * * 1-5 /usr/lib/sendmail -q 

* 发送一封测试邮件,对配置进行检查 

mailx -v -s test_email root * Email服务器:设置Email服务器(运行SMTP服务),在这里不做详细介绍。 

Reboot,查错 

安装相应的工具及脚本,确保程序已经在其它主机上编辑测试通过。 

* 将安全工具安装在/secure目录中,如下面会用到的:rotate_cron,rotate_log,wtrim.pl, 

rdistd,Saveit,Weekly。然后将/secure目录模式设置为: 

chmod 700 /secure;chown -R root /resure 

* 在Solaris8系统的附件光盘上,如Software Companion光盘带有许多常用的工具,如PPP、samba、wu-ftp(出于安全性考虑,避免使用)、Development/Libraries、Development/Tools、 

X11应用、vim/emacs、Windows管理器等。使用图形化的安装工具或者通过SSH和X11隧道登录到服务器上,进入相应的目录,使用pkgadd命令进行安装。 

* 安装其它的常用工具,如traceroute、top或者lsof(不要设置SUID位)。 

* 安装perl,并建立/bin/perl符号链接(ln -s /usr/local/bin/perl /bin/perl)。 

Solaris8系统已经内置了一个版本的perl,但最好删除它(pkgrm SUNWpl5u SUNWpl5p SUNWpl5m),从Sunfreeware.com下载最新的版本进行安装(pkgadd -d perl-5.6.0-sol8.sparc-local)。 

三,
7、补丁 
系统在安装时会自动安装推荐补丁包,但是它并不包含所有的安全补丁。定期检查最新的补丁,安装了最新安全补丁的系统要比没有安装的系统可靠的多。 
补丁通常有标准补丁(Standard patches)、推荐补丁(Recommended patches)、安全补丁(Security patches)、2000年补丁(Y2K patches),patch clusters是以上补丁的集成包。单点补丁(Point patches)是针对特定问题的补丁。 
通过下列方法,了解已知的漏洞及相应的补丁程序: 
1. 订阅相关组织及公司(如CERT/First、SUN、Bugtraq)的邮件列表。 
2. 订阅有关漏洞及补丁的邮件列表,如Security Portal(Solaris Digest)、 
SecurityFocus(Sunr的部分)或者SANS。 
3. 定期使用工具,检查服务器上安装的补丁是否与Sun发布的最新补丁列表相一致。 
4. 一至两月检查一次Sun推荐的补丁包,需要注意的是安装推荐补丁包时,如果对内核打补丁可能会导致一些应用的不正常。 
5. 某些第三方的应用的补丁也需要加以关注。 
注:安装补丁可能会改动Yassp的配置,因此在安装完补丁重启系统后,要仔细检查是否启动了不需要的进程。 
针对补丁的工具 
* GetApplyPatch和CheckPatches是两个管理Solaris补丁的Bshell的脚本工具。 
1.CheckPatches使用showrev命令查看已经安装的补丁,并与Solaris的补丁报告相比较,列出需要安装的推荐及安全补丁。补丁报告SolarisX.PatchReport通常在当前目录下,也可以使用-f参数通过FTP下载最新的补丁报告 
>./CheckPatches -f 
2.GetApplyPatch:用来获得并安装最新的补丁,使用补丁号码作为执行脚本时的参数。运行时,会提示是否下载,显示补丁的README文件,安装补丁后,删除安装目录。使用'-b'参数以"batch mode"运行,则不做提示。 
>./GetApplyPatch 108875-07 
CheckPatches.cron是一个自动运行的脚本,并将结果mail给管理员。 
3.同时使用这两个脚本文件,获得需要的补丁并进行安装。 
>./CheckPatches | ./GetApplyPatch 
GetApplyPatch.cron可以用来自动执行,取得补丁并进行安装,但是关键任务的服务器上不推荐使用它。 
4.其它的特点: 
* 带有man帮助文件 
* 支持Solaris Intel及Sparc,通过测试 
* 可以设置ftp代理 
* CheckPatches可以忽略无需安装的补丁。比如,在Solaris8 x86系统中,运行CheckPatches后,提示需要下面的补丁: 
109897-03 SunOS 5.8_x86: USB patch 
109952-01 SunOS 5.8_x86: jserver buffer overflow 
110417-02 SunOS 5.8_x86: ATOK12 patch 
对于这些补丁,我们并不想安装。创建Solaris8_x86.PatchReport.Except,在文件中加入上面三行,在次运行CheckPatches脚本时会将它们忽略。 
* 也可以对CheckPatches的命令输出做过滤,如: 
./CheckPatches | egrep -v "109897|109952|110417" 
* Sunsolve提供的Patchdiag工具,与最新的Patchdiag.xref一起,可以检查系统缺少哪些补丁,然后下载并安装这些补丁。 
* 使用SecurityFocus的vulnerability calculator工具,运行下面的命令 
>showrev -p |cut -f2 -d' ' | xargs 
将结果粘贴到窗囗中,然后选择操作系统。在得出结果的中选择与自己主机上的应用相关的内容进行修补。 
* FastPatch可以用来替代patchadd命令,它的执行速度更快。 
* Patchreport是另外一个用perl语言编写的非常全面的补丁检查工具。 
8、RPC 
在关键任务主机,避免使用RPC服务。RPC使用动态分配的端囗及非标准的存取控制方法。但是,确有一些应用需要使用RPC,如CDE、Open Windows、Disksuite及Legato Networker。 
如何提高Disksuite的安全性 
Disksuite是系统内置的工具,用来做磁盘镜象及设置RAID。它需要RPC的支持(在inetd中运行的rpc.metamhd和rpc.metad)。 
1. 尽量不运行Disksuite 
* 硬件RAID的好处在于不需要特殊的软件支持。这对于对安全性要求较高的系统十分有利。而且当出现问题时,你会发现Disksuite并不是太容易使用的。 
* 对于象是系统盘等,数据并不会频繁变动的系统盘,作镜像(cold mirroring)就足够了,使用脚本mirror_boot.sh可以完成此项工作。 
2. 运行Disksuite,但是停止RPC服务。停止inetd.conf中的'metad'服务会引起以下结果: 
* 'metatool'将不会工作,但是命令行工具还可以运行。为了应付系统盘的灾难性错误,最好了解这些命令行工具。 
* Disksets-系统间共享的metadevices将不能使用。 
3. 如果使用Disksuite和RPC,使用Wietse Venema的RPCBIND。 
* Solaris8系统自带的Sunscreen EFS Lite Firewall可以用来对rpc服务的存取进行限制。 
* IPfilter也可以用来做限制RPC服务访问的本地防火墙。 
* IPfilter可以在8以前的老版本的Solaris上运行,并且是免费的。 
* It's doesn't have an RPC state based engine though(so it can't filter on RPC program names or allow RPC to specific destinations)。 
* But it can be used to allow all localhost RPC traffic(enough for some RPC applications such as Disksuite or CDE)and deny all remote traffice except,say,HTTP or whatever service is provided to remote hosts。 
* 使用Wietse Venema的rpcbind(包含在Yassp的tarball里),可以提供类似tcp wrapper的访问控制和日志记录。Rpcbind是一种“目录”服务用来定位某一种服务(通过RPC名或者RPC号)。因为它并不是连接服务的中介,因此它并不能真正为RPC程序提供访问控制。用端囗扫描器可以检测激活的RPC服务,除非内核被定制成过滤这些连接,否则并不能防止对服务的访问。 
9、日志、Cron、许可 
配置日志及pruning: 
* Syslog日志:Yassp使用修改过的/etc/syslog.conf配置,开启了更多的日志记录保存在/var/adm/messages中。同时也安装了一个可选的/etc/syslog.conf.server,是为loghosts设计的并将不同的服务存在分开的log文件中。 
* Yassp关闭了root帐号cron中有关log的条目。添加了运行'daily'脚本。 
配置Syslog 
Syslog客户端:在/etc/hosts文件中指定log服务器。 
* 测试log服务器是否正常 
logger -p auth.warn "test of syslog",检查是否记录在log服务器里。 
* 在log服务器及本地同时记录日志,取消/etc/syslog.conf中的下一行注释: 
*.err;auth.info;kern.debug /var/adm/messages 
* 如果日志记录不能正常工作,可以参照syslog.conf中的例子及提示。 
Syslog服务器(loghost): 
* log服务器需要一块大的磁盘用来保存日志文件。 
* 在Solaris8系统中,Yassp将以"-t"参数启动syslog,因此它将不接受其它主机的记录日志的请求。如果想要设置集中的log服务器,需要在/etc/yassp.conf中设置SYSLOGFLAGS=""。 
* Yassp还安装了一个/etc/syslog.conf.server配置文件,是针对log服务器并将不同的服务产生的日志存于/var/log目录下不同的文件中。用它覆盖配置文件并重新启动syslog: 
mv /etc/syslog.conf /etc/syslog.conf.client 
cp /etc/syslog.conf.server /etc/syslog.conf 
kill -l `cat /etc/syslog.pid` 
* 使用rotate_log工具对日志进行管理和压缩,在root的cron中加入: 
##Prune syslog logs weekly,keeping the last 6 months or so: 
55 23 * * 6 /secure/rotate_log -n 40 alertlog 
55 23 * * 6 /secure/rotate_log -n 40 authlog 
55 23 * * 6 /secure/rotate_log -n 40 cronlog 
55 23 * * 6 /secure/rotate_log -n 40 daemonlog 
55 23 * * 6 /secure/rotate_log -n 40 kernlog 
55 23 * * 6 /secure/rotate_log -n 40 local0log 
55 23 * * 6 /secure/rotate_log -n 40 local2log 
55 23 * * 6 /secure/rotate_log -n 40 local5log 
55 23 * * 6 /secure/rotate_log -n 40 newslog 
55 23 * * 6 /secure/rotate_log -n 40 userlog 
55 23 * * 6 /secure/rotate_log -n 40 lprlog 
55 23 * * 6 /secure/rotate_log -n 40 maillogd 
在root的cron中加入每年清理日志文件的条目 
##Empty login/logout records at year end 
0 0 31 12 * /secure/wtrim.pl wtmp 20 
0 0 31 12 * /secure/wtrim.pl wtmpx 20 
#Solaris 2.x logs 
0 4 * * 6 /secure/totate_log -L /var/adm -n 30 loginlog 
0 4 * * 6 /secure/rotate_log -L /var/adm -n 30 sulog 
0 4 * * 6 /secure/rotate_log -L /var/adm -n 2 vold.log 
0 4 * * 6 /secure/rotate_cron 
其它的需要在root的cron设置条目: 
每天与可靠的时间源进行时间同步,使用rdate(NTP会更加精确,但会带来相应的风险) 
##Synchronise the time: 
0 * * * * /usr/bin/rdate YOURTIMEHOST >/dev/null 2>&1 
安装检查重要进程是否运行的脚本,monitor_processes.pl并在root的cron中加入: 
##Check that important processes are running during office hours: 
##[If you run 7x24,modify accordingly] 
0,30 8-19 * *1-5 /secure/monitor_processes.pl sshd httpd 
每次安装新的程序后,最好在文件中记录下来,如: 
cat >/etc/mods<15.10.00 james New install of Solaris8 and tools 
EOF 
10、限制SUID文件 
设置SUID位的文件,允许用户以文件所有者的权限执行此程序。常用来让普通用户执行只有root能运行的程序,但是存在缓存溢出的风险。 
* Solaris有很多“SUID root”的执行程序,每一个都会带来风险,因此尽可能多的停止SUID程序。 
* 阅读SUID的参考文件 
发现系统中的SUID文件 
使用find命令: 
find / -perm -u+s -ls 
find / -perm -g+s -ls 查找GUID程序 
如何处理SUID文件: 
* 直接删除 
* 关闭程序(chmod 000 FILENAME) 
* 移去SUID位(chmod ug-s FILENAME) 
* 对文件回以组限制(首先移去所有人的权限 chmod o-rwx),允许组访问(chgrp MYGROUP MYFILE)。 
哪些SUID文件需要回以限制 
* 在一些具有用户帐号的敏感服务器上或者关键的进程由非root用户运行,应尽可能地减少SUID文件。 
* 对于可靠性要求非常高的系统,建议除"pt_chmod","utmp_update"和"su"以外,其余全停。 
* Reg Quinton解释了每一个SolarisSUID程序,并给出配置建议。 
* 例子: 
* 象uucp这样的工具,基本无用,可以删除 
pkgrm SUNWbnuu 
chmod ug-s /usr/bin/cu /usr/bin/uu* /usr/lib/uucp/* 
* 另一个没有用处的工具包是kcms(Kodak Color Management System) 
pkgrm SUNWkcspf SUNWcspx SUNWkcspg SUNWkcsrt 
chmod ug-s /usr/openwin/bin/kcms* 
* 如果不使用打印机 
chmod ug-s /usr/lib/lp/bin/netpr /usr/sbin/lpmove /usr/bin/lp /usr/bin/lpset 
/usr/bin/lpstat /usr/bin/cancel /etc/lp/alerts/printer 
* 只允许root使用r命令 
chmod ug-s /usr/bin/rcp /usr/bin/rlogin /usr/bin/rsh 
* 只允许root对网络进行侦听及列出进程列表 
chmod ug-s /usr/sbin/snoop /usr/sbin/devinfo /bin/rdist /usr/bin/netstat 
/usr/local/bin/top /usr/sbin/traceroute /usr/local/bin/lsof /usr/bin/*/ps 
/usr/ucb/*/ps /usr/sbin/*/whodo /usr/bin/*/uptime /usr/bin/*/w 
* 只允许root做备份和恢复 
chmod ug-s /usr/lib/fs/ufs/ufsdump /ufs/ib/fs/ufs/ufsrestore 
* 假设不使用YP、NIS+ 
chmod ug-s /usr/bin/chkey 
* 只允许root使用cron和at 
chmod ug-s /usr/bin/at /usr/bin/atq /usr/bin/atrm /usr/bin/crontab 
* 只允许root管理系统 
chmod ug-s /usr/bin/admintool /usr/lib/fs/ufs/quota /usr/bin/tip /usr/bin/fdformat 
/usr/bin/eject /usr/bin/volcheck /usr/bin/volrmmount /usr/bin/rmformat 
* 不使用Openwindows和CDE 
chmod ug-s /usr/dt/bin/* /usr/openwin/*/* 
* Sendmail:不做email服务器的主机不需要sendmail设置SUID位 
chmod u-s /usr/lib/sendmail 
* 进行以上的操作后,以“最终用户”模式安装的Solaris8系统中,SUID文件列表如下: 
usr/lib/pt_chmod /usr/lib/utmp_update /usr/bin/login /usr/bin/newgrp /usr/bin/newtask 
/usr/bin/pfexec /usr/bin/su /usr/bin/passwd /usr/sbin/allocate /usr/sbin/mkdevalloc 
/usr/sbin/mkdevmaps /usr/sbin/ping /usr/sbin/sacadm /usr/sbin/deallocate 
/usr/sbin/list_devices /usr/sbin/pmconfig /opt/local/bin/ssh /usr/bin/yppasswd 
/usr/bin/nispasswd are also SUID, but they are links to /usr/bin/passwd. 
* 在package数据库中仍然保留有末被改变的SUID文件 
find / -perm -u+s -exec pkgchk -l -p {} \; |more 
* 列出所有的SUID文件及属于哪一个包 
find / -perm -u+s -exec pkgchk -l -p {} \; | more 

11、安装完整性检测工具:如Tripwire 

应该经常对系统中文件的完整性进行检查,以确保他们没有被恶意的改变。Solaris提供了"pkgchk -n"命令将安装的文件大小、权限及校验与package数据库进行比较。但是检验是可以会欺骗的,数据库也可能会被更改。因此,真正需要的是采用安全的 hashing算法的文件完整性检查工具。 

Yassp将在/secure/tripwire中安装tripwire。它采用多种hashing算法。系统安装到这个阶段,我们建议对新配置的系统及文件创建快照(snapshot),初始化tripwire的数据库,定期进行检查变动情况。如果有可能的话,将主数据库单独保存。  

文件完整性检查的可选功能

* Tripwire:有免费和商业两种版本 

* 建议在中心服务器上使用商业版本,更加稳定,在其它主机上使用免费的版本。 

* PGP可用,PGP can also be used,by signing files to be protected(creating lots of signature files),then writing a script to check the validity of signatures.This will not catch permission,link,inode or modify date changes though. 

* MD5 signatures(单向hash算法)可能同样使用,但是MD5签名列表不要保存在被监视的主机上,除非已经加密或者PGP signed。 

使用免费Tripwirer例子: 

* Yassp安装/secure/tripwire/tripwire及缺少的配置tw.config,也可以获得源代码后自行编译。 

* 如果需要,编辑/secure/tripwire/tw.config,符合自己要求。 

* 接下来,做系统的初始状态。 

cd /secure/tripwire; ./tripwire -i 2 -initialise -c tw.config建立一个新的文件数据库。可能会有一些文件无法找到的报错信息,忽略它们。把新产生的数据库(在 /secure/tripwire/database)复制到软盘上。在将来如果怀疑系统遭受攻击或者改动时,可以使用此文件。 

* 可以在cron中设置每天进行检查,也可以手工进行

./tripwire -i 2 -c tw.config 

* 告诉tripwire,文件及目录的改变正常 

tripwire -update [/file1 /file2 /patch3.....] 

* improvements: 

* tripwire数据库如果保存在同一主机上,应压缩并加密,或者用强加密工具(如PGP)对其进行sign。 

* 从一台信任主机上检查其它系统,复制tripwire及其数据库,通过SSH远程运行它,检查完后,删除数据库文件。 

* 这样使得攻击者难于觉察系统采用了tripwire进行监控。 

* 阅读脚本trip_host.sh,过滤掉“无文件及目录”报错。它必须从‘master'主机上运行,对目标机有SSH信任关系。 

第一次运行 

/secure/tripwire/trip_host.sh -init HOST 

以后每次运行 

/sevure/tripwire/trip_host.sh -check HOST 

将database文件妥善保存。 

12、安装、测试、加固应用程序 

特定的应用,如FTP、DNS、Email等将在其它文章中论述。 

13、开始使用 

准备使用 

1.如果不再需要使用CD-ROM,在/etc/yassp.conf中关闭volume manager。如果在今后需要安装CD,手工启动vold进行新设备的检测: 

drvconfig;disks;vold &; df -k 

2.如果在安装调试的过程当中,必须将/opt及/usr分区安装成为read-write,那么此时,将它们mount成为read-only。 

3.重新做tripwire的初始化。 

4.将系统备份到两盘磁带上,one offsite。 

5.使用扫描器扫描系统,确保只有需要的服务开启。 

6. 请其他人做测试,避免遗漏。 

7. 详细检查-什么在工作?什么被禁止?检查控制台/log的内容,系统是否如希望那样工作?经常检查日志记录。 

日常维护 

* 使用Sun的Patchdiag进行补丁的检查,需要就进行升级。对于内核的补丁,要在别的机器上先进行测试。 

* 检查所有的错误日志及异常行为:syslog(/var/adm/messages或 

/var/log/*log),/var/cron/log,last,/var/adm/sulog,/var/adm/loginlog,application/server 

日志记录。 

* 编写脚本,报告关键进程是否正常,关键的系统是否可以ping通。 

* 运行tripwire。 

* 定期查看最新的漏洞及风险报告。 

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

此文的原文在这里 

http://www.boran.com/security/sp/Solaris_hardening3.html 

我水平有限,翻译中一定有很多错误,而且也有不少不明白的地方,希望大家一起讨论,指出 

其中理解错误的地方,共同提高。

 
阅读(2383) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~