接上篇《Linux 服务器安全配置》,下面把关于solaris的内容继续奉献给大家!
在这里特别感谢大家对我的支持和鼓舞!谢谢!!^_^
Solaris篇1.概述Solaris的安全配置可以从以下几个方面来考虑:
1. 本地安全增强:
限制某些强大命令的访问
设置正确的文件权限
应用组和用户的概念
suid/sgid的文件最少
rw-rw-rw的文件最少等
2. 网络安全增强
使用安全的协议来管理
禁止所有不需要的服务
禁止系统间的信任关系
禁止不需要的帐号
增强认证需要的密码
保护存在危险的网络服务
限制访问等
3. 应用安全增强
限制用户的权限
限制进程所有者的权限
检查应用相关文件权限
限制访问其他系统资源
应用所依赖的suid/sgid文件最少
使用应用本身的安全特性
删除samples和其他无用的组件
4. 监控与警报
日志、完整性、入侵检测等一些使用工具等
2.用户管理2.1 用户口令文件的权限管理/etc/passwd 必须所有用户都可读,root用户可写 –rw-r—r—
/etc/shadow 只有root可读 –r--------
/etc/group 必须所有用户都可读,root用户可写 –rw-r—r—
执行以下命令修改这些文件的读写权限:
chmod 644 /etc/passwd
chmod 600 /etc/shadow
chmod 644 /etc/group
2.2 禁止或删除不必要的系统帐号移去或者锁定那些系统帐号,比如sys、uucp、nuucp、listen、lp、adm等等,简单的办法是在/etc/shadow的password域中放上NP字符。还可以考虑将/etc/passwd文件中的shell域设置成/bin/false
具体操作方法:
userdel lp ##表示删除lp用户
禁用某个用户:
编辑/etc/password 和/etc/shadow文件,比如:
uucp:NP:5:5:uucp Admin:/usr/lib/uucp:
uucp:NP:6445::::::
具体需要禁止的帐号有:
bin, daemon, adm, lp, smtp, sys, uucp, nuucp, nobody, noaccess
2.3 修改口令策略编辑/etc/default/passwd文件
MAXWEEKS=4 口令至少每隔4星期更改一次
MINWEEKS=1 口令至多每隔1星期更改一次
WARNWEEKS=3 修改口令后第三个星期会收到快要修改口令的信息
PASSLENGTH=6 用户口令长度不少于6个字符
2.4 限制使用su的组 只允许sysadmin组执行su命令
#chgrp sysadmin /bin/su
#chmod o-rwx /bin/su
2.5 su的纪录 编辑/etc/default/su文件,主要为了记录每个使用su命令切换用户的记录。
SULOG=/var/adm/sulog
SYSLOG=YES
CONSOLE=/dev/console
PATH=/usr/bin:
SUPATH=/usr/sbin:/usr/bin
2.6 禁止root远程登录 在/etc/default/login中设置CONSOLE=/dev/null,将只允许普通用户在console登录然后su成root,当存在多个系统管理员的时候, 这种设置提供了更好的安全性。
在/etc/ftpusers里加上root,主要为了限制root用户直接使用ftp。
在SSH 配置文件加:permitRootLogin = no ,不允许root直接使用ssh登录系统。
(Solaris 9自带SSH,缺省就禁止root登陆,对 Solaris 9,/etc/ftpusers 不再使用,FTP配置文件都在 /etc/ftpd/ 下面。如果 ftpd 启动时存在 /etc/ftpusers,它会被移动到 /etc/ftpd/下)
3.服务管理3.1 关闭不使用的系统服务检查/etc/rc2.d和/etc/rc3.d目录下的所有"S"打头的脚本文件,将那些启动不必要服务的脚本文件改名,确认新文件名不以"S"打头。重启动确认这些变动生效,检查/var/adm/messages日志文件,用ps -elf检查是否还有无关进程启动。
在/etc/init.d/一般需要关闭的服务有:
sendmail
lp
rpc
snmpdx
keyserv
nscd
volmgt
uucp
dmi
autoinstall
3.2 关闭系统内各种不使用的网络服务检查系统提供的每一种网络服务是否是工作环境所必需的,如果不是,就屏蔽它。其中一部分在启动脚本中设置,另外一部分在/etc/inetd.conf文件中配置,注释掉不必要的网络服务,ps -ef | grep inetd | awk '{print $2;}' | xargs kill -1迫使修改后的/etc/inetd.conf文件生效。需要屏蔽的网络服务包括
tftp
systat
rexd
ypupdated
netstat
rstatd
rusersd
sprayd
walld
exec
comsat
rquotad
name
uucp
in.fingerd
如果要求系统非常安全,应该用一个只包含了telnet和ftp(如果这两个服务是必需的)服务的inetd.conf代替标准的inetd.conf文件。
3.3 关于NFS服务防火墙主机不应该使用NFS,无论是client还是server
如果必须将防火墙主机配置成NFS server,应该将输出的文件系统限制成只有特定主机才能访问。尽可能只读输出文件系统,比如,在/etc/dfs/dfstab文件中
share -F nfs -o ro=trusted_clients /logs
如果必须将防火墙主机配置成NFS client,记得总是使用"nosuid"选项做mount操 作,比如
mount -F nfs -o nosuid,bg trustserver:/home /trustserver_home
4.系统文件权限 4.1 /etc的存取权限用chmod -R g-w /etc命令来移去组用户对/etc的写权限。
4.2 限制.rhosts、.netrc和/etc/hosts.equiv文件的使用限制.rhosts、.netrc和/etc/hosts.equiv文件的使用。r系列命令使用这些文件来访问系统。要为这些文件加锁,先创建它们,然后修改其属性为零即可。这样除了root用户就没有其它用户能创建或修改它们了。
/usr/bin/touch /.rhosts /.netrc /etc/hosts.equiv
/usr/bin/chmod 0 /.rhosts /.netrc /etc/hosts.equiv
.rhosts文件可以作为一个典型的后门文件使用,在某用户的目录下存在.rhosts文件的话,任何用户都可以通过rlogin不需要口令以该用户的身份登录到系统。
运行下面的命令全局查找.rhosts文件
# find –name “.rhosts” –print
4.4 修改文件setuid和setgid的权限Solaris上很多setuid、setgid程序只有root或者属主自己才会使用,完全可以取消setuid、setgid设置而不影响普通用户的工作。用如下命令找出系统中所有setuid过的程序
# find / -perm -4000 -print
考虑取消如下命令的setuid设置
/usr/bin/tip
/usr/bin/ct
/usr/bin/cu
/usr/bin/uuglist
/usr/bin/uuname
/usr/bin/uustat
/usr/lib/exrecover
/usr/bin/uux
/usr/lib/accton
/usr/lib/fs/ufs/ufsrestore
/usr/bin/uucp
/usr/lib/news/inews
/usr/lib/fs/ufs/ufsdump
/usr/lib/uucp/uuxqt
/usr/lib/uucp/uucico
/usr/lib/uucp/remote.unknown
/usr/lib/uucp/uusched
/usr/sbin/allocate
类似的,用如下命令找出系统中所有setgid过的程序
# find / -perm -2000 -print
考虑取消如下命令的setgid设置
/usr/bin/mailx
/usr/bin/netstat
/usr/bin/nfsstat
/usr/bin/write
/usr/bin/ipcs
/usr/lib/fs/ufs/ufsdump
/usr/sbin/arp
/usr/sbin/prtconf
/usr/bin/swap
/usr/sbin/sysdef
/usr/sbin/wall
/usr/sbin/dmesg
/usr/openwin/bin/wsinfo
/usr/openwin/bin/ff.core
/usr/kvm/crash
/usr/openwin/bin/mailtool
/usr/openwin/bin/xload
/usr/kvm/eeprom
/usr/vmsys/bin/chkperm
创建一份系统中剩余setuid、setgid程序的列表,定期检查是否有变化,比如多出其他setuid、setgid程序来。
4.3 umask命令
umask设置用户文件和目录的文件创建缺省屏蔽值,若将此命令放入.profile文件,就可控制该用户后续所建文件的存取许可。umask命令与chmod命令的作用正好相反,它告诉系统在创建文件时不给予什么存取许可。
安装配置完操作系统之后确认root的umask设置是077或者027,执行/usr/bin/umask -S 确认,即查看当前用户的读写文件的默认权限。
5.系统优化5.1 系统数据包转发参数:打开数据包转发
#ndd –set /dev/ip ip_forwarding 1 (在系统作为路由器的情况中执行)
关闭数据包转发
#ndd –set /dev/ip ip_forwarding 0 (建议把这条命令加入/etc/init.d/inetinit中)
忽略重定向数据包(否则有遭到DOS的隐患)
#ndd –set /dev/ip ip_ignore_redirects 1 (加入/etc/init.d/inetinit)
不发送重定向数据包
#ndd –set /dev/ip ip_send_redirects 0 (加入/etc/init.d/inetinit)
禁止转发定向广播(如果网桥连结则不禁止)
#ndd –set /dev/ip ip_forward_directed_broadcasts 0 (加入/etc/init.d/inetinit)
禁止转发在数据源设置了路由的数据包
#ndd –set /dev/ip ip_forward_src_routed 0 (加入/etc/init.d/inetinit)
5.2 系统网络参数:利用/etc/notrouter关闭IP转发,创建/etc/notrouter文件,重启计算机(入侵者如果可以访问根目录,可以使用ndd命令重新开启IP转发)
编辑/etc/inet/hosts中的配置
127.0.0.1 Localhost (所有系统都有这一项)
192.168.0.13 Loghost (syslog使用的,指定syslog日志记录的主机机)
192.168.0.109 test_solaris(主机IP和主机名)
/etc/defaultrouter包含了默认路由器的名称或者IP
如果使用了默认路由器,在/etc/inet/hosts文件中必须包含路由器的名称,因为如果设置了路由表,系统将不会运行任何目录服务(DNS、NIS或者NIS+),即系统在有数据包进行路由时直接路由,不需要有DNS或者NIS来指定。
5.3 堆栈缓冲溢出攻击防护设置 至少90%以上的安全问题都是来自“堆栈溢出”。攻击者通过给一个以root身份运行的程序提供比它所预期的输入长得多的字符串,使被攻击程序无法处理而改变执行流程去执行攻击者指定的代码。
操作步骤:
以root用户登录。
对/etc/system文件做个拷贝:
cp /etc/system /etc/system.BACKUP
用编辑器编辑/etc/system文件
到文件的最后,插入以下几行:
set noexec_user_stack=1
set noexec_user_stack_log=1
保存文件,退出编辑器,一旦重启机器,这些改变就会生效。
(对 Solaris 9,可以对单个程序设定堆栈不可执行属性,前提是有该程序的源码,例如:# cc -M /usr/lib/ld/map.noexstk myprogram.c)
5.4 使IP forwarding和sourec routing(源路)由无效 在Inetinit中使IP forwarding和sourec routing(源路)由无效(假如有超过一个网络接口的话)。在/etc/init.d/inetinit中增加下面所示设置:
ndd -set /dev/ip ip_forward_directed_broadcasts 0
ndd -set /dev/ip ip_forward_src_routed 0
ndd -set /dev/ip ip_forwarding 0
5.5 防止TCP序列号预测攻击(ip欺骗) 建议在/etc/default/inetinit中增加如下的生成初始化序列号设置来防止TCP序列号预测攻击(ip欺骗):TCP_STRONG_ISS=2
5.6 使多路广播(multicasting)无效 为了使多路广播(multicasting)无效请在/etc/init.d/inetsvc中注解掉"route add 224.0.0.0"周围的几行。
5.7 设置正确的环境变量PATH确认root的PATH环境变量设置是安全的,应该只包含/usr/bin:/sbin:/usr/sbin,
避免当前工作目录.出现在PATH环境变量中,这有助于对抗特洛伊木马。
echo $PATH | grep ":."
检查所有缺省启动脚本和root启动脚本,在所有路径变量中删除“.”路径, 包括以下文件:
/.login
/etc/.login
/etc/default/login
/.cshrc
/etc/skel/local.cshrc
/etc/skel/local.login
/etc/skel/local.profile
/.profile
/etc/profile
5.8只允许root进行电源管理编辑/etc/default/sys-suspend:
将 PERMS=console-owner
改为 PERMS=-
并做 #/bin/chmod 0755 /usr/openwin/bin/sys-suspend
此项配置防止SYN Flood攻击
6.日志管理6.1 配置系统syslog日志服务缺省情况下,syslog提供了最小程度的系统日志功能,修改/etc/syslog.conf文件,使得syslog记录更多日志信息,根据日志重要程度分别记录到不同地方。任何与安全相关的日志信息应该加密后存放到文件中。不幸的是,必须重启syslog才能读取新的配置文件。
6.2 日志查看:目前使用solaris的系统管理员都知道在/var区下有个目录adm,在这个目录下有messags,syslog,sulog,utmp等诸多日志文件,它们记录着solaris系统产生的各种消息日志。
messages记载来自系统核心的各种运行日志,包括各种精灵,如认证,inetd等进程的消息及系统特殊状态,如温度超高等的系统消息,可以说它是系统最重要的日志之一。
sulog中记载着普通用户尝试su成为其它用户的纪录。它的格式为:发生时间 +/-(成功/失败) pts号 当前用户欲su成的用户。
su 04/15 16:35 + pts/6 yiming-root
su 04/15 16:43 + pts/4 root-yiming
su 04/17 08:20 - pts/5 cheny-root
su 04/18 16:36 - pts/4 cheny-root
su 04/19 02:57 + pts/11 lizhao-root
utmp,utmpx这两个文件是不具可读性的,它们记录着当前登录在主机上的用户,管理员可以用w,who等命令来看,下面为who的输出结果,
yiming pts/29 Jun 12 09:24 (11.22.33.44)
yiming pts/28 Jun 12 08:41 (11.22.33.43)
guest pts/30 Jun 12 09:26 (penetrate.hacker.com)
root pts/19 Jun 12 08:19 (:0.0)
7.系统补丁7.1 检查补丁列表用命令showrev -p显示当前安装到系统中补丁,检查Sun的安全相关的补丁列表。下载安装所有相关安全补丁。定期重新检查补丁列表。并非所有机器都需要安装所有安全补丁,但是那些敏感的、暴露出来公共访问的主机,应该时刻安装最新安全补丁。
7.2 SUN公司Solaris补丁获取方法: 1、从http://sunsolve.sun.com/获取Sun安全补丁
2、国内教育网:http://www.ccert.edu.cn
7.3 补丁安装方法: Cd /solari_package
pkgadd –d .
8.IpFilter防火墙配置8.1 ipfilter说明:8.1.1 ipfilter概念:IP-Filter是目前比较流行的防火墙软件,它目前拥有多种平台的版本(包括:FreeBSD、NetBSD、Solaris、IRIX、HP-UX、Linux、OpenBSD等版本),并且功能强大,安装配置相对比较简单。可以用它来构建功能强大的软件防火墙。
IPFILTER 基于内核模式的防火墙和 NAT 机制,这些机制可以通过用户模式运行的接口程序中进行控制。防火墙规则可以使用 ipf 工具来动态地设置和删除。 NAT 规则可以通过 ipnat工具来维护。 ipfstat工具则可以用来显示 IPFILTER 内核部分的统计数据。 最后, 使用 ipmon程序可以把 IPFILTER 的动作记录到系统日志文件中。
IPF 最初是使用一组 “以最后匹配的规则为准” 的策略来实现的,这种方式只能支持无状态的规则。 随着时代的进步, IPF 被逐渐增强, 并加入了 “quick” 选项, 以及支持状态的 “keep state” 选项, 这使得规则处理逻辑变得更富有现代气息。 IPF 的官方文档介绍了传统的规则编写方法和文件处理逻辑。新增的功能只是作为一些附加的选项出现,如果能完全理解这些功能, 则对于建立更安全的防火墙就很有好处。
8.1.2 ipfilter安装: A、Ipfilter安装包获取方法:
需要gcc编译安装类型的包:
http://coombs.anu.edu.au/~avalon/ip-filter.html
http://ipfilter.wormulon.net
pkg安装包下载:
http://www.aub.aau.dk/~kl/builds/ipf-4.1.3
B、需要编译安装的安装方法:(一般在安装的INSTALL中有详细说明)
1、将下载的IP-Filter的源码文件ip-fil3.4.17.tar.gz放到/tmp目录下,执行
gzip -d ip-fil3.4.17.tar.gz
tar –xvf ip-fil3.4.17.tar
cd ip_fil3.4.17
make sunos5
对下载的源码包进行编译。当IP Filter编译成功之后,安装过程使用的是solaris常用的打包的方式进行的,它会在/var/spool/pkg目录下创建相应的package文件。
2、在安装目录下输入make solaris来编译所有需要的二进制文件,注意不能使用GNU make来编译。
3、进入到安装目录的SunOS5目录下,执行make package命令,此命令会在SunOS5/<arch>/root目录下创建一个名为“ipf.pkg”的打包文件,同时自动启动pkgadd进程,如果通过手动启动打包进程则需键入:pkgadd -d ipf.pkg来进行。
4、安装结束后会将IP Filter安装到/opt/ipf目录下,同时在/etc/opt/ipf创建一个名为“ipf.conf”的过滤配置文件,初始时该文件为空的。
5、IP Filter的启动方式是通过运行/etc/init.d/ipfboot来启动的,执行ipfboot start启动IP Filter。
6、建立IP Filter的配置文件,/opt/ipf/bin/mkfilters可以产生基本的配置文件。产生方法是通过执行下面的命令:
#/opt/ipf/bin/mkfilters > /etc/opt/ipf/ipf.conf。
7、每次添加或修改ipf.conf文件后都需要重新启动一遍ipfboot,来重新读入配置文件,具体方法如下:/etc/init.d/ipfboot reload。
C、pkg安装包的安装方法:
pkgadd –d ipf-4.1.3_sparc-5.9.pkg
8.2 ipfilter实例:# 默认规则, 关闭阻止所有的包, 关闭所有的通路, 再一步一步打开允许的通道.
# 如果内核设置了 IPFILTER_DEFAULT_BLOCK, 可以省略.
block in all
block out all
# 允许内网的信息自由通过.
pass in quick on dc0 from 192.168.0.0/24 to any
pass out quick on dc0 from any to 192.168.0.0/24
# 允许本机的信息自由通过.
pass in quick on lo0 all
pass out quick on lo0 all
# 禁止外网的无效地址通过
block in quick on tun0 all with ipopts
block in quick on tun0 all with short
block in quick on tun0 all with frag
block in quick on tun0 proto tcp all flags FUP
block in quick on tun0 from 255.255.255.255/32 to any
block in quick on tun0 from 192.168.0.0/16 to any
block in quick on tun0 from 10.0.0.0/8 to any
block in quick on tun0 from 172.16.0.0/12 to any
block in quick on tun0 from 127.0.0.0/8 to any
block in quick on tun0 from 0.0.0.0/8 to any
block in quick on tun0 from 192.0.2.0/14 to any
block in quick on tun0 from 204.152.64.0/23 to any
block in quick on tun0 from 224.0.0.0/3 to any
# 对外网信息的处理, 允许内网包发送到外网, 并且允许外网对这些包的回应信息通过
pass out quick on tun0 proto tcp from any to any flags S/SAFR keep state keep frags
pass out quick on tun0 proto udp from any to any keep state keep frags
pass out quick on tun0 proto icmp from any to any keep state keep frags
#允许对内部网ping的包进入
pass in quick on tun0 proto icmp from any to 20.20.20.0/24 icmp-type 0
pass in quick on tun0 proto icmp from any to 20.20.20.0/24 icmp-type 3
pass in quick on tun0 proto icmp from any to 20.20.20.0/24 icmp-type 8
pass in quick on tun0 proto icmp from any to 20.20.20.0/24 icmp-type 11
#允许22和80端口对外访问,即允许端口为22和80的地址允许通过
pass in quick on tun0 proto tcp from any to any port = 22 flags S keep state
pass in quick on tun0 proto tcp from any to any port = 80 flags S keep state
#允许访问本机ftp服务
#pass in quick on tun0 proto tcp from any to any port = ftp flags S/SA keep state
#pass in quick on tun0 proto tcp from any to any port = ftp-data flags S/SA keep state
#允许DNS服务的包通过
pass in quick on tun0 proto tcp from any to any port = 53 flags S keep state
pass in quick on tun0 proto udp from any to any port = 53 keep state
pass in on tun0 proto udp from any port = 53 to any