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:uucpAdmin:/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的输出结果,