Linux系统维护人员的必备参考书

本书讲述了linux安全的方方面面,而且以一问一答的方式介绍,思路清晰。文中提供了很
多有益的安全提示,是Linux系统维护人员的必备参考书。经过本书,你能了解到linux安
全的总体概念,从系统安全到应用安全,从单机安全到网络安全。但安全问题是一个不断变
化不断更新的过程而不是一个解决方案,因此本书只是提到当时为人所发现的安全问题的介
绍,新出现的安全问题可参考该书网站的更新和网上的安全警告。linux

第一章    linux安全问题概述
    粘着位(Sticky bit)
若是用户对目录有写权限,则能够删除其中的文件和子目录,即便该用户不是这些文件的所
有者,并且也没有读或写许可。粘着位出现执行许可的位置上,用t表示,设置了该位后,
其它用户就不以删除不属于他的文件和目录。可是该目录下的目录不继承该权限,要再设置
才可以使用。
# chmod 1770 xxxweb

    文件属性
chattr命令修改
lsattr命令列出文件属性算法

文件属性定义
A    不要更新atime文件,当在笔记本电脑或NFS上限制磁盘I/0流量时,颇有用,除2.0
系列外,这一属性不被其它内核支持。
a    文件仅能以追加方式打开,只有root才能设置这个属性。
c    文件保存在磁盘时,内核将自动压缩该文件。
d    文件标记,使其不能被转储。
i     文件不能被修改,删除或重命名,不能建立任何指向它的连接,并不能写入任何数据。
s    删除文件时,相应的磁盘存储块清零。
S    修改文件时,对其写入进行同步。
u    删除文件时,保存其内容。shell

    Ulimit命令
设置限制     能够把命令加到profile文件里,也能够在/etc/security/limits.conf文件中定义
限制。
命令参数
-a      显示全部限制
-c      core文件大小的上限
-d      进程数据段大小的上限
-f      shell所能建立的文件大小的上限
-m     驻留内存大小的上限
-s      堆栈大小的上限
-t      每秒可占用的CPU时间上限
-p     管道大小
-n     打开文件数的上限
-u     进程数的上限
-v     虚拟内存的上限
除可用Ulimit命令设置外,也能够在/etc/security/limits.conf文件中定义限制。
domino    type    item    value
domino是以符号@开头的用户名或组名,*表示全部用户,type设置为hard or soft。item指
定想限制的资源。如cpu,core nproc or maxlogins
。value是相应的限制值。数据库

    信号
# kill -TERM XXXX       终止信号
# kill -HUP HTTPD       重读配置信号安全

    特权端口
root用户是可绑定端口小于1024的唯一用户。能够信任来自于远程机器端口小于1024的连
接。服务器

 

第二章 预防措施与从***中恢复
    系统安全
简单的FIND命令   
# find / \(-perm -02000 -o -perm -4000 \) -ls   能够找出系统中全部的setuserid and setgroupid
程序。
在最严格的状况下,能够去掉除/bin/su外全部已安装程序的setXid位。网络

系统安全扫描工具   cops   tiger   Nabouless

    扫描检测器
******系统前所作的第一件事就是从网络上扫描系统,扫描检测器能及时获知,是一个良
好的***检测系统(IDS)
Klaxon   Courtney   Scanlogd    PortSentrydom

    加固系统
Bastille项目建立了一组模块来加固新近发布的REDHAT。在安装完系统后可运行该补丁,
在何时均可运行,没必要要必定是刚安装完系统。
加固的方法是:一、下载源代码到/root目录并解包。以root身份动行InteractiveBastille.pl脚
本。在回答完问题后,程序将作出相应改动。配置完成后,该工具把其保存在BackEnd.pl
中,若是但愿加固一样配置的服务器,将它复制到新服务器并运行AutomatedBastille.pl便可。

Openwall Linux补丁
它是一个内核补丁。要这些补丁起做用,用户必须从新编译和安装新的打上补丁的内核。在
某些状况下,这些内核补丁和标准linux不彻底兼容,所以在决定使用前必须确信理解其含
义。


LIDS
它包括内核级的端口扫描检测程序和安全警告程序。是内核补丁(如今适用于2.2.X和2.4.X,
但之后将再也不支持2.2)和系统管理工具。其特性包括:
一、高级文件保护,甚至root也不能发现和处置受LIDS保护的文件。
二、进程保护,内核拒绝向受保护的进程发送信号(例如SIGKILL),进程也能够被彻底隐
藏起来,在/proc下不会存在任何痕迹。
三、更好的访问控制,更有效地使用与特权相关的权能,包括禁止root更改这些权能。
四、内置式端口扫描检测,内置于内核的扫描程序可以检测到Nmap,SATAN等工具的绝大
部分扫描。
要安装LIDS,必须下载最新的linux内核正式版和LIDS源代码。使用LIDS给内核打上补丁,
而后从新编译内核。

    日志文件分析
syslogd消信可标记为特定的功能和级别,在/etc/syslog.conf文件中能够根据这两个选项来设
置消信的去向。

syslogd功能                 描述
auth            安全性/验证消息(负面)
authpriv        安全性/验证消息
cron            cron and at
daemon            其它系统守护进程(sshd,xinetd,pppd等)
kern            内核消息
lpr            行打印系统
mail            邮件子系统(sendmail,postfix,qmail等)
news            Usenet新闻消息
syslog            内部syslog消息
user            通常用户级消息
uucp            UUCP子系统
local0-local7        自定义的级别

日志级别           描述
emerg            系统已不可用
alert            必须立刻采起行动
crit            危急
err            错误
warning            警告
notice            普通但重要的情形
info            通知消息
debug            调试消息

syslog.conf每一行的配置格式为
facility.loglevel     logtarget,全部字段用tab隔开
例子:
daemon.notice    /var/log/daemon.log    把程序发送过来的功能为daemon,优先级为notice
或更高级别的全部日志消息记录到/var/log/daemon.log文件中,可使用*号表示匹配全部功
能或日志级别。
目标                   描述
/path/to/filename    将消息附加到所指定文件的文件尾,这是最经常使用的情形。
@loghost        写到loghost机器上的syslog服务器。可方便把日志发来多台机器上,
|/path/to/named_pipe    写到指定的命名管道(便于用外部程序过滤消息)。
user1,user2        写到所列用户。
*            写到全部登陆用户。
/dev/console        写到已命名的终端。

    日志文件许可
应设置日志只为root全部和写入,同时可以被log组(或你所但愿的组)读取,而其余用户
没有任何权限。一个用户在输入用户名的地方使用了口令,在登陆失败时,将会把用户名(在
此例中为口令,由于用户失误)记录到日志中。而后建立一个属于log组的虚构用户,并让
全部日志检查程序以该用户而不是root运行。日志检查程序不该当以root用户运行。
能够经过日志分析软件开监控日志,如logcheck,swatch和logsurfer。但最好的工具仍是管理
员自已写的脚本。

    文件系统完整性检查
修改文件系统是***在侵入系统以后常常要作的一件事情,下面列出了常常被修改的一些文
件:
类型            例子
服务器配置文件        /etc/inetd.conf,/etc/ftpaccess
网络配置文件        /etc/host.conf,/etc/sysconfig/network
系统配置文件        /etc/ld.so.conf,/etc/nsswitch.conf
crontab            /etc/cron.daily/*,/var/spool/cron/root
setuserid程序        /bin/su,/bin/ping,usr/bin/chfn,/sbin/dump
setgroupid程序        /sbin/netreport,/usr/bin/lpr,/usr/bin/write,/usr/bin/man
若是知道机器什么时候被***,就能够判断修改时,并了解哪些东西被修改了,例如想知道在9
月17日发生的侵入事件中被修改的全部文件,能够执行以下命令:
# touch 09170000 /tmp/comparison
# find / \( -newer /tmp/comparison -o -cnewer /tmp/comparison \) -ls
但记住,检查文件时间所给出的统计结果是不可靠的,touch命令能够更改任何文件的修改
时间(mtime)和访问时间(atime).

    校验和
校验和是一个使用数学算法生成的字符串,能够用来判断两个文件是否相同,即便在一个文
件中只改动了一位,它们的校验和也会不一样。一般
用md5sum命令。
# md5sum xxx

    文件许可
经过检查文件许可,用户能够知道修改发生的时间,并判断其行为是合法,意外仍是恶意的,
同时肯定其对系统的影响。

    生成校验和与许可数据库
在******系统前生成文件的校验和,下面是一个快捷的perl脚本,可以使用户生成自已
的文件许可和校验和数据库(文本)。
#!/usr/bin/perl

use MD5;
require 'find.pl';

$md5 = new MD5;
@dirs = @ARGV;
for $dir ( @dirs ) { find($dir);}
sub wanted { push @files,$name;}

for $name ( sort @files ) {
    ($uid,$gid) = (stat $name)[4,5];
    $stat = sprintf "%0o",(stat _)[2];
    unless ( -f $name ) {
    printf "$stat\t$uid $gid\t\t\t\t\t\t$name\n";
    next;
    }
    $md5->reset();
    open FILE,$name or print(STDERR "Can't open file $name\n"),next;
    $md5->addfile(FILE);
    close FILE;
    $checksum = $md5->hexdigest();
    printf "$stat\t$uid $gid $checksum\t$name\n";
}
生成的数据库尽可能不要放在本机上,要放在其它机器上或一次写屡次读(CDR)的机器上。

现有的文件完整性工具 Tripwire AIDE Nabou

    如何知道系统什么时候被黑
发现系统被***的方法:
一、主页变化
二、磁盘空间的急剧减小        用df工具查看磁盘使用状况
三、频繁地使用网络            使用netstat -na 或lsof输出,检查存在什么链接
四、来自其它管理员的联系        当你的机器被用于***其它机器时
五、混杂模式的网络接口        若是***想嗅探系统中可用的网络服务,会把网络接口设置
为混杂模式(捕获全部的包)。请检查                ifconfig -a输出的promisc以肯定接
口模式。
六、抹去/截断的日志文件        检查syslog
七、被破坏的utmp/wtmp       
八、系统中存在的新用户        ***一般使用与现存的用户名相近的名称以减小被发现的
机会,例如与lp近似的lpr或uucp1等。或者
***方言中的名字,如t00r and own3d.
九、正在运行的陌生程序       
十、不能解释的CPU使用状况   
十一、本地用户的远程账号被破解
十二、“看起来古怪”的事情

    被***后应采起的措施
制止损害
一、    关闭全部网络接口,使***对系统丧失了交互行为的能力,但那些正在运行的进程仍然
二、    会继续运行。
三、    将系统切换到单用户模式,关闭全部正式的root进程和全部用户进程,任何剩下的进程
四、    可能就来自于***。
三、使用未被损害的linux启动盘重启系统。以只读模式加载系统,检查系统,以查看***
所动的手脚。
四、进行严重损害的控制。

    破坏估计
以只读模式挂上全部分区,并记录所发现的任何事情。
一、找到可疑的文件和目录        口令文件,***工具和任何你没有放置在系统中的目录。这
些目录在你重启前多是不可见的。
二、定位新的setuserid程序    任何新的setXid程序(尤为是属于root的)都极有可疑。
三、检查时间戳            检查******以后发生变化的文件。
四、阅读日志文件            检查全部日志文件。
五、验证校验和            比较******先后的校验和数据库。
六、验证所安装的软件包        确认正确的版本,***能够把软件降级,以让系统使用不安
全的版本。
七、手工验证配置文件        快速浏览,以肯定变化,如web以root用户运行,或在
/etc/inetd.conf中出现了额外的服务器。
八、备份文件           
九、特殊工具            有不少工具能够帮助检查系统,最新的是组件是coroners toolkit。
十、通知权威机构。

    在线恢复
在肯定了***行为后,有两个选择,一、堵上漏洞并对系统被篡改部份启用备份;二、从新安
装系统。最安全的方法是彻底从新安装系统。
仅仅堵上发现的漏洞并继续运行一般要快得多,可是,你可能并不能肯定***在系统中所作
的全部事情。***可留下在几个月后才发做的时间×××,也可能修改了系统二进制代码,使
其运行不稳定。所以,咱们建议的把***从系统中清除出去的最好方法以下:
一、对重要文件进行备份。
二、彻底格式化全部驱动器,(这也是对系统进行任何改变的最佳时间,例如添加硬盘或改变
分区大小,要充分利用停工期的有利条件)
三、从头安装linux版本,而且只包含那此必需的东西。
四、对已安装的软件包进行彻底升级。
五、生成校验和并将之保存在安全的地方。
六、对配置文件进行必要的手工修改。不要仅仅从备份中复制这些文件,它们可能已经被改
变。
七、从备份中复制必要的文件。
八、从新检查从备份中安装的文件,确认其没有被破坏的迹像。
九、使用另外一种方法计算文件系统的校验和。
十、第一次启用网络。

对于实际或觉察到的***,经常使用的对策是取消发动***的机器与本机通讯的能力。具体作法
有以下几种:
一、使用tcp封装器,拒绝来自***ip的链接。
二、使用iptables规则,退回/拒绝来自该ip地址的包。
三、建立拒绝路由表以使本机不能和相应的ip地址通讯,此时,仍然能够收到来自源地址的
包,但不能响应,从而破坏相互间的通讯。
四、在防火墙上建立相似的拒绝访问列表。


第三章 对机器和网络踩点
    在线搜索
新闻组/邮件列表搜索
internet上有不少新闻组/邮件列表或论坛,是向知识渊博的人请教问题的好地方,但也可能
在彻底无心识下泄露了系统信息。好比公司的网络拓扑结构,安全配置状况,电话号码,管
理员名字,我的信息等。
对策:
对所发贴子要再三审读,删除任何有可能被***利用的信息。或使用与系统不相关的账号发
送邮件,好比申请的免费邮箱。

whois数据库

    ping扫射
ping扫射是指ping指定网络中的全部ip,若是机器正在监听ip地址,就会回应ping。从而
就知道它处于活动状态。有***经过这种方法列出全部正在运行的机器,而后决定***目标。
有两种不一样的ping主机方法:ICMP ping and echo ping。能够用一些工具加速ping。其中两
个最有意义:Fping and Nmap
ICMP ping方法:源机器向目的机器发送icmp echo request.若是目标机器正在运行,则会响
应icmp echo reply。
# ping -c 3 target
echo ping方法:以udp or tcp包链接到目标机器的回显端口(端口7),若是机器在运行状态,
该端口直接回显发送过来的信息。
# telnet target.example.com echo
Fping是一个直接了当的ping工具,能够在命令行列出须要ping的机器,也能够用文件方

# Fping -a < machinelist
若是要扫描整个网络(192.168.10.X),必须提供IP列表,在命令行用perl语句能够容量实
现。
# perl -e 'for (1..254) {print "192.168.10.$_\n"}' |fping -a -q 2>/dev/null
Nmap是一种多用途的扫描工具,内置了ping扫描功能。
# nmap -sP 192.168.10.0/24
ping扫射对策
经过配置机器(iptables等)来拒绝进入的echo request包和出去的echo reply包。从而避免
响应icmp echo request。关闭本机回显服务。在/etc/inetd.conf中注释掉如下两行
echo stream tcp nowait root internal
echo dgram udp wait root internal
再重启inetd。

    dns问题
在linux上,最好的dns服务器是bind,它有几个版本,若是你是先锋派,bind9.x是最佳选择,
4.x是最稳定版本,8.x则是一个不错的过滤,大部分站点都是用这个版本。请保持bind的
版本是最新,最为它的安全漏洞较多,并且一旦发现漏洞,就会很被***利用。
尽可能不要在配置文件中包含hinfo and txt信息。
    区域传送
通常状况下,为了保证dns老是能够,每一个域中,都有一个主dns机器,而其它都是次级dns,
每当dns区域发生变化时,次级dns机器就从主机器复制所有内容。系统成为次级dns的方
法是在named.conf中添加以下内容:
zone "expample.com" {
type slave;
file "slave/expample.com";
masters {xxx.xxx.xxx.xxx};
};
可是***也能够攫取区域文件(若是没有采起措施),下例给出使用host命令列出整个域中
全部NS,A和PTR记录的方法。
# host -t ns example.com
# host -l example.com
对策:
配置主名字服务器时,使之不容许除次级服务器外机器的区域传送。在全局默认选项中设置
以下:
option {
....
    allow-transfer {xxx.xxx.xxx.xxx};
    ...
}
警告:必须确保在主和从服务器上都禁止区域传送,由于从服务器也能接受区域传送请求。
任何未经受权的区域传送都会被syslog记录下来。

反解析是指从ip到域名的过程。能够用host命令实现。若是大量使用真实的主机名,会给
***知道机器的功能。因此最好在PTR记录中使用通常的反解析名如:
xxx-xxx-xxx-xxx.example.com.

    端口扫描
***会运行一个或多个端口扫描工具来了解目标系统提供的服务。工具主要有
netcat,strobe,nmap(best)。玩转nmap能够学到不少东西。包括自已的系统,也包括网络方面。

    网络漏洞扫描程序
iss,satan,Nessus

    加密文件系统
CFS,TCFS,BestCrypt,PPDD,Encrypted

第四章 社交工程、特洛伊***和其余***伎俩

第五章 物理***    物理***小结一、不要把口令或访问ID记在别人能够看到的地方。二、不要把电话本,组织结构图,备忘录,内部手册,会议安排或内部安全策略遗忘在容量被阅读或偷窃的地方。三、在丢弃打印文档,电子介质或客户数据时必须谨慎从事,把敏感材料标记为“敏感”,在处理前粉碎敏感的文件和手册。抹去电子介质中的数据,而且把全部的垃圾箱放置在照明状况良好的保护区域。四、在标记网络设施时必须谨慎。将这些信息记录在清楚的网络图中,并将其锁起来。五、    使用好的屏幕保护程序,确保带有口令,而且在运行时隐藏屏幕内容。将延迟时间设置六、    为合理值---在合理时间后就运行它。六、必须离开系统时,锁定屏幕。七、    使用便携机时,必须尽量在全部时间都将其带在身边。对窃贼的那些把它从你身过度八、    开的诡计保持警戒。对进入工做场所的每一个便携机贴上标签,在带离时对其进行安全检查。八、避免使用双重启动系统,linux的安全性取决于机器中安装的安全性最差的系统。九、在启动加载时程序中设置保护口令,防止可能得到root权限的非法重启方式。十、设置BIOS口令,以防止其被修改。11,将全部敏感系统放在加锁的房间,以防止破坏。十二、使用好的加密文件系统能够防止那些得到系统权限的人看到机密数据。这应看成为安全防卫的底线。

相关文章
相关标签/搜索