SUSE由于其出色的性能和对安全较好的控制,吸引了很多级用户,目前在国内开始有大量的关键应用。但这并不代表SUSE在使用中就是安全的,SUSE里还有很多安全细节要注意。本文就SUSE中的这些安全细节进行逐一介绍,为大家揭开每一个需要注意的地方。
一、补丁、及其他
1、补丁
每个补丁的更新都意味着这是一个安全漏洞,或是有其他严重的功能问题,但如果更新补丁则又可能导致系统的一些异常,甚至引起一些服务的瘫痪。所以对于补丁的更新要慎重处理。从实际的角度来说,有4种做法:
1)是在刚装完系统之后立刻更新补丁,然后再上应用。
2)是通过外围防护手段来保护,可以用、之类的手段。
3)是在测试机上更新补丁。不过值得注意的是,有些补丁带来的问题是隐性的,可能今天明天没问题,但后天出了问题,所以,观察的时间需要久一些。
4)、如果你的SUSE服务器比较多,也可以通过共享或者内部的、HTTP服务来完成。但FTP、HTTP又会带来另外的安全风险。
SUSE 的补丁升级,需要去下载Novell的新RPM。RPM包的安装会有先有后,不过多数情况下,RPM会根据其依赖关系来处理。另外,Novell也有一些在特殊情况下的提示,比如内核更新、C运行库等。Novell公司提供了一个强大的工具YaST,不过遗憾的是,YaST自身也不安全,有在线升级不安全临时文件建立漏洞。
加固方法:输入yast,在software中选择online update。
2、SSH
SUSE上默认安装了OpenSSH,OpenSSH是目前比较流行并且免费的加密连接工具,但OpenSSH的低版本也存在不少安全漏洞,所以最好还是去http://www.openssh.org下载最新版本的。在升级到最新版本之后,SSH仍有很多需要安全加固工作要做。比如限制那些账户的登录、更改默认端口、指定可访问的网络等等,限于篇幅本文对此不做更详细的介绍。但至少有一点,是你必须要做的:将协议版本修改为2。因为版本1的安全问题实在太严重了,甚至可以截获密码。
加固方法:
vi /etc/ssh/ssh_config
修改protocol的值为2。
3、系统性能审计
对于运维人员来说,需要经常监控系统的性能情况,SUSE提供的sysstat就是一个检测系统状态的工具,比如比如CPU利用率、I/O等。 sysstat默认每10分钟收集一次系统数据,可以用sar命令查看。sysstat首先会建立一个正常的性能曲线,当这个基线建立完毕以后,任何超出基线的活动都会给出提示。例如密码猜测、或者在业务高峰期以外的事件会导致CPU利用率过高,从而偏离正常的基线。注意sysstat收集的数据默认是在系统上存放一周,一周之后会被cron任务自动移除,可在/var/log/sa/目录下来维护收集的数据。但是默认安装的服务器版本是不包括 sysstat包的,除非安装的时候选择了完全安装。
加固方法:安装sysstat,并使用sar命令。
4、防火墙
SuSEfirewall2是SUSE下面的包过滤防火墙,可以允许、拒绝数据的进出。默认是安装并且激活的,而且默认不允许任何服务,要开放服务就必须明确的启用(比如上面提到的SSH)。
加固方法:
在YAST里,Center--#Security and Users--#Firewall进行防火墙策略调整。
更细粒度的策略配置,可以在YAST Center--#System#--/etc/sysconfig editor-Network/Firewall/SuSEfirewall2,也可直接编辑/etc/sysconfig/SuSEfirewall2文件。
5、系统安全定期检查脚本seccheck
seccheck是一个系统安全检查脚本,可以每天、每周、每月的定期生成报告,并且邮件发送。不过他在定期运行的时候比较占用资源,所以要选择在非业务高峰期来做。
加固方法:YAST Center-System-#/etc/sysconfig-System/Security/Seccheck selection
6、SUSE的安全应用框架AppArmor
AppArmor和SuSEfirewall2相比,他的特点在于对应用级的保护,可以管理应用的文件和目录访问等更细颗粒的操作,是一个白名单的机制,即指定哪些行为才是允许的,其他的拒绝,这样可以更好的隐藏内部系统。比如你的系统存在一个漏洞,但由于对其的操作没有受到白名单允许,所以操作会被拒绝。
加固方法:YAST Center-Novell AppArmor可以调整细节策略、查看报告。如果不熟悉的话,AppArmor还内设了一个向导功能。
二、最小化xinetd
1、关闭标准服务
SUSE使用xinetd,他比inetd更优秀也更方便使用。SUSE默认情况下是关闭所有服务的,在启用之后,就可以配置xinetd的服务了。安全的做法也应该如此,先关闭所有服务,然后只启用必须的服务。
加固方法:运行chkconfig查看所有服务的开启状态,对不需要的服务进行关闭。
2、可信网络接入
对的访问应该受到控制,所以需要用SuSEfirewall2或者其他的措施来控制,只允许那些可信的网络接入。
加固方法:
vi /etc/sysconfig/SuSEfirewall2中的第10项配置。也可以在yast Center#System#/etc/sysconfig editor进行配置。
3、telnet
如果不是有特别的理由,不要使用telnet,telnet使用的是不加密的网络协议,这就意味着从你的账号到你传输的数据,都可以被人窃听,严重的可以通过会话劫持控制你的系统。所以这里还是强烈建议使用SSH,虽然SSH也不是那么的安全。
加固方法:
打开的命令是chkconfig telnet on。
关闭的命令是chkconfig telnet off。
4、FTP
同样,在没有充分理由的情况下,不要使用,尤其是匿名FTP。和telnet一样,FTP也不加密,也可以被人窃听或者会话劫持。SSH则提供了SCP和SFTP,可以取代FTP。要注意的是,有时候FTP可能是因为某些应用绑定的,比如我多次见到的WEB上传通道,所以你必须要用这种匿名 FTP。如果必须要用FTP,那还是要做一些控制,要注意的一点是,FTP的目录应该受到控制,最好能有自己的分区。在SUSE上,vsftpd默认是不安装的。
加固方法:
打开的命令是chkconfig vsftpd。
关闭命令是chkconfig vsftpd off。
5、rlogin/rsh/rcp
所有r系列的命令都应该被关闭。他们除了可以被窃听之外,在验证机制上也存在问题,并且还有其他的安全漏洞,比如缓冲区溢出、任意命令执行等。建议还是用SSH来取代。
加固方法:
打开命令是
chkconfig rexec on
chkconfig rlogin on
chkconfig rsh on
关闭他们:
chkconfig rexec off
chkconfig rlogin off
chkconfig rsh off
6、TFTP
TFTP一般用在无盘工作站, X-terminals等情况下。或者其他网络设备的配置数据可以利用它复制,实现备份功能。当然,在这里,没有特殊原因,我们仍然建议你禁用。TFTP在SUSE上也不是默认安装的。
关闭命令chkconfig tftp off
7、IMAP
只有邮件服务器才会用到IMAP,一些邮件客户端(比如Eudora、Netscape Mail和Kmail)需要使用IMAP来检索远程邮件。
加固方法:关闭服务的命令
chkconfig cyrus off或chkconfig imap off。
8、POP
这是一个收邮件的服务,作为服务器有收取邮件的需要吗?如果没有,同样也应关闭。
加固方法:chkconfig qpopper off或chkconfig cyrus off。
七、系统的管理、授权、认证
1、在PAM配置文件里移除.rhosts支持
.rhosts定义了哪些计算机和用户可以不用提供口令就在本地计算机上执行远程命令,很容易被攻击者利用。使用.rhosts是对用户访问控制规则的破坏,尽量关闭。如果有特殊原因,必须要使用,那就需要一些预防措施。永远不要在.rhosts里使用+通配符。.rhosts必须指定特定的可信任用户名,比如trustedhost DB1,而不是trustedhost。这种在配置HA的时候常见。要避免信任关系之外的主机,而且或者其他安全设备应该阻止外部的 rlogin/rsh/rcp访问。最后,还要确保.rhost文件只有所有者可读。例如文件权限600。
2、/etc/ftpusers
/etc/ftpusers的列表里定义了哪些用户不允许使用系统的,一般来说,应该只有普通用户可以使用FTP,而不是system这种类型的账户。当然,root用户永远都不应该使用FTP方式直接传输文件。
SUSE提供了一个netcfg的包,预填充了不该使用FTP的账户。
3、 防止X Server在tcp6000上监听
X Server在TCP6000上监听,接受来自其他客户端的请求。但是,X Server使用了一个相对不安全的身份验证协议,攻击者可以未授权访问到本地X Server上。使用"-nolisten tcp" 方式可以取消X Server在TCP6000上默认监听。
4、限制用户使用at/cron
cron.allow、 at.allow定义了谁可以使用crontab、at命令在预定的时间运行作业。在很多系统上,只有系统管理员有这种能力。即使某个用户不在 cron.allow里面,用户仍然可以运行cron作业。cron.allow控制的是:crontab命令调度的权限、修改cron作业的权限。注意:不要修改/etc/at.deny和/etc/cron.deny文件,除非你的确了解他们,这两个文件里都有合理的默认内容。如果对at和cron 必须加以控制,创建/etc/at.allow和/etc/cron.allow文件,增加适当的用户。
5、限制crontab文件的权限
系统的crontab文件只能由cron守护进程(运行超级用户权限)和crontab命令(set-UID为root)访问。允许未授权的用户读取修改crontab,可以让用户获得权限提升。
6、配置xinetd的访问控制
可使用简单的基于IP的访问控制,限制对xinted的非法连接。现在比较流行的工具是PortSentry,可以用于监视那些试图访问未使用端口的行为。然后再使用系统防火墙SuSEfirewall2来控制。
7、限制root登录到系统控制台
root直接登录到系统控制台是不允许的,除非特别情况。在其他时候,管理员应该通过无特权的账户并使用授权机制,比如su、sudo来获取额外的特权。这些机制至少提供了审计的线索。/etc/securtty让你可以规定root可从哪个tty登录。 /etc/securtty列出来的都是可以登录的,注释、不存在的都是不允许root登录的。
8、设置LILO/GRUB密码
大多数的系统,默认在引导时,有装载提示,这让攻击者破坏正常的引导变得很容易。对他设置密码,这样在试图修改LILO或GRUB的时候,就需要验证,当然,密码要够强壮。
方法
A、如果你有/etc/lilo.conf 文件
在/etc/lilo.conf前面添加:
password=
以root执行命令:
chown root:root /etc/lilo.conf
chmod 600 /etc/lilo.conf
B、如果是/etc/grub.conf文件
在/etc/grub.conf取消password 的注释。
以root执行命令:
chown root:root /etc/grub.conf
chmod 600 /etc/grub.conf
9、对单用户模式验证
在一些Linux上你可以在LILO模式下键入linux single进入单用户模式,或者在GRUB的引导编辑菜单。这就带来风险,进入系统的认证应该始终需要root级别的访问,防止攻击者物理访问系统。 SUSE默认禁止这种进入方式,但是作为检查来说,还是需要检查一下。如果被改动的话,要搞清楚原因并恢复。8和9这两个项目都为了解决物理/启动的安全问题,也可以考虑设置只从主硬盘启动,或者设置BIOS密码。
10、限制客户端请求特权端口
设置:NFS忽略来自客户端的低于1024的源端口访问,这不会妨碍到正常的NFS操作,但可以阻止一些使用工具软件攻击的人。其配置文件在/etc/exports里。
11、syslog的消息接收
你的服务器是日志服务器吗?需要从网络上、其他主机上接收日志吗?如果是肯定的,启用日志系统的远程消息接受。默认情况下的系统日志的守护进程是 syslogd,不在udp514上监听来自其他系统的日志消息(Solaris相反,默认是接受的。)成立一个独立的日志服务器来记录一个或多个日志,是比较推荐的安全做法。但是,如果你不是日志服务器的话,就不应该打开udp514的监听,因为这些信息的传递没有任何认证机制。攻击者也可以利用此端口发起攻击,或者不停的发送日志消息填满你的日志系统,这样以后的攻击就不会被记录到了。
在syslog-ng.conf.in里,把下面这行加上#注释掉
#udp(ip("0.0.0.0") port(514))
九、杀毒
在有些系统上,比如邮件、文件服务器,主要是给windows用户使用的,应该有来保护。平台下的杀毒软件有:
Sophos http://www.sophos.com/ 商业软件
NAI Virus Scan 商业软件
McAfee http://www.mcafee.com/ 商业软件
ClamAV http://www.clamav.net/ 开源软件
f-prot Antivirus 商业软件
f-prot Antivirus http://www.f-prot.com 商业软件
Trend Micro 商业软件
Computer Associates InoculateIT http://www.cai.com/ 商业软件
十、其他
1、对于危险文件创建符号链接
/root/.rhosts, /root/.shosts, /etc/hosts.equiv等文件的访问控制很薄弱,我们在第七章里已经讨论过了,攻击者会经常针对这些漏洞进行攻击,把他们链接到/dev/null,意味着任何数据都会被简单的抛弃。
可以使用这个脚本:
for FILE in /root/.rhosts /root/.shosts /etc/hosts.equiv \
/etc/shosts.equiv; do
rm -f $FILE
ln -s /dev/null $FILE
done
2、打开TCP SYN Cookie的保护
SYN攻击是一种拒绝服务攻击,目的在于消耗系统资源。这个攻击是由于TCP连接握手协议的漏洞,对方发送SYN信息,然后不再回应。这样的攻击就使得系统与数百或者上千的连接保持半开状态。是一个非常简单的攻击方法。
3、LILO/GRUB安全
给LILO和GRUB加上一个i的属性,这样他既不能删除也不能修改,可以有效地防止配置文件发生任何变化(不管是意外或者其他原因)。如果想要修改,必须用chattr -i命令。
chattr +i /etc/lilo.conf
chattr +i /boot/grub/menu.lst
4、配置sudo
sudo的是一个文件包,它允许管理员授权给用户做一些特权,这些特权超出了用户的权限,比如重启web服务。我们举个例子,因为你的web服务有 bug或者不断的出现故障,那你可能需要不断地修改web的配置文件来让找出问题原因。这时候如果你要用su - root的话就会非常繁琐,因为你只是在改完配置文件之后,重启一下web服务而已。这时候sudo就派上用场了,它允许管理员授权给该用户权利来重启 web服务。sudo安装之后,使用visudo来配置而不是vi配置文件,因为visudo有错误检查功能。
5、删除所有的编译器和汇编程序
在安全上,C编译器会构成对系统可信的威胁。编译器应该安装在开发系统的机器上,而不是一个生产应用系统上。这里只是提醒注意检查。检查这些:gcc、gcc3、gcc3-c++、 gcc3-g77、gcc3-java、gcc3-objc、gcc-c++、gcc-chill、 gcc-g77、gcc-java、gcc-objc、bin86、dev86、nasm。