| 您的位置:首页 > 文档 > 解决方案 > |
文章分类热门文章 |
安全安装REDHAT并介绍Bastille(下)创建:2005-11-07 00:00:00 作者:Unlinux 来自: http://www.Unlinux.com 86123检查和备份 把系统备份在两盘磁带中,一盘放在安全的地方(最好是刻盘)。 在这阶段,我们需要对安装的文件使用安全的hashing(散列)算法进行完整性检查, 初始化它的数据库并运行合格的检查以便来监视以后的改变。如果可能,把主数据 库存放在离线的另外一台机器上,或者写入一次性媒质上。 对于数据完整性的我们需要那些项目? --下面的意思是RPM可以用来报告文件的改变(但本人有点对这句英文不理解, 所以只好贴上原文,惭愧): The RPM commands also be used to report changes to rpm installed files "poor man's tripwire": for file in $(rpm -qa); do rpm -V $file; done > rpm_changes 它可以打印出一列表,指示Size, MD5 hash, Links, Time (mtime), Device, User, Group, Mode (permissions)等是否改变: S.5....T c /etc/host.conf S.5....T c /etc/hosts.allow S.5....T c /etc/motd S.5....T c /etc/securetty S.5....T c /etc/services S.5....T c /etc/localtime S.5....T c /etc/nsswitch.conf .M...... /usr/sbin/rpcinfo 你可以存储一份拷贝并在以后作为对比的基准。 --Tripwire [5]:此程序有商业和免费两种版本。REDHAT X86是唯一正式使用 商业信息的的LINUX: --免费的版本如果使用适当可以工作的不错,但存在一些BUG,提供源 代码,在很大的磁盘上出现过崩溃现象。 --商业版本相对来说比较贵,报告也相对来说比较冗长(你需要使用过滤 的脚本来查找你所需的东西),提供多个配置样板文件,相对于免费版本较稳定。 可以在UNIX和NT平台上很好的运行,通过一些政策化和配置化的文件提高安全性。 但售后支持不是很好(即使你付了不少钱,呵呵)。 --两个版本在定义方针化规则时都不支持正常表达式,如你不能为 "/home/*/www/cgi-bin"下的文件特定一规则。 --也可以使用PGP,通过对文件的签名来得到保护的作用,并写一有效脚本来 检查有效正确的签名。但PGP的不好之处是对文件的权限,连接,字节和修改的 日期等改变不能进行检验。 --MD5签证也可以作为文件效验,如果要更好的保护MD5,最好使用PGP签名或者 使用其他方法加密。 --在OPENBSD中可以使用mtree工具。或许这个工具不久会在LINUX上搭带。 --Aide是一新的GPL效验工具,可能不久的将来将会代替tripwire. 下面是使用免费Tripwire v1.2的例子: --在x86存在RPM包,在SPARC中的RPM已经被编译了,下载[5]并安装RPM工具包。 --安装后Tripwire两进制程序在/usr/sbin目录下,配置文件位于/etc/tw.config, 并且其通过/etc/cron.daily/tripwire.verify由cron进行每天的检测。数据库存放 在/var/spool/tripwire下,也可以使用MAN查看使用方法:tripwire(8), twconvert(8), tw.config(5). --在安装后,需要保存系统的初始化状态("initial state"),可以使用下面的方法: /usr/sbin/tripwire -initialise 上面的命令会在/var/spool/tripwire下建立一新的数据库。 --要通知Tripwire你所改变的文件或者整个目录,可以使用下面的方法: /usr/sbin/tripwire -update [path] --可以由cron或者手工来每天进行系统检查: /etc/cron.daily/tripwire.verify --使用带"-i 2"的选项来运行Tripwire可以增加其检查速度(此选项关闭了 一个检验算法snerfu,但SHA1和MDS5还是继续使用)。 --为了增强安全性和自动检查多个系统,你可以把Tripwire存放在一绝对安全 的主机,拷贝Tripwire和它的数据库到安全主机并使用SSH远程的进行维护。在效验 某一主机后,删除目标机上的数据库,这可以让攻击者不轻易发现你在使用tripwire 进行系统检验。另外,立即更新tripwire数据库,这样可以在连续运行的情况下 知道与原来的不同之处。你可以查看下面的 Trip_linux.sh 的脚本。如果使用这个脚本,你需要使用下面的方法来关闭本地检测功能: mv /etc/cron.daily/tripwire.verify /etc/cron.daily/.tripwire.verify --拷贝一份备份的配置文件和数据库到软盘或者一次性介质。 8,安装,测试和更严格控制应用程序 综述 --根据服务器所需的相应功能,而采用相应的应用程序如ftpd,BIND,proxy等。 WEB SERVER和防火墙更特别,需要很复杂和小心的配置,下面是server/application 需要遵守的规则列表: --对于重要应用程序考虑安装在独立的分区,这分区在安装和测试阶段 需要安装为读写状态,但在这些过程后最好需要把属性改变为只读属性。 --在应用程序启动或者之前使用umask设置严格的属性,如(022)。 --检查应用程序是否以最低权限的非ROOT用户运行?其本身的密码是否 "禁用"并对其设置/dev/null类的SHELL。如果确实需要使用其本身密码来运行, 是不是把其密码的标准设置为最小为8个字符并是字母,数字和符号混合的类型。 --如果某应用程序以ROOT的身份,绑定一个低点的端口,要清楚其是否 可以立即派生(fork)出一没有特权的用户来最小化减低危险程序? --应用程序有关的所有文件的权限是否设置正确,即四否只有应用程序 可以读写,检查是否有全局可读写的文件,检查并正确设置。 --检查应用程序写LOG记录的权限是否安全?检查应用程序是否把有关的 密码写入LOG记录(这样的事情很多)。 --是否可以把应用程序设置CHROOT环境? FTP服务(ftpd) --如果你使用Washington University的wu-ftpd,它的LOG记录和访问控制及 其他特征有一定的独特程序,但必须要参考一些以前的BUG(请参看http://www.cert.org/ 站点的关于wu-ftpd的安全建议:advisories CA-93:06, CA-94:07, CA-95:16和 Auscert AA-97.03 和 AA-1999.02). 必须使用V2.6.0以上的版本。 --在/etc/ftpusers(相当于黑名单)中加入系统帐号,使这些系统帐号不能 用来FTP(如你要求ROOT不允许FTP,你把"root"加入到/etc/ftpusers文件中)。 在一个全新的系统中,你可以使用下面的方法把所有系统帐号加入到ftpusers: awk -F: '{print $1}' /etc/passwd > /etc/ftpusers --可以先把全部帐号加入到/etc/ftpusers中,在把需要FTP的帐号挑选出来, 在进行相应设置(必须在ftpusers去掉相应的帐号)。或者使用下面的技巧:对于 那些没有FTP访问的用户,给他们一个不是标准的SHELL(如tcsh),并不要把这个 新的SHELL加入到/etc/shells中去,FTP的访问就会被拒绝,如果想要正常工作就 必须在/etc/shells里面加入相应的SHELL。 --FTP可以使用IP地址或者主机名来控制,请看/etc/hosts.allow和/etc/hosts.deny. --如果需要匿名FTP,必须非常小心,你必须使用chroot环境,Bastille可以为 你设置这方面的环境。 --如果使用正常的"user ftp",推荐使用chroot。 --把FTP的数据存放在一个独立的分区并把起安装为nosuid. DNS 服务 使用最新版本的BIND(Berkeley Internet Name Server),请查看下面的站点: http://www.isc.org/products/BIND 是哟功能8.2.2-P5或者更新的版本,在zone transfers文件中限制次级的IP地址 (在/etc/named.conf)。 可以使用Bastille来设置DNS服务器,它会自动设置下面的配置: --建立一"dns"用户和组并使用"named -u dns"来启动DNS,这样BIND可以派生 (fork)和改变身份为dns用户。必须提供dns用户可以读BIND配置文件的权利( 然而它们原属于ROOT)。 --把BIND设置在chrooted的环境中(/home/dns)。 发现并修补故障(Troubleshooting): --使用nslookup或者dig来检查服务器的配置结果。 --客户端:如果你有DNS客户端问题,检查/etc/nsswitch.conf和/etc/resolv.conf 文件,并使用带有"-d2"选项的nslookup来获得调试信息。 --服务器端:使用debug选项"-d"来启动named守护程序,并阅读控制台和LOG 信息,代表性的LOG可以在syslog的"daemon"部分找到。 --下面站点的工具对于测试激活的守护程序有非常大的帮助: http://www.uniplus.ch/direct/testtool/dnstest.html --要从name服务中获得统计信息,可以使用下面的方法: kill -ABRT `cat /etc/named.pid` 其中的统计文件会存放在/usr/tmp/named.stats文件中。 --最后对named发送HUP信号,使其重新读取新的配置文件: kill -HUP `cat /etc/named.pid` HTTP服务 如果WEB的内容很少改变,把内容存储在CD-ROM中,这样可以很简单的防止黑客很 常见的喜好"篡改站点"。因为HTTPD服务有缓存页面的能力,必须保证其访问速度 不依靠CD-ROM的速度。 把"simple read-only"内容的服务从电子商务的服务器中分离出来。 请查看http://www.ciac.org/公告http://ciac.llnl.gov/ciac/bulletins/j-042.shtml, 其中对怎样更好的设置INTERNET WEB服务器做了很好的描述。 使用ServerAdmin设置WEBMASTER的电子邮件,在APACHE设置中不启用UserDir( 除非用户确实允许从他们的HOME目录发布页面),可以把ServerSignature设置值为 NO,这样可以避免泄露APACHE版本信息。不起用/manual/alias,除非你确实需要 发布APACHE的文档信息。不要启动server-info, server-status 或 perl-status 设置。 RedHat 下apache其设置如下(在RH6.1上是apache 1.3.9): --配置文件存放在/etc/httpd/conf目录下 --HTML的目录根部为/home/httpd/html --使用nobody运行apache --服务器状态(Server-stats) 和服务器信息(server-info)连接是关闭的 ------------------------------------------------ 运行系统 运行整个系统前的准备 考虑安装一脚本来检查重要守护程序的运行,安装 http://www.boran.com/security/sp/linux/monitor_processes.pl脚本文件并 把其加入到cron文件中: ## Check that important processes are running during office hours: ## [If you run 7x24, modify accordingly] 0,30 8-19 * * 1-5 /secure/monitor_processes.pl inetd sshd httpd 在应用程序安装和测试阶段,如果数据分区必须安装为读写状态,现在考虑是否 安装为只读状态。 重新初始化tripwire(或者类似的完整性检查软件)。 把系统备份两个磁带中去(即两份),一份妥善保管。 在系统上运行网络扫描器,保证只有一些自己必须的服务在运行。可以使用商业 工具ISS或者免费免费工具Nessus,nmap或者Satan来进行相应的检查,打印出结果 并保存结果。 如果可能,尽量使用多个人员来进行最后的测试,以防止忘记某些东西进行设置。 可以测试下面的工作--什么运行了?什么禁止了?检查console/log条目,你的 系统按照你的设想在工作吗,在系统开头几天经常检查LOG。 开始运转系统 详细测试,检查LOG条目,系统是否正常运行的检查? 对所有应用程序进行详细测试,通过不同的人员和不同的观点和不同的网络来 进行测试。 常规维护 下面的行为必须是每月或者每天,星期或者每小时维护,其频率依据系统的 安全程度来决定: --检查所有新出补丁的情况,更新必须的补丁,注意每个内核补丁( 在没有应用程序的机器上测试),安装一些软件确实需要的补丁,因为大多数 守护程序在主机上是关闭的。 --检查所有错误和不寻常的活动LOG记录:/var/log/* 和所有的应用程序LOG。 --写一脚本程序用于报告:重要系统PING不通,一些重要守护程序崩溃。 --经常运行tripwire(或者其他类似完整性检查)。 --订阅一些新的漏洞和安全信息的MAILLIST,可以在 http://www.cert.org/;http://www.ciac.org/;http://www.securityfocus.com 站点订阅。 ------------------------------------------------------------- 附加注意信息 上面的文章用于一些系统,当然每一个安全管理员有自己的方式来配置, 也必须要考虑每一个站点的不同来安全配置自己的站点 --RedHat提供一个自动安装的设备,并提供了一安装说明的文本,可以 很好的提示用户来安装系统,可以在下面的站点找到类似的说明: http://www.redhat.com/mirrors/LDP/HOWTO/KickStart-HOWTO.html --Mandrake:Mandrake是一个完全兼容RED HAT的LINUX发行版本,但其中 有自己独特的地方: --它提供更好的安装向导,有很好的GUI界面可以使安装更加 直观。 --ROOT的密码必须是8位的长度(应该指的是7.0的版本)。 --Mandrake提供MSEC工具包(Mandrake Security)允许你为 系统设置安全级别,但MSEC有些有趣的地方: 要改变安全级别,运行/et/security/msec/init.sh X,默认状态 X的级别是3,当我们把其转变为4的级别后重新启动 ,系统会询问一运行 级别的数字,如果输入3,系统会停止在那里知道一个关于找不到运行级别错误为止, 并且所有其他的TTYS将不可使用。 --MSEC:init.sh可以使用"custom"参数来运行,这样系统会提示一系列 安全问题并允许你想对什么样的安全条目进行安装。注意这个参数的运行会不允许 ROOT通过串行来进行登录,如果你确实需要通过ROOT来登录,你就在/etc/securetty 中加入ttyS0条目。 --Mandrake的硬件适应性:它不支持Sun SuperSPARCs,但支持UltraSPARC 版本已经是BETA版了,另外支持Compaq Alpha BETA版也以支持。 --如果发现某些工具包没有安装,可以在/mnt/cdrom/Mandrake/RPMS找到 工具包,并使用rpm -i进行安装。 --Mandrake提供一个非常漂亮的GUI工具--darkxconf:可以列出所有服务 并可以停止和继续运行服务。还可以adduserdrake --增加用户,diskdarke一个 非常优秀的磁盘分区GUI工具,drakesec允许低/中/高安全级别。 --命令行工具chkconfig可以用来启用/关闭服务,可以使用下面的方法来列 表服务:chkconfig --list ,如chkconfig httpd on 。 --LOG记录 --除一主要SYSLOG记录外,你需要保留一份本地的拷贝-以防止syslog 服务器不正常关闭或者被遭到拒绝服务攻击而不产生记录,如果你使用本地LOG 必须确保/var是一个独立的文件系统,这是为了避免目录被填满而是系统提高 停止工作。 --使用性能更高的syslog守护程序来代替原来syslog: syslog-ng: http://www.balabit.hu/products/syslog-ng (提供TCP连接,内容过滤,加密,认证等功能) secure syslog: http://www.core-sdi.com/english/slogging/ssyslog.html Nsyslogd: coombs.anu.edu.au/~avalon/nsyslog.html (TCP连接和SSL功能) --入侵检测: --经常使用定制的脚本和工具如logcheck 和swatch 来对LOG文件 进行详细的分析。 --也可以使用下面的perl脚本: http://www.boran.com/security/sp/linux/monitor_socket.pl 来对一系列socket进行监听并通过MAIL来通知管理员,但不需要从inetd 来运行。 --Snort是一个基于网络入侵检测很好的工具 ------------------------------------------------------------------ Bastille可以在下面的站点里下载: http://bastille-linux.sourceforge.net/ 转载自:http://www.unlinux.com/doc/solution/20051107/8605.html 【评论】 【加入收藏夹】 【大 中 小】 【打印】 【关闭】 ※ 相关链接
|