天下网吧 >> 网吧天地 >> 网吧技术 >> 网吧系统 >> 正文

构建安全可靠的Linux服务平台(上)

2008-4-8赛迪网佚名

  随着电脑技术日新月异的发展和各种各样网络应用的流行,网络操作系统在服务器领域里扮演了非常重要的角色。由于Windows操作系统的广泛应用,以及人们对其内部机制的深入剖析,导致利用其漏洞攻击服务器的黑客软件越来越多。于是,随着对安全问题的日益关注,另一操作系统——Linux出现在人们面前。

  Linux秉承Unix高端操作系统的血脉,其安全性、可靠性、高伸缩性的特点与生俱来。再加上Linux独创的源码开放模式,从 1989年其源代码出现在Internet上起,短短十几年间,来自世界各地的开发人员对其进行了不断地修改及完善,如今Linux已经逐渐成长为一个功能强大、可操作性强的网络操作系统。通过构建Linux服务器,可以架设Web服务器、Mail服务器、DNS服务器、DHCP服务器、FTP服务器、代理服务器及NFS服务器等;也可以用Linux作为防火墙接入,充当路由器等各种重要角色;或是开发基于Linux的入侵检测系统(IDS)、语音呼叫系统、桌面应用等。由此可见Linux的强大和重要,尤其是在服务器领域越来越多的应用平台建立在Linux系统架构上。随着应用范围不断扩大,Linux 必将受到来自世界各地黑客们的攻击,其安全性也越发显得重要。

  如何保证安全的最大化呢?量体裁衣,有的放矢,取舍得当是关键。现从以下几个方面加以详述。

  控制文件的属性和权限

  密切关注文件的属性和权限设置是保证主机文件系统完整性的至关紧要的操作。

  两种特殊的文件访问权限分别是SUID(八进制为4000)和SGID(八进制为2000)。设置这两种权限的文件,将使其它用户在执行它们时拥有所有者的权限。也就是说,如果一个设置为SUID的程序,即使是普通用户使用也是作为root来运行的。因此,SUID/SGID文件是安全的隐患。

  SUID和SGID攻击方式的预防:

  1.严格审查系统内的文件权限。可以找出系统内使用SUID/SGID的文件,列出清单保存,做到心中有数。命令如下:

  

[root#] find / -type f -perm +6000 -ls | less [root#] find / -type f -perm +6000 > Suid-Sgid.txt

  2.对于一部分程序必须设置为SUID的,可以让它们自成一组,集中管理。但是绝对不允许在用户的家目录下有SUID程序存在。

  3.确保重要的SUID脚本不可写。命令如下:

  

[root#] find / -perm -2 ! -type l -ls

  4.对于并非绝对需要被设置成SUID的程序,改变它们的访问权限或者卸载程序。如:

  

[root#] chmod -s [program]

  5.查找系统内所有不属于任何用户和组的文件。因为这些文件很容易被利用来获得入侵主机的权限,造成潜在的威胁。命令如下:

  

[root#] find / -nouser -o -nogroup

  6.善于使用lsattr和chattr这两个ext2/3的属性命令。本文将主要讨论a属性和i属性,因为这两个属性对于提高文件系统的安全性和保障文件系统的完整性有很大的好处。a属性(Append-only),系统只允许在这个文件之后追加数据,不允许任何进程覆盖或截断这个文件。如果目录具有这个属性,系统将只允许在这个目录下建立和修改文件,而不允许删除任何文件。i属性(Immutable),系统不允许对这个文件进行任何的修改。如果目录具有这个属性,那么任何进程只能修改目录之下的文件,不允许建立和删除文件。

  如果主机直接暴露在因特网或者位于其它危险(如其它非管理员亦可接触服务器)环境,有很多Shell账户或提供HTTP和FTP等网络服务,一般应该在安装配置完成后使用如下命令,便于保护这些重要目录:

  

[root#] chattr -R +i /bin /boot /etc /lib /sbin [root#] chattr -R +i /usr/bin /usr/include /usr/lib /usr/sbin [root#] chattr +a /var/log/messages /var/log/secure......

  如果很少对账户进行添加、变更或删除操作,把/home本身设置为Immutable属性也不会造成什么问题。

  在很多情况下,整个/usr目录树也应该具有不可改变属性。实际上,除了对/usr目录使用chattr -R +i /usr/命令外,还可以在/etc/fstab文件中使用ro选项,使/usr目录所在的分区以只读的方式加载。

  另外,把系统日志文件设置为只能添加属性(Append-only),将使入侵者无法擦除自己的踪迹,以便于执法人员取证、分析。

  文件系统的完整性检查

  完整性是安全系统的核心属性。管理员需要知道是否有文件被恶意改动过。攻击者可以用很多方法破坏文件系统,例如,可以利用错误配置获得权限,也可以修改文件植入特洛伊木马和病毒。Linux中常用如下工具进行校验检查。

  1.md5sum

  md5sum 命令可以用来创建长度为128位的文件指纹信息。通过md5sum -c命令可以反向检查文件是否被修改过。黑客进入到系统后,会用修改后的文件来取代系统上某些特定的文件,如netstat命令等。于是当使用 netstat -a命令查看系统状态时,不会显示系统攻击者存在的信息。攻击者还可能会替代所有可能泄露其存在的文件,一般来说包括:

  

/bin/ps、/bin/netstat、/bin/login、/bin/ls、

 /usr/bin/top、/usr/bin/passwd、/usr/bin/top、

 /sbin/portmap、/etc/xinetd.conf、/etc/services。

  这些文件都是替代的对象。由于这些文件已经被取代,那么简单地利用ls命令是查看不出这些文件有什么破绽的。因此你需要用md5sum工具在系统安装前期为这些文件做好指纹认证并保存,以备日后检测所用。

  2.RPM安装包

  如果使用的是基于RPM的安装包(Red Hat公司开发并包含在其Linux产品之中的多功能软件安装管理器,现有多种版本的Linux使用此管理器,如Red Hat、 TurboLinux),它可以用来建立、安装、查询、检验、升级和卸载独立的软件包。一个完整的RPM包包括压缩文件和包信息。当使用RPM安装软件时,RPM为每个被安装的文件向数据库中添加信息,包括MD5校验和、文件大小、文件类型、拥有者、组和权限模式。当RPM以-verify标志运行时,将把初始文件的值与当前安装的文件进行比较并报告差异。例如,下面是对一个被黑站点的运行结果:

  

# rpm -qf /bin/ps(或# rpm -qf /usr/bin/top 查看命令隶属哪个RPM包) procps.2.0.2-2   # rpm -V procps(-V MD5检验) SM5..UGT /bin/ps SM5..UGT /usr/bin/top(有消息表示此文件已被修改)

  由上可以看出,攻击者已经入侵到系统中,并且用自己的ps及top命令替代了原来系统中的命令,从而使管理员看不到其运行的进程。RPM的使用方法很多,具体操作方法参见man rpm文档

  3.Tripwire

  Tripwire是一个用来检测整个系统是否存在恶意代码和检验文件完整性的有用工具。它采用MD5算法生成128位的“指纹”,通过命令自动保存系统快照,再产生相应的MD5数值以供日后比较判断。

  使用Tripwire可以定义哪些文件/目录需要被检验。一般默认设置能满足大多数的要求。该工具运行在四种模式下:数据库生成模式、数据库更新模式、文件完整性检查模式、互动式数据库更新模式。当初始化数据库生成的时候,它生成对现有文件各种信息的数据库文件。为预防以后系统文件或者配置文件被意外地改变、替换或删除,它将每天基于原始数据库对现有文件进行比较,以发现哪些文件被更改、是否有系统入侵等意外事件发生。当然,如果系统中的配置文件或程序被更改,则需要再次生成数据库文件,保持最新的系统快照。此软件功能强大,使用方便。具体的安装和使用,可以通过Google搜索获得。

  有效控制服务器运行的后台进程

  服务进程(Daemon)是Linux操作系统的核心程序,是外界与主机互相交互的主要途径,同时也是连接因特网的大门。正因为运行了不同的服务进程,Linux系统才能够提供不同的服务,网络才变得丰富多彩。一个称职的管理员必须掌握以下几个要领:

  1. 要对自己的服务器有足够的了解,清楚每台服务器的所有后台进程,了解哪台主机运行了哪些服务,开放了哪些端口。我们可以用以下方法得到服务器的配置:

  

# ntsysv (或 setup) (列出所有的服务清单,可以选择安装/卸载) # less /etc/services (列出所有服务运行的端口) # ps -auxf > daemons.txt(推荐使用,把所有后台打印列表) # cd /var/run/|ls -al(查看启动服务的进程号文件)

  2. 对每个服务都要做好软件版本号的登记归档,密切注意各服务软件的漏洞,尽快升级或打补丁。如bind软件在8.X存在安全漏洞,应该尽快升级到9.X。

  3.尤其要注意的是,新手们总是认为把服务运行起来工作就已经做完了,其实这是不对的。当服务进程运行起来后,配置文件的优化处理相当重要。比如, Apache的配置文件中,KeepAlive、MaxKeepAliveRequests、KeepAliveTimeout、 StarServers、MinSpareServers、MaxSpareServers、MaxClients、 MaxRequestsPerChild对机器性能的影响都非常重要。所以,需要常去网上论坛了解最新信息和发展动态,从而更好地守住每个进出的要口。

  同时还要特别注意以下几方面:

  配置独立的专用服务器,增加负荷能力,降低风险

  Linux 作为优秀的网络操作平台,完全有能力胜任运行多个服务器。比如,它可以作为Web服务器,同时也可以充当FTP服务器和Mail服务器。这样做的好处在于能够降低投资成本,但是不安全因素也会随之相应增加。因此,需要在投资成本与安全最大化之间权衡。假如电脑连接因特网,提供多种服务,且每天都要提供大量访问量时,建议一“不要把所有的鸡蛋放在同一个篮子里”。把各个服务进程运行在不同的主机上,成为专用的Web服务器,FTP服务器或Mail服务器,共同分担风险。建议二把各种服务分类管理。在FTP服务器和Mail服务器访问量不大时,也可以把它们统一管理。

  取消所有非必要的服务,尽量做到干净,减少后门

  把Linux作为专用服务器是个明智的举措。例如,希望Linux成为强大的Web服务器,可以取消系统内所有非必要的服务,只开启必要服务。这样做可以尽量减少后门,降低隐患,而且可以合理分配系统资源,提高整机性能。以下是几个不常用的服务:

  1. fingerd(finger服务器)报告指定用户的个人信息,包括用户名、真实姓名、shell、目录和联系方式,它将使系统暴露在不受欢迎的情报收集活动下,应避免启动此服务。

  2. R服务(rshd、rlogin、rwhod、rexec)提供各种级别的命令,它们可以在远程主机上运行或与远程主机交互,在封闭的网络环境中登录而不再要求输入用户名和口令,相当方便。然而在公共服务器上就会暴露问题,导致安全威胁。

  3. X-Window从严格的意义上说,是Linux窗口管理器的扩展,而不是重要组成部分。从目前的GNOME、KDE这两种主流图形服务器来看,体积越来越臃肿,耗存越来越大,一些基于图形界面的软件在使用上也存在不少问题。虽然开发人员不会放弃对它的完善,但对于服务器来说,它的存在价值几乎没有。因此,在安装服务器时,务必考虑是否真的需要图形管理界面。

  4. 其它服务,如amd、arpwatch、atd、dhcpd、innd、nntpd、talkd、lpd、named、routed、snmpd、 xfs、wuftpd、tftpd、telnet、ypbind、yppasswd、ypserv,既然是Web服务器,都可以取消或卸载掉。

  同理,如果是作为FTP服务器运行,只需FTP进程和必要的程序。

  用安全系数高的服务替代正在运行的服务进程

  对于一些必要的服务器,如前所说的Web服务器,理论上只需要Apache的进程就可以工作了。但是如果管理员需要远程控制放在运营中心的主机呢?或者用户需要通过FTP上传更新资料呢?Telnet、wu-ftp这些服务的安全性太低,这时,就需要启用安全级别高的服务来替代这些服务程序。以下为几个需要替代的进程:

  1.用OpenSSH替代Telnet

  推荐使用开放软件OpenSSH(Secure Shell),这是一个安全的登录系统,且不受加密方法的出口限制,适用于替代Telnet、rlogin、rsh、rcp、rdist。另外, OpenSSH也可以用来在两台计算机间建立一条加密信道供其它不安全软件使用。OpenSSH支持多种算法,包括BlowFish、Triple DES、IDEA、RSA。目前支持SSH的客户端软件不少,推荐使用Putty和Filezilla。关于服务器和软件的安装使用,请参见相关文章,在此不再详述。

  2.用Vsftpd替代wu-ftpd、tftpd(基本的FTP服务)、ncftpd(匿名服务)

  如果想要一个优秀的FTP软件,建议使用Vsftpd。Vsftpd(Very Secure)是一个非常值得信赖的FTP软件。除了与生俱来的高安全性外,在ASCⅡ传输模式下的速度是wu-ftpd的两倍,在千兆以太网的下载速度可达86Mb/s;在稳定性方面,Vsftpd可以在单机(非集群)上支持4000~15000个以上的并发用户同时连接。除此以外,还可以建立虚拟 FTP服务器,支持非系统用户的登录下载,同时也可以给不同的用户分配不同的权限,保证服务的安全最大化。现在世界上很多著名的公司都在使用 Vsftpd,如Red Hat、GNU、GNOME、SuSe、KDE、OpenBSD等。具体安装和配置请见参考资料。

  3.用Qmail替代Sendmail

  Sendmail 将来仍然是主要的SMTP服务器,网络上有关Sendmail服务器的配置资料随处可见。但事实上由于Sendmail代码的复杂性,使得很多人对其配置一知半解。多数情况下,新手们往往只要能够让Sendmail启动起来、能收发邮件就觉得万事大吉了。这样的配置其实漏洞太多,难以保证安全性。所以, Qmail是个更好的选择。当然,要想真正建立一个功能强大、运行稳定的邮件服务器,掌握其灵活的配置,认真阅读How-to手册和FAQ是很有必要的。

  使用tcpwrappers控制文件

  在没有设置防火墙之前,可以通过一种简单而可靠的机制——tcpwrappers来加强网络访问控制。tcpwrappers从两个文件中读取网络访问控制规则:

  

/etc/hosts.allow 指定授权主机 /etc/hosts.deny 指定非授权主机

  配置文件的编写规则非常简单,一般是:

  

services_list : client_list [ : shell_command ]

  1. 如果client及services满足hosts.allow里面的条目,那么访问将被允许。

  2. 如果client及services满足hosts.deny里面的条目,那么访问将被禁止。

  3. 如果以上两条都不满足,访问将被允许。

  4. 如果访问控制文件不存在,将被当作空规则文件处理。所以可以通过删除访问控制文件来关闭访问限制。

  其中services_list可以列出一个或几个服务进程名,也可以使用通配符;client_list可以是IP地址、主机名或者网络号,也可以使用通配符。

  services_list有两个特殊用法的符号:ALL和EXCEPT。ALL表示所有的进程,而EXCEPT表示排除某个进程。比如,ALL EXCEPT in.fingerd表示除了in.fingerd外所有的进程。

  client_list可以使用如下通配符:

  1. “.”号在字符串前匹配所有后面部分和所提供字符串一样的主机名。比如:.xssz.net可以匹配www.xssz.net或mail.xssz.net。

  2. “.”号在字符串后匹配以所提供字符串开头的地址,比如,10.44.可以匹配所有10.44.xxx.xxx的地址。

  3. 可以使用n.n.n.n/m.m.m.m的格式来表示net/mask,比如,10.44.72.0/255.255.254.0匹配从10.44.72.0到10.44.73.255的地址。

  4. 以“/”号开头的字符串将被看作一个文件处理,它匹配所有在这个文件中列出的主机名或者地址。

  5. “@”开头的串将被当作一个NIS组的名字。

  6. ALL表示所有的主机,LOCAL匹配所有机器名中不带“.”号的主机,EXCEPT表示排除某些主机。

  比如,hosts.allow中有一行,ALL: .edu.cn EXCEPT example.edu.cn表示允许除了主机名叫example.edu.cn 以外的所有.edu.cn域内的机器访问所有的服务。而在hosts.deny中,ALL EXCEPT in.fingerd:192.168.0.0/255.255.255.0则表示禁止192.168.0.1到192.168.0.254的机器访问除了in.fingerd以外的服务。

欢迎访问最专业的网吧论坛,无盘论坛,网吧经营,网咖管理,网吧专业论坛https://bbs.txwb.com

关注天下网吧微信,了解网吧网咖经营管理,安装维护:


本文来源:赛迪网 作者:佚名

声明
本文来源地址:0
声明:本站所发表的文章、评论及图片仅代表作者本人观点,与本站立场无关。若文章侵犯了您的相关权益,请及时与我们联系,我们会及时处理,感谢您对本站的支持!联系Email:support@txwb.com.,本站所有有注明来源为天下网吧或天下网吧论坛的原创作品,各位转载时请注明来源链接!
天下网吧·网吧天下
  • 本周热门
  • 本月热门
  • 阅读排行