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

本文涉及的产品
全局流量管理 GTM,标准版 1个月
云解析 DNS,旗舰版 1个月
日志服务 SLS,月写入数据量 50GB 1个月
简介:

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

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

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

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

    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   Nabou

    扫描检测器
黑客入侵系统前所做的第一件事就是从网络上扫描系统,扫描检测器能及时获知,是一个良
好的入侵检测系统(IDS)
Klaxon   Courtney   Scanlogd    PortSentry

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

Openwall Linux补丁
它是一个内核补丁。要这些补丁起作用,用户必须重新编译和安装新的打上补丁的内核。在
某些情况下,这些内核补丁和标准linux不完全兼容,因此在决定使用前必须确信理解其含
义。


LIDS
它包括内核级的端口扫描检测程序和安全警告程序。是内核补丁(现在适用于2.2.X和2.4.X,
但以后将不再支持2.2)和系统管理工具。其特性包括:
1、高级文件保护,甚至root也不能发现和处置受LIDS保护的文件。
2、进程保护,内核拒绝向受保护的进程发送信号(例如SIGKILL),进程也可以被完全隐
藏起来,在/proc下不会存在任何痕迹。
3、更好的访问控制,更有效地使用与特权相关的权能,包括禁止root更改这些权能。
4、内置式端口扫描检测,内置于内核的扫描程序能够检测到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

    如何知道系统何时被黑
发现系统被入侵的方法:
1、主页变化
2、磁盘空间的急剧减少        用df工具查看磁盘使用情况
3、频繁地使用网络            使用netstat -na 或lsof输出,检查存在什么连接
4、来自其它管理员的联系        当你的机器被用于攻击其它机器时
5、混杂模式的网络接口        如果黑客想嗅探系统中可用的网络服务,会把网络接口设置
为混杂模式(捕获所有的包)。请检查                ifconfig -a输出的promisc以确定接
口模式。
6、抹去/截断的日志文件        检查syslog
7、被破坏的utmp/wtmp        
8、系统中存在的新用户        黑客通常使用与现存的用户名相近的名称以减少被发现的
机会,例如与lp近似的lpr或uucp1等。或者
黑客方言中的名字,如t00r and own3d.
9、正在运行的陌生程序        
10、不能解释的CPU使用情况    
11、本地用户的远程帐号被破解
12、“看起来古怪”的事情

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

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

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

对于实际或觉察到的攻击,常用的对策是取消发动攻击的机器与本机通信的能力。具体做法
有如下几种:
1、使用tcp封装器,拒绝来自黑客ip的连接。
2、使用iptables规则,退回/拒绝来自该ip地址的包。
3、创建拒绝路由表以使本机不能和相应的ip地址通信,此时,仍然可以收到来自源地址的
包,但不能响应,从而破坏相互间的通信。
4、在防火墙上创建类似的拒绝访问列表。


第三章 对机器和网络踩点
    在线搜索
新闻组/邮件列表搜索
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

第四章 社交工程、特洛伊木马和其他黑客伎俩

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

 

 

本文转自 holy2009 51CTO博客,原文链接:http://blog.51cto.com/holy2010/376184


相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
1月前
|
Linux
在 Linux 系统中,“cd”命令用于切换当前工作目录
在 Linux 系统中,“cd”命令用于切换当前工作目录。本文详细介绍了“cd”命令的基本用法和常见技巧,包括使用“.”、“..”、“~”、绝对路径和相对路径,以及快速切换到上一次工作目录等。此外,还探讨了高级技巧,如使用通配符、结合其他命令、在脚本中使用,以及实际应用案例,帮助读者提高工作效率。
82 3
|
1月前
|
监控 安全 Linux
在 Linux 系统中,网络管理是重要任务。本文介绍了常用的网络命令及其适用场景
在 Linux 系统中,网络管理是重要任务。本文介绍了常用的网络命令及其适用场景,包括 ping(测试连通性)、traceroute(跟踪路由路径)、netstat(显示网络连接信息)、nmap(网络扫描)、ifconfig 和 ip(网络接口配置)。掌握这些命令有助于高效诊断和解决网络问题,保障网络稳定运行。
75 2
|
7天前
|
存储 缓存 监控
Linux缓存管理:如何安全地清理系统缓存
在Linux系统中,内存管理至关重要。本文详细介绍了如何安全地清理系统缓存,特别是通过使用`/proc/sys/vm/drop_caches`接口。内容包括清理缓存的原因、步骤、注意事项和最佳实践,帮助你在必要时优化系统性能。
121 78
|
11天前
|
Linux Shell 网络安全
Kali Linux系统Metasploit框架利用 HTA 文件进行渗透测试实验
本指南介绍如何利用 HTA 文件和 Metasploit 框架进行渗透测试。通过创建反向 shell、生成 HTA 文件、设置 HTTP 服务器和发送文件,最终实现对目标系统的控制。适用于教育目的,需合法授权。
45 9
Kali Linux系统Metasploit框架利用 HTA 文件进行渗透测试实验
|
1月前
|
缓存 Java Linux
如何解决 Linux 系统中内存使用量耗尽的问题?
如何解决 Linux 系统中内存使用量耗尽的问题?
130 48
|
7天前
|
存储 监控 Linux
嵌入式Linux系统编程 — 5.3 times、clock函数获取进程时间
在嵌入式Linux系统编程中,`times`和 `clock`函数是获取进程时间的两个重要工具。`times`函数提供了更详细的进程和子进程时间信息,而 `clock`函数则提供了更简单的处理器时间获取方法。根据具体需求选择合适的函数,可以更有效地进行性能分析和资源管理。通过本文的介绍,希望能帮助您更好地理解和使用这两个函数,提高嵌入式系统编程的效率和效果。
57 13
|
1月前
|
Ubuntu Linux 网络安全
linux系统ubuntu中在命令行中打开图形界面的文件夹
在Ubuntu系统中,通过命令行打开图形界面的文件夹是一个高效且实用的操作。无论是使用Nautilus、Dolphin还是Thunar,都可以根据具体桌面环境选择合适的文件管理器。通过上述命令和方法,可以简化日常工作,提高效率。同时,解决权限问题和图形界面问题也能确保操作的顺利进行。掌握这些技巧,可以使Linux操作更加便捷和灵活。
32 3
|
8天前
|
Ubuntu Linux C++
Win10系统上直接使用linux子系统教程(仅需五步!超简单,快速上手)
本文介绍了如何在Windows 10上安装并使用Linux子系统。首先,通过应用商店安装Windows Terminal和Linux系统(如Ubuntu)。接着,在控制面板中启用“适用于Linux的Windows子系统”并重启电脑。最后,在Windows Terminal中选择安装的Linux系统即可开始使用。文中还提供了注意事项和进一步配置的链接。
25 0
|
1月前
|
存储 运维 Linux
如何在 Linux 系统中使用 envsubst 命令替换环境变量?
`envsubst` 是 Linux 系统中用于替换文本中环境变量值的实用工具。本文分三部分介绍其工作原理、使用方法及实际应用,包括配置文件替换、脚本执行中环境变量替换和动态生成文件等场景,帮助用户高效利用 `envsubst` 进行开发和运维工作。
53 4
|
1月前
|
Linux
在 Linux 系统中,`find` 命令
在 Linux 系统中,`find` 命令
36 1