最近一周,移动要求对系统进行安全加固,结果维护人员在维护数据库服务器的solaris时,在/etc/netconfig中增加了以下限制ip及ip路由转发的限制:
/usr/sbin/ndd -set /dev/ip ip_forwarding 0
/usr/sbin/ndd -set /dev/ip ip_strict_dst_multihoming 1/usr/sbin/ndd -set /dev/ip ip_forward_directed_broadcasts 0
/usr/sbin/ndd -set /dev/ip ip_forward_src_routed 0
造成telnet,ping ip时,无法解析,oracle报can not connect target host and object.
然后使用ping,telnet 均提示无法解析host.
Solaris的安全配置
希望对大家能有点用吧。
Solaris的安全配置可以从以下几个方面来考虑:
1. 本地安全增强
包括: 限制某些强大命令的访问
设置正确的文件权限
应用组和用户的概念
suid/sgid的文件最少
rw-rw-rw的文件最少等
2. 网络安全增强
包括: 使用安全的协议来管理
禁止所有不需要的服务
禁止系统间的信任关系
禁止不需要的帐号
增强认证需要的密码
保护存在危险的网络服务
限制访问等
3. 应用安全增强
包括: 限制用户的权限
限制进程所有者的权限
检查应用相关文件权限
限制访问其他系统资源
应用所依赖的suid/sgid文件最少
使用应用本身的安全特性
删除samples和其他无用的组件
4. 监控与警报
包括: 日志、完整性、入侵检测等一些使用工具等
下面就详细讲述具体的配置过程。
一、 操作系统配置
1. 安装
1.1 安装最新的补丁
安装patches对系统稳定和安全十分重要。
看系统中安装了那些补丁 #showrev –p
更新更安全的补丁在 http://sunsolve.sun.com
1.2 初始安装时需要创建 /var分区,/var分区是存放logfile以及系统变动文件的文件系统,因为它的易变化性,以及在系统运作过程中的不断扩大,所以不要把/var文件系统包括再root分区里,以免有恶意程序恶意扩大日志文件来dos根分区。
1.3 安装最小的系统
安装Solaris时,最好先最小化安装,然后再加上必要的软件,这样可以减小某个程序出现安全隐患的可能。
2. 打开审计功能
审计包括很多的内容,可以根据需求设置。可以参考本文档中的日志和监控部分。
3. 系统参数安全配置
3.1 OpenBoot的安全
OpenBoot是所有Sun SPARC启动PROM的固件部分,它包括关于SPARC系统如何启动的信息,以及用来检测SPARC系统硬件的内嵌命令。
注意:绝对不能让用户接触OpenBoot,能够访问OpenBoot的聪明用户可以从几乎所有的SCSI设备(外部硬盘或者CD-ROM)上启动系统,如果用户可以从他自己的媒体上启动系统,那么他将获得对系统的完全控制。OpenBoot的安全级别有3种:none、command和full。Sun系统在出厂的时候将OpneBoot安全级别设置为none,即不需要口令,所以必须要采用口令来保护系统的OpenBoot安全。
(1) 如何在Solaris中设置OpenBoot口令(作为超级用户)
# eeprom security-password
Changing PROM password:
New password:xxxxxxxx
Retype new password:xxxxxxxx
(2) 如何在OpenBoot提示符下设置OpenBoot口令
ok password
ok New password (only first 8 chars are used) :xxxxxxxx
ok Retype new password:xxxxxxxx
ok
(3) 如何在Solaris中设置OpenBoot的安全级别
下面这个例子将把安全级别设置为command(作为超级用户)
# eeprom security-mode=command
#
(4) 如何在OpenBoot提示符下设置OpenBoot安全级别
下面这个例子将把安全级别设置为command
ok setenv security-mode command
ok
下面这个例子将把安全级别设置为full
ok setenv security-mode full
ok
3.2 将coredump大小设置为0
在/etc/system中加入如下一行:
set sys:coredumpsize = 0
将每次重启产生的coredump大小设置为0,不需要无用的信息。
3.3 修正堆栈错误,防止溢出(只对2.6后有效)
黑客进入系统后大部分是利用buffer overflow取得root shell
为了防止基于堆栈的缓冲区溢出,在/etc/system文件中加入
set noexec_user_stack=1 防止在堆栈中执行
set noexec_user_stack_log=1 当某人试图运行增加一个记录。
然后改变文件权限:#chmod 644 /etc/system
3.4 只允许root进行电源管理(只对2.6及以后版本有效)
编辑/etc/default/sys-suspend:
将 PERMS=console-owner
改为 PERMS=-
并做 #/bin/chmod 0755 /usr/openwin/bin/sys-suspend
此项防止SYN Flood攻击
3.5 设置/tmp目录粘滞位,mode 1777
创建文件/etc/rc3.d/S79tmpfix:
/bin/cat << EOF >/etc/rc3.d/S79tmpfix
#!/bin/sh
#ident "@(#)tmpfix 1.0 95/09/14"
if [ -d /tmp ]
then
/usr/bin/chmod g-s /tmp
/usr/bin/chmod 1777 /tmp
/usr/bin/chgrp sys /tmp
/usr/bin/chown sys /tmp
fi
EOF
改变S79tmpfix文件权限:
#/usr/bin/chmod 755 /etc/rc3.d/S79tmpfix
此项给/tmp加上粘滞位,只允许写而不允许删除。这样,当黑客往/tmp写.socket文件时不允许删除。
3.6 禁止stop-‘A’键
在/etc/default/kbd中,改变或加入“KEYBOARD_ABORT=disable”此项防止启动后,按stop-A或L1-A得到ok提示符,使用启动盘可以进入单用户模式,防止黑客物理接触机器。但此项不禁止可以作为密码丢失时的应急处理。
3.7 密码设置配置
(1) 添加或编辑/etc/default/passwd文件如下入口:
PWMIN= 1 #密码可以被改变的最小时段。
(2) 添加或编辑/etc/default/passwd文件如下入口:
PWMAX= 13 #密码的最大生存周期。
(3) 添加或编辑/etc/default/passwd文件如下入口:
PWWARN= 4 #设定离用户密码过期的天数,当系统启动时提醒用户。
(4) 添加或编辑/etc/default/passwd文件如下入口:
PWLEN= 8 #设定最小用户密码长度为8位。
3.8 登陆的安全配置
3.8.1 防止远程的root登陆
解决方法:
添加或编辑/etc/default/login文件如下入口:
CONSOLE=/dev/console #这样root只能从/dev/console这个设备登陆。
3.8.2 纪录所有root的登陆情况
添加或编辑/etc/default/login文件如下入口:
SYSLOG= YES #syslog纪录root的登陆失败,成功的情况。
3.8.3 设置登陆会话超时时间
添加或编辑/etc/default/login文件如下入口:
TIMEOUT= 120
3.8.4 确定登陆需要密码验证
添加或编辑/etc/default/login文件如下入口:
PASSREQ= YES
参考脚本:
defloginparams.sh
3.9 设置屏蔽掩码和umask
(1)设置屏蔽掩码:
添加或编辑/etc/default/login文件如下入口:
LUMASK= 027 #这将设定标准掩码为:750,也可以将这行加到/etc/.login /etc/profile /etc/skel/local.cshrc /etc/skel/local.login /etc/skel/local.profile这些文件里。
(2)设置umask
确定root的umask是027或077
检查root的.profile
3.10 设置shell的环境变量
添加或编辑/etc/default/login文件如下入口:
ALTSHELL= YES
参考脚本:
defloginparams.sh
3.11 查是否每个用户都设置了密码
检查/etc/passwd和/etc/shadow,每个用户的密码栏是否为空。
3.12 编辑使用useradd的缺省配置,满足密码策略
编辑/etc/sadm/defadduser需要满足密码策略,例如:
defgroup=15
defgname=users
defparent=/export/home
defskel=/etc/skel
defshell=/usr/bin/ksh
definact=30
defexpire=
3.13 在所有path中,去掉所有”.”路径
检查所有缺省启动脚本和root启动脚本,在所有路径变量中删除“.”路径, 包括以下文件:
/.login
/etc/.login
/etc/default/login
/.cshrc
/etc/skel/local.cshrc
/etc/skel/local.login
/etc/skel/local.profile
/.profile
/etc/profile
3.14 使用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: root,httpadm,wspher 这样,只有sugroup组中的用户可以使用su,提升为超级用户 另外一个可行的方法是使用sudo来替代su。 4 网络安全配置 4.1 禁止所有不需要的服务 用grep -v “^#”/etc/inetd.conf命令来察看你当前没有注释的服务 # vi /etc/inetd.conf 在/etc/inetd.conf中注释掉左右不需要的服务,比如: name、shell、login、exec、comsat、talk、rusersd、printer、finger、uucp 所有以“r”开头的服务,对必须提供的服务采用tcpwapper来保护。 4.2 编译安装Tcp wapper 安装tcpd,编辑inetd.conf中的服务为: ftp stream tcp nowait root /usr/local/bin/tcpd in.ftpd telnet stream tcp nowait root /usr/local/bin/tcpd in.telnetd 4.3 Tcp_Wrappers 在默认情况下,Solaris允许所有的服务请求。用Tcp_Wrappers来保护服务器的安全,使其免受外部的攻击,比想像的要简单和轻松的多。 在/etc/hosts.deny 文件中加入 ALL:ALL以禁止所有计算机访问服务器,然后在/etc/hosts.allow 文件中加入允许访问服务器的计算机。这种做法是最安全的。 Tcp_Wrappers是由两个文件控制的,它们是/etc/hosts.allow 和 /etc/hosts.deny。 第一步 编辑/etc/hosts.deny 文件 # vi /etc/hosts.deny 加入下面这些行: ALL:ALL 这样做的目的是:所有的服务、访问位置,如果没有被明确的允许,也就是在/etc/hosts.allow 中找不到匹配的项,就是被禁止的。 第二步 编辑/etc/hosts.allow 文件 # vi /etc/hosts.allow 例:我们只希望允许同一个局域网的机器使用服务器的telnet功能,而禁止互联网上面的telnet服务请求,本地局域网由 202.39.154. 、202.39.153. 和202.39.152. 三个网段组成。在hosts.deny文件中,我们定义禁止所有机器请求所有服务: ALL:ALL。 在hosts.allow文件中,我们定义只允许局域网访问telnet功能: in.telnetd: 202.39.154. 202.39.153. 202.39.152. 这样,当非局域网的机器请求telnet服务时,就会被拒绝。而局域网的机器可以使用telnet服务。 4.4 启动时提供的服务(rc.x) 4.4.1 禁止所有不需要的服务 在rc.x目录中将不需要的服务改名,比如: # mv /etc/rc3.d/S92volmgt /etc/rc2.d/not_usedS92volmgt 以下服务应该禁止(根据需要自己决定): snmpdx autofs (Automounter) volmgt (Volume Deamon) lpsched (LP print service) nscd (Name Service Cache Daemon) Sendmail keyserv (Keyserv Deamon is only used if NIS+ or NFS are installed,if used start with –d option so that the defaults “nobody” key is not allowed) rpcbind提供远程呼叫,依靠远程系统的ip地址和远程用户的ID进行验证,这样很容易伪造和改变。 4.4.2 禁止所有DMI服务 禁止所有DMI服务: # mv /etc/rc3.d/S??dmi /etc/rc3.d/K??dmi /etc/init.d/init.dmi中启动的dmi服务有: /usr/lib/dmi/dmispd /usr/lib/dmi/snmpXdmid /etc/dmi/ciagent/ciinvoke 4.4.3 去掉mount系统的suid位 在/etc/rmmount.conf中加上: mount hsfs -o nosuid mount ufs -o nosuid 4.4.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 <<eof this only find .rhost: EOF cat ) | /bin/mailx -s "Content of .rhosts file audit report" yourmailBox 4.4.5 禁止使用.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 4.4.6 检查信任关系 检查/etc/hosts.equiv文件,确保为空。 4.5 网络接口调整和安全优化 4.5.1 /etc/rc2.d/S??inet参数调整 在/etc/rc2.d/S??inet中做如下参数调整: 缩短ARP的cache保存时间: ndd -set /dev/arp arp_cleanup_interval 60000 /* 1 min (default is 5 min)*/ 缩短ARP表中特定条目的保持时间: ndd -set /dev/ip ip_ire_flush_interval 60000 /* 1 min (default is 20 min)*/ 关闭echo广播来防止ping攻击 ndd -set /dev/ip ip_respond_to_echo_broadcast 0 # default is 1 关闭原路由寻址 ndd -set /dev/ip ip_forward_src_routed 0 # default is 1 禁止系统转发IP包 ndd -set /dev/ip ip_forwarding 0 # default is 1 禁止系统转发定向广播包 ndd -set /dev/ip ip_forward_directed_broadcasts 0 # default is 1 使系统忽略重定向IP包 ndd -set /dev/ip ip_ignore_redirect 1 # default is 0 使系统限制多宿主机 ndd -set /dev/ip ip_strict_dst_multihoming 1 # default is 0 再次确保系统关闭ICMP广播响应 ndd -set /dev/ip ip_respond_to_address_mask_broadcast=0 # default is 1 关闭系统对ICMP时戳请求的响应 ndd -set /dev/ip ip_ip_respond_to_timestamp=0 # default is 1 关闭系统对ICMP时戳广播的响应 ndd -set /dev/ip ip_ip_respond_to_timestamp_broadcast=0 # default is 1 禁止系统发送ICMP重定向包 ndd -set /dev/ip ip_send_redirects=0 # default is 1 4.5.2 改变TCP序列号产生参数 在/etc/default/inetinit中改变 TCP_STRONG_ISS=2 4.5.3 设置in.routed运行在静态路由模式 按如下步骤建立in.routed -q(静态模式): mv /usr/sbin/in.routed /usr/sbin/in.routed.orig 创建文件/usr/sbin/in.routed为以下内容: #! /bin/sh /usr/sbin/in.routed.orig –q 改变文件属性: chmod 0755 /usr/sbin/in.routed #动态的路由模式容易遭受到恶意的路由信息的亲篇和攻击,所以建议宁愿用静态路由,(路由的增加通过启动文件的route命令)也不建议用动态路由守护进程。 4.5.4 禁止路由功能 创建空文件notrouter: # touch /etc/notrouter 4.5.5 利用ip-filter ip-filter是Solaris系统的内核模块,可以完成简单包过滤 二 应用程序安全配置 1. 总体安全考虑 应用程序以非特权用户运行 定义应用程序属主 删除所有的samples chroot,改变进程的root目录 具体应用考虑 2. NFS服务 2.1 禁止nfs服务 杀掉如下NFS进程: lockd、nfsd、statd、mountd NFS是由/etc/dfs/dfstab文件控制,为了禁止NFS服务的后台程序 将/etc/rc2.d/S15nfs.server文件改名 K15nfs.server 将/etc/rc2.d/S73nfs.client文件改名 K13nfs.client /etc/dfs/dfstab 文件有几个选项 share –F nfs –o [rw/ro] /目录名 client端有读写权限, ro是client端只有读权限 [建议使用ro选项] 2.2 如必须使用,则设置nfs特殊tcp、udp端口 ndd -set /dev/tcp tcp_extra_priv_ports_add 2049(设置TCP端口) ndd -set /dev/udp udp_extra_priv_ports_add 2049(设置UDP端口) 2.3 打开nfs port monitoring功能 在/etc/system中加入: set nfssrv:nfs_portmon = 1 set nfs:nfs_portmon = 1 确定你的/etc/system文件的访问权限为644: # chmod 644 /etc/system 2.4 一些nfs相关的服务 解决方法: nfsd mountd rpc.boot in.rarpd rpld 3 NIS,NIS+ 3.1 去除NIS,NIS+ 建议不要运行NIS,NIS+服务,所以按一下步骤移除它: 在文件/etc/domainname里移除域名: 可以察看NIS大体的服务列表: # pkginfo |grep NIS # pkgrm system SUNWypr NIS Server for Solaris (root) system SUNWypu NIS Server for Solaris (usr) 3.2 移除NIS,NIS+,DNS Lookup 解决方法: 编辑/etc/nsswitch.conf如下: passwd: files group: files hosts: files networks: files protocols: files rpc: files ethers: files netmasks: files bootparams: files publickey: files netgroup: files automount: files aliases: files services: files sendmailvars: files 如果需要dns的话,可以再次修改这个文件。 4 Mail 4.1 停止绑定在25端口的sendmail服务 解决方法: 禁止sendmail服务,系统用户依然可以发信。含义是:sendmail仍然安装了,只是不要作为守护进程存在,你可以在sendmail.cf文件里限制系统的用户的权限。 # mv /etc/rc2.d/S88sendmail /etc/rc2.d/not_usedS88sendmail 4.2 注释所有的并行邮件别名 解决方法: 检查 /ect/aliases |可以并列。用#号注解。 4.3 限制sendmail的expn和vrfy两个命令来收集系统信息 解决方法: 在/etc/senmmail.cf文件中修改如下限制远程连接25端口使用expn和vrfy命令: # O PrivacyOptions=authwarnings,goaway Opgoaway # O PrivacyOptions=noexpn,novrfy,authwarnings O LogLevel=5 4.4 隐藏smtp版本信息 解决方法: 在/etc/mail/sendmail.cf文件里找到smtp版本信息,修改如下: # SMTP login message 4.5 禁止邮件转发 解决方法: 普通用户不可以选择转发者,而root可以通过/usr/local/forward/.forward.$u来控制邮件转发,修改/etc/sendmail.cf如下行: O ForwardPath=/usr/local/forward/.forward.$u 设置/usr/local/forward正确的权限。 4.6 接收邮件 解决方法: 如果真要在系统上接收外来的邮件(监听在25端口)。建议利用spam或smtpd/smtpfwdd来保证邮件服务的安全(加上anti-spam,安全配置)。 5 Ftp安全配置 5.1 安全FTP 解决方法: 建立或修改/etc/default/ftpd文件增加屏蔽码和ftp标志信息: UMASK= 077 BANNER="/bin/cat /etc/ftp-banner" 修改/etc/default/ftpd权限: chmod 644 /etc/default/ftpd 5.2 建立ftp标示信息 解决方法: 建立/etc/ftp-banner文件满足如下: 例如:This system is for authorized users only. Monitoring may occur 修改/etc/ftp-banner文件的权限: chmod 644 /etc/ftp-banner 5.3 在/etc/passwd文件中 ftp:x:30000:30000:Anonymous FTP:/ftp目录:/nosuchshell 5.4 在/etc/shadow文件中 ftp:NP:6445:::::: 5.5 FTP-server的配置文件/etc/ftpaccess class local real * 重定义真实用户为local class remote guest,anonymous * 重定义匿名用户为 remote limit local 100 Any /ftp目录/msgs/limit.local限制登录用户数 limit remote 100 Any / ftp目录/msgs/limit.remote 限制登录用户数 banner /ftp目录/msgs/msg.banner loginfails 2 重试次数 readme README* login readme README* cwd=* message /ftp目录/msgs/welcome.msg login local remote message /ftp目录/msgs/cwd.msg cwd=* remote compress yes local,remote tar yes remote,local log commands real log transfers anonymous,real,guest inbound,outbound shutdown /ftp目录/msgs/shutmsg 5.6 创建ftp banner 创建Banner文件 /etc/ftp-banner 5.7 创建/etc/ftpusers文件 把所有的系统账户加入到这个文件里: root daemon sys bin adm lp smtp uucp nuucp listen nobody noaccess news ingres audit admin sync nobody4 修改/etc/ftpuser文件的权限: # chmod 644 /etc/ftpusers 6 Telnet安全配置 6.1 防止telnet程序显示系统版本信息 解决方法: 移除/etc/default/telnetd文件里的信息:Banner=”” 假如/etc/default/telnetd文件不存在,按如下步骤操作: # touch /etc/default/telnetd # echo "BANNER=\"\"">> /etc/default/telnetd # chmod 444 /etc/default/telnetd 6.2 最好采用SSH代替Telnet 7 X-Windows 设置CDE为不接受任何XDMCP登陆连接 假如/usr/dt/config/Xaccess存在,则如下操作: cat </usr/dt/config/Xaccess # disable all XDMCP connections !* EOF 假如/etc/dt/config/Xaccess存在,则如下操作: cat </etc/dt/config/Xaccess # disable all XDMCP connections !* EOF 三 文件权限 1 删除所有不使用的suid文件 列出系统中所有 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/su chmod u+s /usr/bin/passwd chmod u+s /usr/bin/ps 2 删除所有不使用的sgid文件 列出系统中所有 suid 文件 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/sgid find / -type f \( -perm -2000 \) -print |cpio -pudm /opt/backup/sgid 删除前建立tar备份,不要删除sgid-files.tar!! cd /opt/backup; tar –cvpf sgid-files.tar /opt/backup/sgid/* rm –r /opt/backup/sgid 去除所有sgid 文件中的sgid 位 find / -type f \( -perm -2000 \) –exec chmod –s {} \; 再查一遍 find / -type f \( -perm –2000 \) –exec ls –al {} \; 对一些常用文件建立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 /etc下不应有组可写文件,去掉写权限 find /etc -type f \( -perm –20 \) –exec chmod g-w {} \; 4 删除/etc下所有用户可写文件 检查/etc目录下对用户可写文件: find /etc -type f\( -perm 2 \) | xargs ls –las 不需要用户的可写权限,修改如下: find /etc -type f\( -perm 2 \) | xargs chmod g-w 5 改变所有文件的rw-rw-rw权限为rw-r-r- 首先列出文件: find / -type f -perm 666 |xargs ls -al > perm-666-before-change.txt 改变权限: find / -type f -perm 666 |xargs chmod 644 find / -type f -perm 666 |xargs ls -al > perm-666-after-change.txt 6 改变rwxrwxrwx文件的权限 首先列出文件: find / -type f -perm 777 |xargs ls -al > perm-777-before-change.txt 改变权限: find / -type f -perm 777 |xargs chmod 755 find / -type f -perm 777 |xargs ls -al > perm-777-after-change.txt 7 找出系统可写的目录 解决方法: find / -type d\( -perm 2 \) 改变所需要的权限设置 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:root find /etc -type f -print | grep rc | egrep -v "skel|tty|mail|snmp|Mail" | xargs ls -al > rc-files-after-change.txt ls -al /etc/init.d > etc-init.d-before.change.txt chown root:root /etc/init.d ls -al /etc/init.d > etc-init.d-after-change.txt 经过这样的改变,所有的rcX.d里的脚本的文件属主都为root,所有的/etc/init.d目录里的脚本的文件属主文件组都是root了,为了防止特洛伊木马。 9 确保所有cron行为有记录 确定/etc/default/cron文件里有如下行: CRONLOG=YES 删除/var/spool/cron/crontabs 目录中除了root文件外所有文件。 10 检查utmp,utmpx的权限 检查/var/adm目录下的文件权限: find /var/adm -type f\( -perm 2 \) | xargs ls -las 修改文件: chmod 644 /var/adm/utmp 11 查找无用户文件 1) find / -type f -nouser > files-nouser-before-change 2) find / -type f -nouser | xargs chwon nobody:nobody 3) find / -type f -nouser > files-nouser-after-change 12 查找无组文件 1) find / -type f -nogroup > files-nogroup-before-change 2) find / -type f -nogroup | xargs chgrp nobody 3) find / -type f -nogroup > files-nogroup-after-change 13 改变/var/cron权限 chmod 700 /var/cron && chown root /var/cron && chgrp sys /var/cron 四 日志和监控 1 将cron logfiles的大小设为2M 修改/etc/cron.d/logchecker如下: LIMIT=4096 2 记录所有inetd服务 修改/etc/init.d/inetsvc文件如下: /usr/sbin/ifconfig -au netmask + broadcast + /usr/ bin/inetd -s –t 假如你运行了named,dhcpd,multicast,你必须作如上改动。 3 修改syslog.conf文件 编辑syslog.conf,增加 *.debug /var/adm/compass.messages #记录debug信息 4 创建/var/adm/loginlog来记录登陆失败信息 touch /var/adm/loginlog chmod 600 /var/adm/loginlog chown root /var/adm/loginlog chgrp sys /var/adm/loginlog 五 其他安全建议 1 安装tripwire tripwire是一个特洛伊木马检查程序,他工作在提供的二进制文件的md5码的数据库以及你的配置上,建议每6个小时运行一次tripwire。 2 IDS 建议安装运行snort工具来监测你的网络可能收到的如下攻击: - cgi-scan - portscans - virus 根据你的需要参看/root/config/snort.rules文件。 3 日志文件观察者(swatch) 建议安装运行swatch工具来监测你的日志文件,你可以在你的系统上启动多个监测进程,例如: - /var/adm/compass.messages - /var /adm/snort_portscan.log - /opt/AppServer/WebSphere/log/???? Swatch是一个用perl写的工具,所以你必须安装PERL MODULES。 4 设置启动标示 创建/etc/issue文件,添加需要的启动标示。
原文链接:https://www.f2er.com/oracle/212015.htmlSolaris的安全配置可以从以下几个方面来考虑:
1. 本地安全增强
包括: 限制某些强大命令的访问
设置正确的文件权限
应用组和用户的概念
suid/sgid的文件最少
rw-rw-rw的文件最少等
2. 网络安全增强
包括: 使用安全的协议来管理
禁止所有不需要的服务
禁止系统间的信任关系
禁止不需要的帐号
增强认证需要的密码
保护存在危险的网络服务
限制访问等
3. 应用安全增强
包括: 限制用户的权限
限制进程所有者的权限
检查应用相关文件权限
限制访问其他系统资源
应用所依赖的suid/sgid文件最少
使用应用本身的安全特性
删除samples和其他无用的组件
4. 监控与警报
包括: 日志、完整性、入侵检测等一些使用工具等
下面就详细讲述具体的配置过程。
一、 操作系统配置
1. 安装
1.1 安装最新的补丁
安装patches对系统稳定和安全十分重要。
看系统中安装了那些补丁 #showrev –p
更新更安全的补丁在 http://sunsolve.sun.com
1.2 初始安装时需要创建 /var分区,/var分区是存放logfile以及系统变动文件的文件系统,因为它的易变化性,以及在系统运作过程中的不断扩大,所以不要把/var文件系统包括再root分区里,以免有恶意程序恶意扩大日志文件来dos根分区。
1.3 安装最小的系统
安装Solaris时,最好先最小化安装,然后再加上必要的软件,这样可以减小某个程序出现安全隐患的可能。
2. 打开审计功能
审计包括很多的内容,可以根据需求设置。可以参考本文档中的日志和监控部分。
3. 系统参数安全配置
3.1 OpenBoot的安全
OpenBoot是所有Sun SPARC启动PROM的固件部分,它包括关于SPARC系统如何启动的信息,以及用来检测SPARC系统硬件的内嵌命令。
注意:绝对不能让用户接触OpenBoot,能够访问OpenBoot的聪明用户可以从几乎所有的SCSI设备(外部硬盘或者CD-ROM)上启动系统,如果用户可以从他自己的媒体上启动系统,那么他将获得对系统的完全控制。OpenBoot的安全级别有3种:none、command和full。Sun系统在出厂的时候将OpneBoot安全级别设置为none,即不需要口令,所以必须要采用口令来保护系统的OpenBoot安全。
(1) 如何在Solaris中设置OpenBoot口令(作为超级用户)
# eeprom security-password
Changing PROM password:
New password:xxxxxxxx
Retype new password:xxxxxxxx
(2) 如何在OpenBoot提示符下设置OpenBoot口令
ok password
ok New password (only first 8 chars are used) :xxxxxxxx
ok Retype new password:xxxxxxxx
ok
(3) 如何在Solaris中设置OpenBoot的安全级别
下面这个例子将把安全级别设置为command(作为超级用户)
# eeprom security-mode=command
#
(4) 如何在OpenBoot提示符下设置OpenBoot安全级别
下面这个例子将把安全级别设置为command
ok setenv security-mode command
ok
下面这个例子将把安全级别设置为full
ok setenv security-mode full
ok
3.2 将coredump大小设置为0
在/etc/system中加入如下一行:
set sys:coredumpsize = 0
将每次重启产生的coredump大小设置为0,不需要无用的信息。
3.3 修正堆栈错误,防止溢出(只对2.6后有效)
黑客进入系统后大部分是利用buffer overflow取得root shell
为了防止基于堆栈的缓冲区溢出,在/etc/system文件中加入
set noexec_user_stack=1 防止在堆栈中执行
set noexec_user_stack_log=1 当某人试图运行增加一个记录。
然后改变文件权限:#chmod 644 /etc/system
3.4 只允许root进行电源管理(只对2.6及以后版本有效)
编辑/etc/default/sys-suspend:
将 PERMS=console-owner
改为 PERMS=-
并做 #/bin/chmod 0755 /usr/openwin/bin/sys-suspend
此项防止SYN Flood攻击
3.5 设置/tmp目录粘滞位,mode 1777
创建文件/etc/rc3.d/S79tmpfix:
/bin/cat << EOF >/etc/rc3.d/S79tmpfix
#!/bin/sh
#ident "@(#)tmpfix 1.0 95/09/14"
if [ -d /tmp ]
then
/usr/bin/chmod g-s /tmp
/usr/bin/chmod 1777 /tmp
/usr/bin/chgrp sys /tmp
/usr/bin/chown sys /tmp
fi
EOF
改变S79tmpfix文件权限:
#/usr/bin/chmod 755 /etc/rc3.d/S79tmpfix
此项给/tmp加上粘滞位,只允许写而不允许删除。这样,当黑客往/tmp写.socket文件时不允许删除。
3.6 禁止stop-‘A’键
在/etc/default/kbd中,改变或加入“KEYBOARD_ABORT=disable”此项防止启动后,按stop-A或L1-A得到ok提示符,使用启动盘可以进入单用户模式,防止黑客物理接触机器。但此项不禁止可以作为密码丢失时的应急处理。
3.7 密码设置配置
(1) 添加或编辑/etc/default/passwd文件如下入口:
PWMIN= 1 #密码可以被改变的最小时段。
(2) 添加或编辑/etc/default/passwd文件如下入口:
PWMAX= 13 #密码的最大生存周期。
(3) 添加或编辑/etc/default/passwd文件如下入口:
PWWARN= 4 #设定离用户密码过期的天数,当系统启动时提醒用户。
(4) 添加或编辑/etc/default/passwd文件如下入口:
PWLEN= 8 #设定最小用户密码长度为8位。
3.8 登陆的安全配置
3.8.1 防止远程的root登陆
解决方法:
添加或编辑/etc/default/login文件如下入口:
CONSOLE=/dev/console #这样root只能从/dev/console这个设备登陆。
3.8.2 纪录所有root的登陆情况
添加或编辑/etc/default/login文件如下入口:
SYSLOG= YES #syslog纪录root的登陆失败,成功的情况。
3.8.3 设置登陆会话超时时间
添加或编辑/etc/default/login文件如下入口:
TIMEOUT= 120
3.8.4 确定登陆需要密码验证
添加或编辑/etc/default/login文件如下入口:
PASSREQ= YES
参考脚本:
defloginparams.sh
3.9 设置屏蔽掩码和umask
(1)设置屏蔽掩码:
添加或编辑/etc/default/login文件如下入口:
LUMASK= 027 #这将设定标准掩码为:750,也可以将这行加到/etc/.login /etc/profile /etc/skel/local.cshrc /etc/skel/local.login /etc/skel/local.profile这些文件里。
(2)设置umask
确定root的umask是027或077
检查root的.profile
3.10 设置shell的环境变量
添加或编辑/etc/default/login文件如下入口:
ALTSHELL= YES
参考脚本:
defloginparams.sh
3.11 查是否每个用户都设置了密码
检查/etc/passwd和/etc/shadow,每个用户的密码栏是否为空。
3.12 编辑使用useradd的缺省配置,满足密码策略
编辑/etc/sadm/defadduser需要满足密码策略,例如:
defgroup=15
defgname=users
defparent=/export/home
defskel=/etc/skel
defshell=/usr/bin/ksh
definact=30
defexpire=
3.13 在所有path中,去掉所有”.”路径
检查所有缺省启动脚本和root启动脚本,在所有路径变量中删除“.”路径, 包括以下文件:
/.login
/etc/.login
/etc/default/login
/.cshrc
/etc/skel/local.cshrc
/etc/skel/local.login
/etc/skel/local.profile
/.profile
/etc/profile
3.14 使用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: root,httpadm,wspher 这样,只有sugroup组中的用户可以使用su,提升为超级用户 另外一个可行的方法是使用sudo来替代su。 4 网络安全配置 4.1 禁止所有不需要的服务 用grep -v “^#”/etc/inetd.conf命令来察看你当前没有注释的服务 # vi /etc/inetd.conf 在/etc/inetd.conf中注释掉左右不需要的服务,比如: name、shell、login、exec、comsat、talk、rusersd、printer、finger、uucp 所有以“r”开头的服务,对必须提供的服务采用tcpwapper来保护。 4.2 编译安装Tcp wapper 安装tcpd,编辑inetd.conf中的服务为: ftp stream tcp nowait root /usr/local/bin/tcpd in.ftpd telnet stream tcp nowait root /usr/local/bin/tcpd in.telnetd 4.3 Tcp_Wrappers 在默认情况下,Solaris允许所有的服务请求。用Tcp_Wrappers来保护服务器的安全,使其免受外部的攻击,比想像的要简单和轻松的多。 在/etc/hosts.deny 文件中加入 ALL:ALL以禁止所有计算机访问服务器,然后在/etc/hosts.allow 文件中加入允许访问服务器的计算机。这种做法是最安全的。 Tcp_Wrappers是由两个文件控制的,它们是/etc/hosts.allow 和 /etc/hosts.deny。 第一步 编辑/etc/hosts.deny 文件 # vi /etc/hosts.deny 加入下面这些行: ALL:ALL 这样做的目的是:所有的服务、访问位置,如果没有被明确的允许,也就是在/etc/hosts.allow 中找不到匹配的项,就是被禁止的。 第二步 编辑/etc/hosts.allow 文件 # vi /etc/hosts.allow 例:我们只希望允许同一个局域网的机器使用服务器的telnet功能,而禁止互联网上面的telnet服务请求,本地局域网由 202.39.154. 、202.39.153. 和202.39.152. 三个网段组成。在hosts.deny文件中,我们定义禁止所有机器请求所有服务: ALL:ALL。 在hosts.allow文件中,我们定义只允许局域网访问telnet功能: in.telnetd: 202.39.154. 202.39.153. 202.39.152. 这样,当非局域网的机器请求telnet服务时,就会被拒绝。而局域网的机器可以使用telnet服务。 4.4 启动时提供的服务(rc.x) 4.4.1 禁止所有不需要的服务 在rc.x目录中将不需要的服务改名,比如: # mv /etc/rc3.d/S92volmgt /etc/rc2.d/not_usedS92volmgt 以下服务应该禁止(根据需要自己决定): snmpdx autofs (Automounter) volmgt (Volume Deamon) lpsched (LP print service) nscd (Name Service Cache Daemon) Sendmail keyserv (Keyserv Deamon is only used if NIS+ or NFS are installed,if used start with –d option so that the defaults “nobody” key is not allowed) rpcbind提供远程呼叫,依靠远程系统的ip地址和远程用户的ID进行验证,这样很容易伪造和改变。 4.4.2 禁止所有DMI服务 禁止所有DMI服务: # mv /etc/rc3.d/S??dmi /etc/rc3.d/K??dmi /etc/init.d/init.dmi中启动的dmi服务有: /usr/lib/dmi/dmispd /usr/lib/dmi/snmpXdmid /etc/dmi/ciagent/ciinvoke 4.4.3 去掉mount系统的suid位 在/etc/rmmount.conf中加上: mount hsfs -o nosuid mount ufs -o nosuid 4.4.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 <<eof this only find .rhost: EOF cat ) | /bin/mailx -s "Content of .rhosts file audit report" yourmailBox 4.4.5 禁止使用.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 4.4.6 检查信任关系 检查/etc/hosts.equiv文件,确保为空。 4.5 网络接口调整和安全优化 4.5.1 /etc/rc2.d/S??inet参数调整 在/etc/rc2.d/S??inet中做如下参数调整: 缩短ARP的cache保存时间: ndd -set /dev/arp arp_cleanup_interval 60000 /* 1 min (default is 5 min)*/ 缩短ARP表中特定条目的保持时间: ndd -set /dev/ip ip_ire_flush_interval 60000 /* 1 min (default is 20 min)*/ 关闭echo广播来防止ping攻击 ndd -set /dev/ip ip_respond_to_echo_broadcast 0 # default is 1 关闭原路由寻址 ndd -set /dev/ip ip_forward_src_routed 0 # default is 1 禁止系统转发IP包 ndd -set /dev/ip ip_forwarding 0 # default is 1 禁止系统转发定向广播包 ndd -set /dev/ip ip_forward_directed_broadcasts 0 # default is 1 使系统忽略重定向IP包 ndd -set /dev/ip ip_ignore_redirect 1 # default is 0 使系统限制多宿主机 ndd -set /dev/ip ip_strict_dst_multihoming 1 # default is 0 再次确保系统关闭ICMP广播响应 ndd -set /dev/ip ip_respond_to_address_mask_broadcast=0 # default is 1 关闭系统对ICMP时戳请求的响应 ndd -set /dev/ip ip_ip_respond_to_timestamp=0 # default is 1 关闭系统对ICMP时戳广播的响应 ndd -set /dev/ip ip_ip_respond_to_timestamp_broadcast=0 # default is 1 禁止系统发送ICMP重定向包 ndd -set /dev/ip ip_send_redirects=0 # default is 1 4.5.2 改变TCP序列号产生参数 在/etc/default/inetinit中改变 TCP_STRONG_ISS=2 4.5.3 设置in.routed运行在静态路由模式 按如下步骤建立in.routed -q(静态模式): mv /usr/sbin/in.routed /usr/sbin/in.routed.orig 创建文件/usr/sbin/in.routed为以下内容: #! /bin/sh /usr/sbin/in.routed.orig –q 改变文件属性: chmod 0755 /usr/sbin/in.routed #动态的路由模式容易遭受到恶意的路由信息的亲篇和攻击,所以建议宁愿用静态路由,(路由的增加通过启动文件的route命令)也不建议用动态路由守护进程。 4.5.4 禁止路由功能 创建空文件notrouter: # touch /etc/notrouter 4.5.5 利用ip-filter ip-filter是Solaris系统的内核模块,可以完成简单包过滤 二 应用程序安全配置 1. 总体安全考虑 应用程序以非特权用户运行 定义应用程序属主 删除所有的samples chroot,改变进程的root目录 具体应用考虑 2. NFS服务 2.1 禁止nfs服务 杀掉如下NFS进程: lockd、nfsd、statd、mountd NFS是由/etc/dfs/dfstab文件控制,为了禁止NFS服务的后台程序 将/etc/rc2.d/S15nfs.server文件改名 K15nfs.server 将/etc/rc2.d/S73nfs.client文件改名 K13nfs.client /etc/dfs/dfstab 文件有几个选项 share –F nfs –o [rw/ro] /目录名 client端有读写权限, ro是client端只有读权限 [建议使用ro选项] 2.2 如必须使用,则设置nfs特殊tcp、udp端口 ndd -set /dev/tcp tcp_extra_priv_ports_add 2049(设置TCP端口) ndd -set /dev/udp udp_extra_priv_ports_add 2049(设置UDP端口) 2.3 打开nfs port monitoring功能 在/etc/system中加入: set nfssrv:nfs_portmon = 1 set nfs:nfs_portmon = 1 确定你的/etc/system文件的访问权限为644: # chmod 644 /etc/system 2.4 一些nfs相关的服务 解决方法: nfsd mountd rpc.boot in.rarpd rpld 3 NIS,NIS+ 3.1 去除NIS,NIS+ 建议不要运行NIS,NIS+服务,所以按一下步骤移除它: 在文件/etc/domainname里移除域名: 可以察看NIS大体的服务列表: # pkginfo |grep NIS # pkgrm system SUNWypr NIS Server for Solaris (root) system SUNWypu NIS Server for Solaris (usr) 3.2 移除NIS,NIS+,DNS Lookup 解决方法: 编辑/etc/nsswitch.conf如下: passwd: files group: files hosts: files networks: files protocols: files rpc: files ethers: files netmasks: files bootparams: files publickey: files netgroup: files automount: files aliases: files services: files sendmailvars: files 如果需要dns的话,可以再次修改这个文件。 4 Mail 4.1 停止绑定在25端口的sendmail服务 解决方法: 禁止sendmail服务,系统用户依然可以发信。含义是:sendmail仍然安装了,只是不要作为守护进程存在,你可以在sendmail.cf文件里限制系统的用户的权限。 # mv /etc/rc2.d/S88sendmail /etc/rc2.d/not_usedS88sendmail 4.2 注释所有的并行邮件别名 解决方法: 检查 /ect/aliases |可以并列。用#号注解。 4.3 限制sendmail的expn和vrfy两个命令来收集系统信息 解决方法: 在/etc/senmmail.cf文件中修改如下限制远程连接25端口使用expn和vrfy命令: # O PrivacyOptions=authwarnings,goaway Opgoaway # O PrivacyOptions=noexpn,novrfy,authwarnings O LogLevel=5 4.4 隐藏smtp版本信息 解决方法: 在/etc/mail/sendmail.cf文件里找到smtp版本信息,修改如下: # SMTP login message 4.5 禁止邮件转发 解决方法: 普通用户不可以选择转发者,而root可以通过/usr/local/forward/.forward.$u来控制邮件转发,修改/etc/sendmail.cf如下行: O ForwardPath=/usr/local/forward/.forward.$u 设置/usr/local/forward正确的权限。 4.6 接收邮件 解决方法: 如果真要在系统上接收外来的邮件(监听在25端口)。建议利用spam或smtpd/smtpfwdd来保证邮件服务的安全(加上anti-spam,安全配置)。 5 Ftp安全配置 5.1 安全FTP 解决方法: 建立或修改/etc/default/ftpd文件增加屏蔽码和ftp标志信息: UMASK= 077 BANNER="/bin/cat /etc/ftp-banner" 修改/etc/default/ftpd权限: chmod 644 /etc/default/ftpd 5.2 建立ftp标示信息 解决方法: 建立/etc/ftp-banner文件满足如下: 例如:This system is for authorized users only. Monitoring may occur 修改/etc/ftp-banner文件的权限: chmod 644 /etc/ftp-banner 5.3 在/etc/passwd文件中 ftp:x:30000:30000:Anonymous FTP:/ftp目录:/nosuchshell 5.4 在/etc/shadow文件中 ftp:NP:6445:::::: 5.5 FTP-server的配置文件/etc/ftpaccess class local real * 重定义真实用户为local class remote guest,anonymous * 重定义匿名用户为 remote limit local 100 Any /ftp目录/msgs/limit.local限制登录用户数 limit remote 100 Any / ftp目录/msgs/limit.remote 限制登录用户数 banner /ftp目录/msgs/msg.banner loginfails 2 重试次数 readme README* login readme README* cwd=* message /ftp目录/msgs/welcome.msg login local remote message /ftp目录/msgs/cwd.msg cwd=* remote compress yes local,remote tar yes remote,local log commands real log transfers anonymous,real,guest inbound,outbound shutdown /ftp目录/msgs/shutmsg 5.6 创建ftp banner 创建Banner文件 /etc/ftp-banner 5.7 创建/etc/ftpusers文件 把所有的系统账户加入到这个文件里: root daemon sys bin adm lp smtp uucp nuucp listen nobody noaccess news ingres audit admin sync nobody4 修改/etc/ftpuser文件的权限: # chmod 644 /etc/ftpusers 6 Telnet安全配置 6.1 防止telnet程序显示系统版本信息 解决方法: 移除/etc/default/telnetd文件里的信息:Banner=”” 假如/etc/default/telnetd文件不存在,按如下步骤操作: # touch /etc/default/telnetd # echo "BANNER=\"\"">> /etc/default/telnetd # chmod 444 /etc/default/telnetd 6.2 最好采用SSH代替Telnet 7 X-Windows 设置CDE为不接受任何XDMCP登陆连接 假如/usr/dt/config/Xaccess存在,则如下操作: cat </usr/dt/config/Xaccess # disable all XDMCP connections !* EOF 假如/etc/dt/config/Xaccess存在,则如下操作: cat </etc/dt/config/Xaccess # disable all XDMCP connections !* EOF 三 文件权限 1 删除所有不使用的suid文件 列出系统中所有 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/su chmod u+s /usr/bin/passwd chmod u+s /usr/bin/ps 2 删除所有不使用的sgid文件 列出系统中所有 suid 文件 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/sgid find / -type f \( -perm -2000 \) -print |cpio -pudm /opt/backup/sgid 删除前建立tar备份,不要删除sgid-files.tar!! cd /opt/backup; tar –cvpf sgid-files.tar /opt/backup/sgid/* rm –r /opt/backup/sgid 去除所有sgid 文件中的sgid 位 find / -type f \( -perm -2000 \) –exec chmod –s {} \; 再查一遍 find / -type f \( -perm –2000 \) –exec ls –al {} \; 对一些常用文件建立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 /etc下不应有组可写文件,去掉写权限 find /etc -type f \( -perm –20 \) –exec chmod g-w {} \; 4 删除/etc下所有用户可写文件 检查/etc目录下对用户可写文件: find /etc -type f\( -perm 2 \) | xargs ls –las 不需要用户的可写权限,修改如下: find /etc -type f\( -perm 2 \) | xargs chmod g-w 5 改变所有文件的rw-rw-rw权限为rw-r-r- 首先列出文件: find / -type f -perm 666 |xargs ls -al > perm-666-before-change.txt 改变权限: find / -type f -perm 666 |xargs chmod 644 find / -type f -perm 666 |xargs ls -al > perm-666-after-change.txt 6 改变rwxrwxrwx文件的权限 首先列出文件: find / -type f -perm 777 |xargs ls -al > perm-777-before-change.txt 改变权限: find / -type f -perm 777 |xargs chmod 755 find / -type f -perm 777 |xargs ls -al > perm-777-after-change.txt 7 找出系统可写的目录 解决方法: find / -type d\( -perm 2 \) 改变所需要的权限设置 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:root find /etc -type f -print | grep rc | egrep -v "skel|tty|mail|snmp|Mail" | xargs ls -al > rc-files-after-change.txt ls -al /etc/init.d > etc-init.d-before.change.txt chown root:root /etc/init.d ls -al /etc/init.d > etc-init.d-after-change.txt 经过这样的改变,所有的rcX.d里的脚本的文件属主都为root,所有的/etc/init.d目录里的脚本的文件属主文件组都是root了,为了防止特洛伊木马。 9 确保所有cron行为有记录 确定/etc/default/cron文件里有如下行: CRONLOG=YES 删除/var/spool/cron/crontabs 目录中除了root文件外所有文件。 10 检查utmp,utmpx的权限 检查/var/adm目录下的文件权限: find /var/adm -type f\( -perm 2 \) | xargs ls -las 修改文件: chmod 644 /var/adm/utmp 11 查找无用户文件 1) find / -type f -nouser > files-nouser-before-change 2) find / -type f -nouser | xargs chwon nobody:nobody 3) find / -type f -nouser > files-nouser-after-change 12 查找无组文件 1) find / -type f -nogroup > files-nogroup-before-change 2) find / -type f -nogroup | xargs chgrp nobody 3) find / -type f -nogroup > files-nogroup-after-change 13 改变/var/cron权限 chmod 700 /var/cron && chown root /var/cron && chgrp sys /var/cron 四 日志和监控 1 将cron logfiles的大小设为2M 修改/etc/cron.d/logchecker如下: LIMIT=4096 2 记录所有inetd服务 修改/etc/init.d/inetsvc文件如下: /usr/sbin/ifconfig -au netmask + broadcast + /usr/ bin/inetd -s –t 假如你运行了named,dhcpd,multicast,你必须作如上改动。 3 修改syslog.conf文件 编辑syslog.conf,增加 *.debug /var/adm/compass.messages #记录debug信息 4 创建/var/adm/loginlog来记录登陆失败信息 touch /var/adm/loginlog chmod 600 /var/adm/loginlog chown root /var/adm/loginlog chgrp sys /var/adm/loginlog 五 其他安全建议 1 安装tripwire tripwire是一个特洛伊木马检查程序,他工作在提供的二进制文件的md5码的数据库以及你的配置上,建议每6个小时运行一次tripwire。 2 IDS 建议安装运行snort工具来监测你的网络可能收到的如下攻击: - cgi-scan - portscans - virus 根据你的需要参看/root/config/snort.rules文件。 3 日志文件观察者(swatch) 建议安装运行swatch工具来监测你的日志文件,你可以在你的系统上启动多个监测进程,例如: - /var/adm/compass.messages - /var /adm/snort_portscan.log - /opt/AppServer/WebSphere/log/???? Swatch是一个用perl写的工具,所以你必须安装PERL MODULES。 4 设置启动标示 创建/etc/issue文件,添加需要的启动标示。