操作系统的安全问题是信息安全领域最重要和最基本的问题之一。随着近几年国内互联网技术和行业的迅猛发展,采用Linux网络操作系统作为服务器的用户也越来越多。Linux面临着前所未有的发展机遇,同时Linux也面临着越来越多的安全隐患。作为一个开放式系统,互联网上有大量的Linux版本的开源软件产品和工具。这既方便于满足用户使用需求,也给黑客提供了更多的途径来攻击服务器,甚至盗取服务器上的机密信息。因此,详细分析Linux系统的安全机制,找出它可能存在的安全隐患,给出相应的安全策略和保护措施是十分必要的。
Linux操作系统提供了基本的安全机制。本文以Red Hat Enterprise Linux Server release 6.7为例介绍这些安全机制的基本原理及实施方法,主要包括以下内容:
- 系统帐号和密码管理
- Linux网络安全
- 文件系统的安全
- 系统日志的保存
- 内核更新及安全补丁安装
1. 系统帐号和密码管理
账户和密码可以说是操作系统安全的第一道防线。其中账户用来确认系统访问者的身份,密码可以验证系统访问者是否有权使用此账户。密码泄露就像是房门钥匙被人窃取一样危险。系统一旦被入侵,不只对使用者账户本身有影响,系统内的所有资料和文档都有被窃取和损坏的风险,从而造成巨大的损失。所以,管理员应该采取必要的技术手段强制用户使用强密码并定期更改,定期验证系统中账号合法性,及时删除不必要的账户、防止超级用户被篡改等,保证系统用户账号和密码的安全。
1.1. 及时删除或禁用无用账户
Linux系统中所有的账户都存放在/etc/passwd文件中。系统管理员可以定期监控/etc/passwd文件,验证系统中活动账户的合法性,及时删除或禁用系统中不必要或不再使用的账户。此类账户主要分为以下两种情况。
- 某些服务安装时默认创建的执行账户,比如ftp、news、postfix、apache、squid等。
- 无人使用或者无业务需求的账户。
此类账户最好做删除处理。如下示例所示:
如果因为特殊原因需保留账户,可以锁定账户或者修改账户登录shell为/sbin/nologin。如下示例所示:
1.2. 设置密码复杂度策略
现在的计算机的计算能力越来越强,弱密码很容易被破解。Linux有自定义密码复杂度策略的机制,可以从以下几个方面加强管理。
- 最短密码长度为8。
- 包含一个字符或非字符(数字、标点或特殊字符)。
- 密码中不允许包含账户。
- 每隔90天修改一次密码。
- 密码最短生命周期设置为1,防止恶意更改密码。
- 8次修改密码不可以重复并且加密保存。
- 连续5次输入错误密码,锁定账户。
- 初次登录强制修改密码。
具体实现方式,如以下示例所示:
1.3. 保护shadow密码文件
Linux中账户密码叫做影子文件,存放在/etc/shadow里面。如果在/etc/pam.d/system-auth中设置了加密存储,那在/etc/shadow中看到的将是加密后的密码信息。虽然经过了加密处理,但这些加密信息仍然可以借助一些密码破解程序进行强制破解。John the Ripper就是这样的一个密码破解程序,该程序的源代码可以从http://www.openwall.com/john/网站上下载。经过实验,通过John程序可以轻易的破解shadow中的加密密码。所以系统管理员应保护好shadow文件,正常情况下应只有root用户拥有该文件的访问权限。此外,管理员不该在有其他人员在场的情况下随便打开shadow文件,以免其中的内容被人窃取。
1.4. 防止root账户被篡改
在Linux系统中root账户是超级管理员账户。它可以执行所有的系统的命令,也具有系统中最高的权限。而且Linux系统中只有一个root超级账户。但是在Linux系统中,用户是由UID来区分,而不是账户名。如果把一个普通账户的UID修改为0,即root账户的UID,则这个普通账户也将获得root相同的超级管理员权限。如果这种账户,没有经过正常的审批流程,或者不是系统管理员设置,这种账户很有可能是非法入侵者更改的。所谓管理员,应及时发现这种非法账户,并作相应的处理。
2. Linux网络安全
相比于其它的操作系统,Linux操作系统更加安全和稳定,所以经常被用作网络应用服务器。但是由于程序代码的缺陷的难以避免,这些安装在Linux系统上的网络应用程序往往会存在着各种漏洞,而入侵者则是利用这些漏洞进行网络攻击,进入系统窃取数据、破坏系统或者使系统无法提供正常服务等等。针对入侵者进行网络攻击的常用手段,及早发现系统中的网络安全漏洞并执行相应的防范措施非常重要。
2.1. ping入侵
ping是入侵者确认服务器是否开机的最快、最常用的方法。ping命令会发出一个ICMP echo请求,服务器接收到请求后会返回一个ICMP应答。Linux服务器管理员可限制服务器禁止其它用户Ping。同时又保证Linux服务器又可以Ping其它服务器。
2.2. 端口安全
TCP/IP的各种Linux应用服务基本上都是采用服务器/客户端的工作模式,这些服务在服务器端会监听一些固定的服务端口,接受来自客户端的请求。而入侵者往往会利用各种端口扫描工具对目标主机的端口进行探测和扫描。获得目标主机上的服务和端口列表以后,入侵者就可以针对不同服务的漏洞进行相应的攻击。为了阻止入侵者对主机端口的扫描。管理员可以采取以下措施:
- 关闭不必要的应用服务;
- 修改应用服务的默认端口。例如更改FTP服务的端口为31,那么即使入侵者获得该端口号,也无法确定该端口号对应的是什么服务;
- 开启防火墙,限制用户访问相应的服务端口。这样,即使应用服务的端口泄漏,非法访问也会被挡在防火墙之外。
2.3. 拒绝攻击
拒绝攻击是一种消耗服务器可用资源的攻击方式,这些资源包括进程数、磁盘占用、CPU时间或者网络带宽等,被攻击的服务器将会出现资源被不断消耗的情况,最终丧失应用服务的能力。在Linux系统中提供了一种限制用户资源使用的技术手段,管理员可以通过设置/etc/security/limits.conf的配置参数,限制用户对内存空间、CPU时间以及进程数等资源的使用。防止负荷过载造成服务器宕机。用户可以执行命令ulimit -a查看自己的的资源限制情况。
2.4. 加强Xinetd的安全
Xinetd是Linux系统一个传统的网络服务守护进程,它可以同时监听多个制定的端口,在接收到用户请求时,根据用户请求端口的不同,启动相应的网络服务进程来处理这些用户请求。因此,Xinetd也常被称为“超级服务器”。像Telnet、rlogin、rcp、rsh等不安全网络服务就是通过Xinetd进行启动的。为了减少系统潜在漏洞,应该关闭Xinetd中无需使用的网络服务。
可在xinetd的配置文件进行服务的禁用。
如果所有的Xinetd服务都已经禁用,那么就没有必要再运行Xinetd。要禁止Xinetd启动运行,可执行:chkconfig –level 345 xinetd off。
3. 文件系统的安全
Linux文件系统中的文件是数据的集合,文件系统不仅包含着文件中的数据而且还有文件系统的结构,所有Linux 用户和程序看到的文件、目录、软连接及文件保护信息等都存储在其中。Linux文件系统的权限必须进行严格的控制,一个配置文件上的配置错误,比如不正确的文件权限,就可能会导致整个系统受到危害。
3.1. 全局可读/写文件
所谓全局可读写文件,是指所有用户都有权限查看和修改的文件。如果这些文件中保存有重要的机密信息,如用户口令,那么将可能会为系统带来严重的后果。因为入侵者在获得本地用户权限之后,往往会去搜索系统中包含有某些关键信息的全球可读文件以扩大他们的访问权限。用户用find命令可以搜索全球可读写文件#FormatImgID_20#。
管理员应定期使用find命令检查系统中的全局可读/写文件。对于一些保存有重要信息的文件是不应该设置全球可读/写的。
3.2. 无宿主的文件管理
正常情况下,系统中的每一个文件都会有自己的文件所有者和属组。如果系统中出现没有所有者或属组的文件,那么很可能是卸载程序后遗留或是由入侵者留下的。这些文件对于系统来说,是一个潜在的风险,所以应该及时把这些文件找出来,删除或者更改访问权限。
Linux的设备以文件的形式存放在/dev/目录下,所以这些文件的权限控制同样非常重要。例如,IDE硬盘在Linux中对应的设备文件为/dev/hdx,如果这些文件的权限被设置为全球可读,那么所有用户都可以通过一些命令读取硬盘中所有的内容。用户可以通过mount命令,查找出所有与目前挂载的文件系统相关的设备文件。此外,对于像/dev/console、/dev/dsp以及/dev/tty*等的设备文件也同样需要重点关注,并定期检查其权限设置。
3.4. 硬盘分区
恶意占用磁盘空间是造成拒绝攻击的一种形式。由于Linux应用系统在运行过程中都会产生新的数据或文件。如果磁盘空间不足,会造成这些新的数据或文件无法保存。最后导致服务挂起,达到拒绝服务的目的。磁盘分区的合理规划,可以有效的防止这种恶意攻击。
- 利用Linux的磁盘配额管理,限制每个用户的磁盘空间大小。
- 重要的文件系统挂载到单独的磁盘分区上。例如:/; /boot/; /var/; /hone/; /tmp/。
- 划分单独的系统分区保存应用数据。
3.5. 设置grub密码
如果能接触到服务器主机,就算不知道root密码,攻击者可以重启机器通过单用户模式重置root密码。那么服务器中的数据就会完全暴露给攻击者。为了防止这种情况,可以考虑在grub上设置密码。Linux每次重启引导或更改grub配置时都要求输入正确的密码。
首先要生成MD5加密的密码信息。
3.6. 限制su切换
通过su命令,普通用户可以切换到其他用户的环境包括超级管理员root账户的环境。可以通过限制su命令执行权限的方式降低普通用户获得管理员权限的风险。需要su权限的用户,可以单独放到一个group里,例如wheel。
4. 系统日志的保存
日志对于安全来说非常重要。日志里面记录了系统每天发生的各种各样的事情。可以通过日志来检查系统发生错误的原因,或者系统遭受攻击时留下的痕迹。日志的功能主要有:审计和监测。日志也可以实时的监测系统状态,监测和追踪入侵者。
4.1. 账户登录记录
使用who命令可以查看当前已经登录操作系统的用户信息,这些信息包括用户名、登陆时间、客户端的IP地址等。管理员可以随时查看登录系统的用户是否合法、客户端的IP地址是否合法。
Linux系统的用户登录历史信息被分别保存在/var/log/wtmp和/var/log/btmp文件中,其中/var/log/wtmp保存了用户成功登录的历史信息,而/var/log/btmp则保存了用户登录失败的历史信息。这两个文件不是ASCII文件,所以必须分别要通过last和lastb命令来查看。
4.2. secure日志中的安全信息
该日志文件记录与安全相关的信息。用户验证、su切换以及与用户管理相关的日志信息都会写到/var/log/secure文件中。打开/etc/syslog.conf配置文件可以看到此日志文件的设置,如“authpriv.* /var/log/secure”。如果系统有非法用户登录,可以通过查看此日志文件跟踪非法用户的信息。
4.3. message日志中的安全信息
messages 日志是核心系统日志文件。它包含了系统启动时的引导消息,以及系统运行时的其他状态消息。IO 错误、网络错误和其他系统错误都会记录到这个文件中。其他信息,比如某个人的身份切换为 root,也在这里列出。如果服务正在运行,比如 DHCP 服务器,您可以在 messages 文件中观察它的活动。通常,/var/log/messages 是您在做故障诊断时首先要查看的文件。
4.4. cron日志中的安全信息
该日志文件记录crontab守护进程crond所派生的子进程的动作,前面加上用户、登录时间和PID,以及派生出的进程的动作。CMD的一个动作是cron派生出一个调度进程的常见情况。REPLACE(替换)动作记录用户对它的cron文件的更新,该文件列出了要周期性执行的任务调度。RELOAD动作在REPLACE动作后不久发生,这意味着cron注意到一个用户的cron文件被更新而cron需要把它重新装入内存。该文件可能会查到一些反常的情况。
4.5. history日志中的安全信息
默认情况下,在每个用户的主目录下都会生成一个.bash_history的日志文件,在该文件中保存了用户输入的所有命令,管理员可以通过该文件查看某个用户登陆系统后进行了什么操作。
4.6. 日志文件的保存
日志文件是追踪黑客行为和取证的重要线索,一个有经验的黑客在入侵完系统后一般都会清除日志文件的内容,抹去自己的入侵痕迹。所以为了提供日志的安全性,可以定期对系统中重要的日志文件进行备份,并通过FTP或其他网络手段把备份文件上传到其他的备份服务器上保存,以作为日后跟踪和分析黑客行为的依据。
5. 内核更新及安全补丁安装
系统补丁,就是通过安装相应的补丁软件,补充系统中的漏洞,把“漏水”的地方补上,杜绝同类型病毒的入侵。作为系统管理员,及时发现并安装新的补丁对保证系统安全非常重要。对于redhat,用户可以在RHN上进行注册,注册后可以获得Red Hat最新的软件包和补丁。如果有公司内部的补丁源服务器,可以在目录/etc/yum.repos.d/添加相应的补丁源配置文件。用户可以执行yum update 命令升级安装补丁包。
6. 结语
要保证Linux系统的安全,系统管理员必须综合利用它提供的各种安全工具和技术,制定合理有效的安全策略。有效的安全策略应在安全成本、安全效益和本单位实际的安全需求之间实现平衡,在实际应用中制定严格的安全管理措施,按照安全管理措施和安全策略进行系统和安全的管理,才能保证系统的高可用性。
Linux系统安全工作是防守和进攻的博弈,是保证信息安全,工作顺利开展的奠基石。及时,准确的审视自己信息化工作的弱点,审视自己信息平台的漏洞和问题,才能在 这场信息安全战争中,处于先机,立于不败之地。只有做到自身的安全,才能立足本职,保证公司业务稳健的运行,这是信息时代开展工作的第一步。
作者:周忠波
来源:51CTO