ps:由于现在不少Solaris安全加固列表都比较老了,在下根据资料和自己的实践总结的Solaris系统加固列表,难免会有不合适(影响服务)和错误以及不足之处,望各位不惜赐教(本来是word文档,发上来以后格式都乱了)
多谢lgx和ghoststone对此文的帮助
Solaris系统安全加固列表
--王宇
一、安全理念
1、安全的隐患更多来自于企业内部
2、对于管理员的要求:不要信任任何人
3、分层保护策略:假设某些安全保护层完全失效
4、服务最小化
5、为最坏的情况做打算
二、物理安全
1、记录进出机房的人员名单,考虑安装摄像机
2、审查PROM是否被更换,可以通过记录hostid进行比较
3、每个系统的OpenBoot口令应该不一样,口令方案不可预测
4、系统安装完毕移除CD-ROM
5、将版本介质放入不在本场地的介质储藏室中
三、账号与口令策略
1、超级用户的PATH(在/.profile中定义的)设置为:
PATH = /usr/bin:/sbin:/usr/sbin
任何用户的PATH或者LD_LIBRARY_PATH中都不应该包含“.”
2、口令文件、影像文件、组文件
/etc/passwd 必须所有用户都可读,root用户可写 ?rw-r―r―
/etc/shadow 只有root可读 ?r--------
/etc/group 必须所有用户都可读,root用户可写 ?rw-r―r--
3、口令安全
Solaris强制口令最少6位,但是超级用户修改口令的时候不受这个限制
强迫test账号每隔30天修改一次口令
#passwd ?n 30 test
强迫test账号在下次登录的时候修改口令
#passwd ?f test
禁止test账号修改口令
#passwd ?n 2 ?x 1 test
封锁test账号,禁止登录
#passwd ?l test
4、组口令
用newgrp 命令临时改变gid
由于sysadmin组可执行admintool,必须要保护好,增加组口令的过程:
删除不需要的成员(如果成员属于sysadmin,改变组时不需要口令)
#passwd (通常封锁的账号)
提取/etc/shadow中user的口令字符串插入到/etc/group中sysadmin的口令字段
封锁user账号
5、修改口令策略
/etc/default/passwd文件
MAXWEEKS=4 口令至少每隔4星期更改一次
MINWEEKS=1 口令至多每隔1星期更改一次
WARNWEEKS=3 修改口令后第三个星期会收到快要修改口令的信息
PASSLENGTH=6 用户口令长度不少于6个字符
6、限制使用su的组(只允许sysadmin组执行su命令)
#chgrp sysadmin /bin/su
#chmod o-rwx /bin/su
7、su的纪录
/etc/default/su文件
SULOG=/var/adm/sulog
SYSLOG=YES
CONSOLE=/dev/console
PATH=/usr/bin:
SUPATH=/usr/sbin:/usr/bin
8、禁止root远程登录
/etc/default/login中设置CONSOLE=/dev/null
在/etc/ftpusers里加上root。
在SSH 配置文件加:permitRootLogin = no
(Solaris 9自带SSH,缺省就禁止root登陆,对 Solaris 9,/etc/ftpusers 不再使用,FTP配置文件都在 /etc/ftpd/ 下面。如果 ftpd 启动时存在 /etc/ftpusers,它会被移动到 /etc/ftpd/下)
四、系统加固
1、为OpenBoot设置密码
在Solaris中设置密码 # eeprom security-password
在OpenBoot中设置密码 ok password
在Solaris中设置安全级别(command) # eeprom security-mode=command
在OpenBoot中设置安全级别(command) ok setenv security-mode command
在OpenBoot中设置安全级别(full) ok setenv security-mode full
2、取消不必须账号
移去或者锁定那些不是必须的帐号,比如sys\uucp\nuucp\listen等等,简单的办法是在/etc/shadow的password域中放上NP字符。
(简单办法是 passwd -l username)
3、文件系统
/etc目录中应该没有文件是组或者其他用户可写的
find /etc/ -type f ?perm ?g+w ?print (查找组可写文件)
find /etc/ -type f ?perm ?o+w ?print (查找其他用户可写文件)
chmod ?R go-w /etc (改变任何错误的组/其他用户的写权限)
/var/adm/utmp和/var/adm/utmpx文件的权限应该是644
4、X-Windows手工锁定(当管理员离开电脑的时候)
CDE中面板上的加锁图标
OpenWindows中-鼠标右键-Utilities-Lock Screen
5、/etc的存取权限
用chmod -R g-w /etc命令来移去组用户对/etc的写权限。
6、打开数据包转发
#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)
7、利用/etc/notrouter关闭IP转发
创建/etc/notrouter文件,重启计算机(入侵者如果可以访问根目录,可以使用ndd命令重新开启IP转发)
/etc/inet/hosts中的配置
127.0.0.1 Localhost (所有系统都有这一项)
192.168.0.13 Loghost (syslog使用的)
192.168.0.109 wy_solaris (主机IP和主机名)
/etc/defaultrouter包含了默认路由器的名称或者IP
如果使用了默认路由器,在/etc/inet/hosts文件中必须包含路由器的名称,因为如果设置了路由表,系统将不会运行任何目录服务(DNS、NIS或者NIS+)
8、cron(任务在/var/spool/cron/crontabs/ 一般行为在/etc/default/cron)
格式:minute hour day-of-month month day-of-week command
(每项间用空格,同一项两个数字间用逗号,每项为数字或者星号)
配置:
查看命令 crontab ?l
(1)进入只有本用户可读的目录
(2)crontab ?l mycronfile
(3)编辑mycronfile
(4)crontab
不要使用crontab ?e命令,因为它会在/tmp下建立所有用户都可读的crontab副本
访问cron系统
/etc/cron.d/cron.allow (允许)
/etc/cron.d/cron.deny (不允许)
存在cron.allow,其中没有某用户,则不允许此用户访问cron系统
存在cron.deny,其中没有某用户,则允许此用户访问cron系统
在/etc/default/cron里设置了"CRONLOG=yes" 来记录corn的动作
PATH中不应包含“/tmp”“~”“.”字样
at(任务在/var/spool/cron/atjobs)
/etc/cron.d/at.allow和/etc/cron.d/at.deny和cron文件完全一样
9、增加静态路由
格式: route add net net-address subnet-mask router hops
例如: route add net 10.15.0.0 255.255.0.0 10.14.48.2 1
(要到达10.15.x.x的网络,需要将数据包送往路由器10.14.48.2,距离10.15.x.x有一个跃点。这个命令将增加到启动文件/etc/rc2.d/S72inetsvc)
增加动态路由(会带来安全隐患)
在/etc/rc2.d/S72inetsvc中增加和是的命令行
运行in.routed或者in.rdisc
诊断工具snoop可以sniff,只有root可以使用,可以把snoop从不需要的UNIX机器上删除
10、root的umask设置错误
修改/etc/profile文件,将umask设为077或者027
11、堆栈缓冲溢出攻击防护设置
在/etc/system里加上如下语句,禁止缓冲溢出:
echo "set noexec_user_stack=1" /etc/system
echo "set noexec_user_stack_log=1" /etc/system
(对 Solaris 9,可以对单个程序设定堆栈不可执行属性,前提是有该程序的源码,例如:# cc -M /usr/lib/ld/map.noexstk myprogram.c)
12、使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
13、防止TCP序列号预测攻击(ip欺骗)
建议在/etc/default/inetinit中增加如下的生成初始化序列号设置来防止TCP序列号预测攻击(ip欺骗):TCP_STRONG_ISS=2
14、(如果有ftp服务)不要使用匿名ftp
/etc/inet/inetd.conf中的ftpd为(记录)
ftp stream tcp nowait root /usr/sbin/in.ftpd in.ftpd ?dl
决不能用root身份使用ftp(口令不加密)
/etc/ftpusers中的增加超级用户(这里的账号禁止用ftp连接系统)
FTP 服务暴露系统敏感信息
编辑/etc/default/ftpd文件,假如文件不存在就新建一个,在文件中的加进以下