记录重要的系统事件是系统安全的一个重要因素。多数U N I X 系统能够运行三个不同的日志子系统:使用wtmp / utmp 文档的连接时间日志;使用acct 或pacct 文档的进程统计;经过syslog 实施的错误日志。本章讲述了这些日志子系统连同允许系统或安全管理员监测、审计和维护日志的命令和程式。还讲述了几个额外的工具,从帮助查找侵入者的Zap 到标准UNIX syslog 的一个安全加强版本syslog-ng 。
UNIX 维护了几个基本的日志文档来跟踪和记录系统中发生了什么事情,包括谁登录进入,谁退出登录,连同他们做了些什么。较新的U N I X 版本还跟踪其他一些信息,如终极用户登录的次数,通过网络传输的文档,电子邮件连同其他更多方面。
日志文档对于维护系统安全很重要。他们为两个重要功能提供数据:审计和监测。他们通过提供一个历史记录—系统中关于活动的审计轨迹—允许用户或第三方回头来系统地评价安全程式的效率连同确定引起安全破坏或系统功能失效的原因。假如需要,他们还能作为呈现给权威机构的证据。
他们还能用来“实时”地监测系统状态,检测和追踪侵入者,发现bug 连同阻止问题发生。用户能够通过浏览日志条目来查看自己的系统或使用Swatch这样的工具来代为查看。警告日志使用户对自己的行为负责,特别是在有较强用户授权策略的系统中。但是,总可能有一个用户冒充另一个。不要认为包含在一个日志中的信息是神圣不可侵犯的—在采取行动之前要试着通过单独手段来确认日志记录。
虽然一个日志的存在不能提供完全的可记录性,但日志能使系统管理员和安全官员做到:
(1)发现试图攻击系统安全的重复举动(也就是个攻击者试图冒充root 登录)。
(2)跟踪那些想要越权的用户(也就是那些使用sudo 命令作为root 执行命令的用户)。
(3)跟踪异常的使用模式(Carol 从9 点工作到5 点而日志显示在 3AM 登录;Mallory 贪取CPU时间)。
(4)实时跟踪侵入者。
日志能够帮助检测。当系统被攻击或有人侵入时,尽快知道是很重要的。虽然日志不能阻止一次侵入,但他能体现出基本帐户安全的一个漏洞。甚至当帐户安全失败,一个攻击者能够剥夺用户权利时,也希望这件事能记录下来。一旦知道发生了什么事,就能够采取相应的行动:切断用户、加强网络控制,监测一个侵入者以搜索证据等等。记录日志、维护日志、日志监测和审计等策略都是完整安全策略的重要组成部分。也许日志最重要的安全功能是制止。基础人类心理学指出当人类得知自己的行为被监测时会举止异常。仅仅安装日志是不够的—应该公开这件事以灌输恐惧感。应该发展通信策略以加强攻击者可能被抓住的印象。其目的是阻止一个攻击者或任性的用户到达行为的危险点。
应该宣传出去说系统建立了日志。一个有效的方式是使用登录标志警告:“警告!继续使用本系统要同意安全监测和测试。任何的用户行为都和用户名、主机名和IP 地址一起记录下来”。
不幸的是,日志文档本身易被攻击。任何有能力的系统破坏者都试图通过修改日志文档或更坏情况是修改日志机制本身来掩盖自己的踪迹。有一些防范措施能够帮助保持日志子系统的完整性和可用性。这将在本章后面讲到。
提示要想知道一个破坏者在侵入UNIX 系统后怎样掩盖其踪迹,可参见Phrack 杂志的文章“Playing Hide and Seek, Unix Style ”,可在下面地址找到:
http://www.fish.com/security/hide-n-seek.html .

8.1 日志子系统
在多数UNIX 系统中,有三个主要的日志子系统:
(1) 连接时间日志—由多个程式执行,把记录写入到/var/log/wtmp (或/var/adm/Wtmp )和/var/run/utmp (能够是/etc/utmp 或/var/adm/utmp)。login 等程式更新wtmp 和utmp 文档,使系统管理员能跟踪谁在何时登录进入系统。
(2) 进程统计—由系统内核执行。当一个进程终止时,为每个进程往进程统计文档(pacct或acct )中写一个记录。进程统计的主要目的是为系统中的基本服务提供命令使用统计。
(3) 错误日志—由syslogd 执行。各种系统守护程式、用户程式和内核通过syslog 向文档/var/adm/messages 和/var/log/syslog 报告值得注意的事件。另外有许多UNIX 程式创建日志。像HTTP 或FTP 这样提供网络服务的服务器也保持周详的日志。
根据不同的U N I X 版本,日志文档通常写到/var/log 、/var/adm 、/usr/adm 或有时/etc 目录中。
多数Linux 系统在/var/log 中保存主要的日志—我将在多数例子中使用该习惯。常用的日志文档在表1 中总结。

表1 常用UNIX 日志文档
日志文档 目标
access-log 记录HTTP/web的传输
acct/pacct 记录用户命令
aculog 记录调制解调器的活动
btmp 记录失败的登录
lastlog 记录最近几次成功登录的时间和最后一次不成功的登录
messages 从syslog中记录信息(通常链接到syslog 文档)
sudolog 记录使用sudo 发出的命令
sulog 记录su 命令的使用
syslog 从syslog 中记录信息(通常链接到message 文档)
utmp 记录当前登录的每个用户
wtmp 一个用户每次登录进入和退出时间的永久记录
xferlog 记录FTP会话

8.2 登录记录
utmp 、wtmp 和lastlog 日志文档是多数重要UNIX 日志子系统的关键—保持用户登录进入和退出的记录。有关当前登录用户的信息记录在文档utmp 中;登录进入和退出记录在文档wtmp 中;最后一次登录在文档lastlog 中。数据交换、关机和重启也记录在wtmp 文档中。任何的记录都包含时间戳。
这些文档(除了lastlog )在具备大量用户的繁忙系统中增长得很迅速。例如wtmp 文档能够无限制增长,除非定期进行截取。许多系统以一天或一周为单位把wtmp 配置成循环使用。他通常由cron 运行的脚本来删改。这些脚本重命名并循环使用wtmp 文档,能保持一周有价值的数据。通常,wtmp 在第一天结束后重命名为wtmp.1 ;第二天后wtmp.1 变为wtmp.2 等等,直到wtmp.7 。
警告假如/var/log/wtmp 文档不存在,则不执行登录和连接时间统计。他必须手工进行创建(touch /var/log/wtmp )。

8.2.1 基本机制
每次有一个用户登录时,login 程式在文档lastlog 中查看用户的UID 。假如找到了,则把用户上次登录、退出时间和主机名写到标准输出中,然后login 程式在lastlog 中记录新的登录时间。

文章整理:西部数码--专业提供域名注册虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!