定制linux系统:量身定制安全的Linux系统服务平台

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

控制文件属性和权限

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

        两种特殊文件访问权限分别是SUID( 8进制为4000)和SGID( 8进制为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/ /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产品的中多功能软件Software安装管理器现有多种版本Linux使用此管理器如Red Hat、 TurboLinux)它可以用来建立、安装、查询、检验、升级和卸载独立软件Software包个完整RPM包包括压缩文件和包信息当使用RPM安装软件Software时RPM为每个被安装文件向数据库中添加信息包括MD5校验和、文件大小、文件类型、拥有者、组和权限模式当RPM以-very标志运行时将把文件值和当前安装文件进行比较并报告差异例如下面是对个被黑站点运行结果:

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

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

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

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

# ntsysv (或 up) (列出所有服务清单可以选择安装/卸载)

# less /etc/services (列出所有服务运行端口)

# ps -auxf > daemons.txt(推荐使用把所有后台打印列表)

# cd /var/run/|ls -al(查看启动服务进程号文件)

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

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

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

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

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

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

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

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

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

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

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

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

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

        如果想要个优秀FTP软件Software建议使用VsftpdVsftpd(Very Secure)是个非常值得信赖FTP软件Software除了和生俱来高安全性外在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和EXCEPTALL表示所有进程而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以外服务

防火墙选用和配置

        前面介绍了tcpwrappers详细应用但是对管理员而言只有经过Internet考验才能真正得到直接有效磨炼和提高如何分辨和抵挡 Internet上形形色色信息呢?仅仅 tcpwrappers是不够关键是防火墙选用和配置配置高效防火墙是管理员要掌握十分重要而且非常有效必修课在此防火墙功能和类型就不介绍了最主要是防火墙构建要量身定制应从企业自身状况和需求特点来考虑所需要防火墙解决方案区别规模、区别类型企业其网络保护要求也存在明显差异防火墙是个重要话题在这里限于篇幅不可能详细分析每种配置有兴趣朋友可以详见参考资料http://linux-firewall-tools.com/linux/faq/index3.html这是个很不错主题

入侵检测系统

      对攻击者来说端口扫描是入侵主机必备工作可以用端口扫描扫描服务器所有端口来收集有用信息如哪些端口打开、哪些端口关闭、提供服务版本、操作系统版本等下面介绍几种对付端口扫描工具

1. PortSentry

        PortSentry是个被设计成实时地发现端口扫描并对端口扫描快速作出反应检测工具旦发现端口扫描PortSentry做出反应有:

(1)通过syslog给出个日志消息;

(2)自动地把对服务器进行端口扫描主机加到tcp wrappers/etc/hosts.deny文件中;

(3)本地主机会自动把所有信息流都重定向到个不存在主机;

(4)本地主机用包过滤把所有数据包(来自对其进行端口扫描主机)都过滤掉

        该软件Software安装和使用可按照源码包里手册进行也可以参考http://www.linuxsecurity.com/tips/tip-23.html中介绍但是这里下载链接已不能使用读者可以去rpmfind.net查找下载简单地介绍下配置和启动步骤:

(1)配置/usr/psionic/portsentry/portsentry.conf文件

/usr/psionic/portsentry/portsentry.conf是PortSentry主要配置文件可以设置需要监听端口、需要禁止和监控IP地址等可以参看PortSentryREADME.文件以获取更多信息

(2)配置portsentry.ignore文件

在portsentry.ignore文件中设置希望PortSentry忽略主机这个文件至少要包括localhost(127.0.0.1)和本地界面(lo)IP

(3)最好改变文件默认权限:

#chmod 600 /usr/psionic/portsentry/portsentry.conf

#chmod 600 /usr/psionic/portsentry/portsentry.ignore

(4)启动PortSentry

PortSentry可以配置在6个区别模式下运行但每次启动时只能在种模式下运行这些模式是:

◆ portsentry -tcp(基本端口绑定TCP模式)

◆ portsentry -udp 基本端口绑定UDP 模式)

◆ portsentry -stcp(秘密TCP扫描检测)

◆ portsentry -atcp(高级TCP秘密扫描检测)

◆ portsentry -sudp(秘密UDP扫描检测)

◆ portsentry -audp(高级秘密UDP扫描检测)

推荐使用最后两种模式检测建立启动脚本:

# vi /etc/init.d/portsentry

/usr/local/portsentry/portsentry sudp

/usr/local/portsentry/portsentry audp

# chmod a+x ./portsentry(建立启动脚本)

# cd /etc/rc.d/rc3.d/ ; ln -s ../init.d/portsentry S60portsentry(建立软链接启动)

2. chkrootkit

       另个有用工具是chkrootkitchkrootkit是设计用来检查许多广为人知rootkit(组包括常用木马套件以方便 cracker攻入主机时, 在受害主机上顺利地编译和安装特洛伊木马)在chkrootkit网站WebSite上会公布最新rootkit列表

        配置chkrookit非常简单:先从http://www.chkrootkit.com下载源代码解开软件Software包在文件被解开路径里敲入make完成后chkrootkit就随时侯命了下面是在机器上chkrootkit个输出例子:

# ./chkrootkit

Checking `su'... not infected

Checking `config'... not infected

Checking `inetd'... not tested

Checking `inetdconf'... not found

Checking `identd'... not infected

Checking `init'... not infected

Checking `killall'... not infected

Checking `login'... not infected

Checking `ls'... not infected

Checking `lsof'... not infected

Checking `mail'... not infected

Checking `mingetty'... not infected

Checking `netstat'... not infected

Checking `named'... not infected

Checking `passwd'... not infected

[...]

       由上可以看到系统中重要些命令并没有被改变chkrootkit是个很不错实用工具它可以进步让我们放心:机器目前是安全

3.secheck

        个人推荐个比较好检测工具secheck,这个软件Software安装简单检测范围广记录文件条目简明资料详细它可以检测开放端口列表、登录用户、磁盘空间情况;检查UID和GID为0非root用户、弱口令用户、正在运行系统进程、su root用户;检测有SUID和SGID标识命令以及相关password、shadow、xinetd.conf、.rhosts文件变化等建议配合crontab做定时检查,命令如下(每隔小时做次检查):

00 * * * * /usr/local/etc/secheck/secheck

可以从http://twtelecom.dl.sourceforge.net/secheck/secheck-0.03.tgz下载感受

灾难恢复

        尽管已经采用了许多安全措施来保护主机稳定运行但是遇到些意外情况如停电、硬件故障或地震等仍有可能发生系统崩溃事件要想在最短时间内恢复系统必须事先做好备份工作

       在进行备份的前首先要选择合适备份策略包括何时需要备份以及出现故障时进行恢复方式通常使用备份方式有 3种:

1.完全备份

        每隔定时间就对系统进行次全面备份这样在备份间隔期间出现数据丢失等问题可以使用上备份数据恢复到前次备份时数据状况

2.增量备份

       首先进行次完全备份然后每隔个较短时间进行次备份但仅备份在这个期间更改内容这样旦发生数据丢失首先恢复到前个完全备份然后按日期逐个恢复每天备份就能恢复到前情况这种备份思路方法比较经济

3.累计备份

       这种备份思路方法和增量备份相似首先每月进行次完全备份然后备份从上次进行完全备份后更改全部数据文件旦发生数据丢失使用个完全备份和个累计备份就可以恢复故障以前状态累计备份只需两次恢复因此它恢复工作相对简单

备份内容 工作量 恢复步骤 恢复速度 优缺点

完全备份 全部内容 大次操作 很快 占用空间大恢复快

增量备份 每次修改后单个内容 小很快 多次操作 中 空间小恢复麻烦

累计备份 每次修改后所有内容 中快 2次操作 快 空间较小恢复快

       增量备份和累计备份都能以比较经济方式对系统进行备份如果系统数据更新不是太频繁可以选用累计备份如果系统数据更新太快使每个备份周期后几次累计备份数据量相当大这时候可以考虑增量备份或混用累计备份和增量备份方式或者缩短备份周期下面是个有效备份方式供参考

假设备份介质为支持热插拔硬盘挂接在/backup目录下:

# tar zcvf /backup/bp_full.tar.gz /*(先做个完全备份)

# find / -mtime -7 -pr > /tmp/filelist(找出7天内修改过文件)

# tar -c -T /tmp/filelist -f /backup/bp_add.tar.gz(每隔7天做增量备份)

其它建议和窍门技巧

1.用密码保护单用户模式

# vi /etc/lilo.conf

restricted

password="I am admin"

2.修改/etc/inittab文件

# ca::ctrlaltdel:/sbin/shutdown -t3 -r now

#表示取消Alt+Ctrl+Delete重启机器

3.删除登录信息(不显示内核版本主机名发行版本号及些后台进程版本号)这样可以从定程度上防止别有用心探测

# cat /dev/null > /etc/issue

# cat /dev/null > /etc/issue.net

# cat /dev/null > /etc/motd

4.设置密码属性包括有效时间(-e)、失效时间、警告时间(-w)等修改缺省密码长度

# vi /etc/login.defs

PASS_MAX_DAYS 99999(设置密码有效期限)

PASS_MIN_DAYS 0(设置修改密码最少时间段)

PASS_MIN_LEN 5(修改密码设置长度)

PASS_WARN_AGE 7(修改改变密码告警时间)

修改为:

PASS_MAX_DAYS 30  (30天后必须重新设置)

PASS_MIN_LEN   8  (密码长度不得少于8位)

5.默认账号管理查看/etc/passwd 文件删除多余账号检查有没有除root外UID、GID为0其它非法用户

6.如果正在接手个新服务器那么对原先配置必须有深刻了解要删除些旧系统账户应注意以下问题:

(1) 删除用户和其home目录

# userdel -r good

(2) 删除用户未接收邮件

# rm /var/spool/mail/good

(3) 删除由此用户在后台执行

# ps -aux|grep "good"

# kill PID

(4) 删除crontab 任务

# crontab -l good

# crontab -d good

7.应该取消普通用户控制台访问权限比如shutdown、reboot、halt等命令

# rm -f /etc/security/console.apps/*

*表示要注销如halt、shutdown

8.修改/etc/profile文件中“HISTFILESIZE”和“HISTSIZE”行确定所有用户.bash_history文件中可以保存旧命令条数编辑profile文件(vi /etc/profile)把下面这行改为:

HISTFILESIZE=30

HISTSIZE=30

表示每个用户.bash_history文件只可以保存30条旧命令

9.编辑.bash_logout文件

# vi /etc/skel/.bash_logou(添加下面这行)

# rm -f $HOME/.bash_history

这样当用户每次注销时.bash_history文件自动被删除


Tags:  linux文件系统 linux系统安装 linux系统 定制linux系统

延伸阅读

最新评论

发表评论