`

centos5.5 全部配置方法

阅读更多

CentOs 5.5 服务器配置手记

先声明,以下的这些文字个人的安装笔记,是参考了网上许多高手的成功经验组合而成的,说实话我自己的东西不多:)我想把这些经验写下来,既可以对其他跟我一样摸索的兄弟一个经验,也可以防止以后自己都忘记了,嘿嘿。因为时间关系很多图片直接使用了别人的图片,可能在界面上有些不一样,版本对不上,仅供参考。
所以如果某个大虾看到我借用了你的资源,请不要生气。同时欢迎大家指出错误。
为了演示方便,本文所有的密码都使用:12345678 临时文件夹使用/tmp目录。

本文中所有的指令都可以选中复制后在终端中粘贴直接运行,免得输入过程中输错指令影响学习进程。

服务器和个人电脑最本质的区别无非服务器是为了提供服务而存在。然而,通过一些软件也可以把我们的使用中的个人电脑模拟成一台(Web)服务器,比如Win98 下用PWS , Win2K 下用IIS ,或者在Windows下安装Win32 版的Apache 等等。但是,这些方式也使得一方面服务器的可定制性变得很差,另一方面,使服务器在承载服务负担的同时,时时刻刻都有受到由于Windows 操作系统本身在服务器方面的脆弱性而遭受攻击,导致崩溃的可能性。
所以,在这里我们用Linux 这个服务器专用操作系统来搭建一台安全、稳定、可定制性强的服务器,来满足我们发布网页、以及架设论坛等等多功能交互程序的需要。
Linux 的发行版也有数多种,在这里,我们采用CentOS 这个Linux 发行版。CentOS 是RHEL(Red HatEnterprise Linux)源代码再编译的产物,而且在RHEL 的基础上修正了不少已知的Bug ,相对于其他Linux 发行版,其稳定性值得信赖。另外,由于Fedora Core 计划也归根于Red Hat 系,所以在绝大多数情况下,使用Fedora Core 的朋友,也同样能够通过本文介绍的各种CentOS 方面相关的技巧、方法来完成服务器的构建和维护工作。但相对于稳定性来说,Fedora Core 更侧重于最新技术,更面向于桌面应用以及开发测试,这也导致Fedora Core 的稳定性被考虑在了次要的方面。所以在这里,不建议使用Fedora Core 来构建网络服务器。
[目标]
* 对服务器完全自主、自由的配置
* 实现Web 发布、并通过虚拟主机实现多用户共享Web 服务器资源
* 对Perl、PHP、JSP 的支持,以及MySQL 数据库的支持
* 通过FTP 服务器的构建实现远程文件传送
* 通过SSH 远程控制服务器
* 自主E-mail 服务器的构建
* 服务器端病毒监测以及安全监测的系统化
* 。。。。。。
[基本条件]
* 一台配置说的过去的计算机(极力推荐使用自用PC 以外的另一台计算机)
* 7*24 全天候的网络接入(PPPoE 或其他能够获得独立Global IP 地址的接入方式即可)
* 自用PC 与将要构建的服务器组成的局域网环境(服务器端的配置可通过自用PC 来操作)
* 。。。。。。
* 如果无以上条件,也可以通过VMWare 在Windows 下构建
(基于Windows 的VMWare 所构建的CentOS 服务器无多大的应用意义,仅限于学习用)
在进行服务器配置之前,如果您是新手,很有必要了解一下CentOS 下相关工具的操作、相关命令的用法,以及Linux 及CentOS 相关的背景知识。以下将列出相关的内容以供参考,但如果依照本文文档进行服务器配置的情况,您并没有必要将以下预习项目全部阅读。您可以根据选择来吸收其中有用的部分,来提高效率。

基于本文文档,预习项目的阅读等级如下:
“◎” 必须掌握,否则很难顺利的进行
“☆” 选择阅读,可能提高您在配置过程中的效率
“△” 不需阅读也可以顺利进行

CentOS服务器构建
vi 编辑器的使用方法

前言
在UNIX 下,vi 是标准的文本编辑器之一。几乎任何一部UNIX 系统都把vi 编辑器作为最最基本的“软件”而被默认组装在系统中。在PC-UNIX 中,即使是选择最小程度安装的系统,vi 编辑器也会被默认安装在系统中。
提到vi,就不得不提一下UNIX 下另一功能强大的编辑器- Emacs 。好多人喜欢拿Emacs 和vi 来比较,但笔者认为,Emacs 和vi 没有可比性。vi 的轻量级特性,使得它成为系统管理方面的首选工具;而Emacs 的功能强大的特性,使得它成为系统开发方面的首选工具。如果用Emacs 来做系统管理,它庞大的体积和对于系统资源的耗费(相对于vi),势必会影响系统管理的效率;然而,如果用vi 来搞软件开发,它有些面向于开发的功能方面的不完备,也势必会影响开发的灵活性。在这里,我们的目标是建立和管理一台服务器,所以,我们选择使用vi 编辑器来完成服务器的配置工作。
由于本文所有服务器设置相关的修改工作,都是通过vi 来完成的,所以准备通过本文介绍的各种方法构建服务器的话,请务必掌握vi 的使用方法。否则将很难顺利的进行。如果您使用其它编辑器(比如Emacs)可以在安装过程中或通过yum 命令在线安装。
用法习惯于Microsoft Windows 下GUI 方式编辑器的朋友,刚刚接触vi 肯定会有“排斥反应”的,这一点只能奉劝稍安毋躁……当你习惯于vi 之后,你会发现它既精确又有秩序,而且重要的是它对于要编辑的对象极富针对性。
 
上图为在CUI 下输入“vi”命令后,vi 被启动的状态。
或者输入一个已存在的文件的路径,来打开一个已经存在的文本文件。(这里以用root 用户登录系统,后输入“vi /etc/X11/xorg.conf”为例。)
 
上图为用vi 打开/etc/X11/xorg.conf 后的状态。光标位于左上第一个字符下滑线的位置。
vi 和其他编辑器最不一样的地方莫过于它把编辑、处理等等的操作分离开来,形成性质不同的3 种操作模式,
他们分别为“命令模式”、“插入模式”、“ex 模式”。
在Windows 下通常使用的记事本等等的编辑器在打开文件的时候,光标已经在处于输入等待的状态,也就是说,我们打开文件时就可以对文件进行编辑。比如,我们要输入新的文本,或者复制一段文本,所有操作的前提,只要编辑器是被打开的状态,操作就是可能的。
但在vi 下,为了增强对将要处理的文本的针对性,文本输入、复制等等不同的操作,是被分离开来的,比如文本输入的模式叫做“插入模式”,在插入模式下,我们可以用和Windows 下一样的操作方法来对文本进行输入、编辑等等的操作,但是复制等等非编辑的操作,在插入模式下不能够完成,而需要切换到相应的模式下用相应的命令来完成。
在这里,还是首先对重要的vi 的模式进行说明。
★ vi 的模式(命令模式、插入模式、ex 模式)
1)命令模式:
在我们刚刚通过vi 新建或打开一个已经存在的文件时,首先默认被读取的模式就是“命令模式”,命令模式的特征就是,在编辑器窗口左下角的位置上没有任何的提示标语。
 
在这个模式下,如果不通过相应的命令,我们无法输入新的文本到这个文件中。这里建议新接触刚刚接触vi 的朋友在用vi 打开一个文件时不要处于心切而乱按键盘试图输入一些文本到文件中,因为命令模式所谓的“命令”,并不是我们在命令行提时下输入的过程诸如“ls ->回车”等等形式的命令。确切说vi 命令模式下的命令,只是计算机键盘上的某个按键或某些按键的组合,当我们在命令模式下敲下键盘一个按键的时候,相应命令就已经被执行。
在这里,首先介绍移动光标的命令。通常光标的移动可以通过键盘右边的方向键,但是由于每次移动光标,手都要大幅度的移动到键盘右边,这样使用vi 是体现不出效率的,所以建议使用vi 固有的命令(键)来控制光标的移动。
光标的移动命令如下所示:
向右移动--> l
向左移动--> h
向下移动--> j
向上移动--> k
如上所示,例如要向右移动光标8 个字符的距离,只要在键盘上敲l 键8 次即可;向下移动3 行的距离,只要在键盘上敲j 键3 次即可……也就是说,在vi 命令模式中通过这几个键(命令)来控制光标的移动。
其次就是文本删除的命令。在Windows 下大多数编辑器在删除文本时只要连续按[Backspace]键即可。但由于在vi 中,插入模式和命令模式是分离开来的,所以在命令模式下需要通过命令(按键)来删除文本,而不是直接按[Backspace]键。
文本删除的命令如下所示:
删除光标所在位置的字符--> x
删除光标所在的行--> dd(敲d两次)
如上所示,例如要删除从光标位置起向右的3 个字符,只要在键盘上敲x 键3 次即可;要删除光标所在的行,只要敲dd (连续敲d 键两次),光标所在行的所有字符以及行将会被删除。
再次,当编辑完了一个文档,想要保存后退出的时候的命令为“ZZ”(大写、连续敲2 次)。
保存并退出文档:
保存当前修改并退出--> ZZ
另外,vi 还有一些编辑性质的命令,一并总结如下
具有编辑性质的有用的命令:
撤销上一步操作--> u
移动光标到行首--> 0 (数字0)
移动光标到行首--> $
移动光标到当前页最顶行--> H
移动光标到当前页最底行--> L
向前翻一页(Page Up) --> Ctrl +f
向后翻一页(Page Down)--> Ctrl+ b
还有在服务器配置中使用vi 时,频繁用到的就是vi 的搜索功能。在vi 命令行的状态下,键入“/”(斜线)后,vi 底部出现“/”,并处于输入等待状态,这时候输入要查找的文字或文字列,然后按回车就可以找到相应的文字或文字列。当有多个对象存在时,敲“n”(小写)键为查找下一个目标,敲“N”为查找上一个目标。
用top 命令查看CPU 使用率
前言
在系统维护的过程中,随时可能有需要查看CPU 使用率,并根据相应信息分析系统状况的需要。在CentOS 中,可以通过top 命令来查看CPU 使用状况。运行top 命令后,CPU 使用状态会以全屏的方式显示,并且会处在对话的模式-- 用基于top 的命令,可以控制显示方式等等。退出top 的命令为q (在top 运行中敲q 键一次)。
运行top在命令行中输入“top” 即可启动top ,运行后如下图所示:
 
如上图所示,top 的全屏对话模式可分为3 部分:系统信息栏、命令输入栏、进程列表栏。
第一部分-- 最上部的系统信息栏:
第一行(top):
“00:11:04”为系统当前时刻;
“3:35”为系统启动后到现在的运作时间;
“2 users”为当前登录到系统的用户,更确切的说是登录到用户的终端数-- 同一个用户同一时间对系统多个终端的连接将被视为多个用户连接到系统,这里的用户数也将表现为终端的数目; “load average”为当前系统负载的平均值,后面的三个值分别为1 分钟前、5 分钟前、15 分钟前进程的平均数,一般的可以认为这个数值超过CPU 数目时,CPU 将比较吃力的负载当前系统所包含的进程;
第二行(Tasks):
“59 total”为当前系统进程总数;
“1 running”为当前运行中的进程数;
“58 sleeping”为当前处于等待状态中的进程数;
“0 stoped”为被停止的系统进程数;
“0 zombie”为被复原的进程数;
第三行(Cpus):
分别表示了CPU 当前的使用率;
第四行(Mem):
分别表示了内存总量、当前使用量、空闲内存量、以及缓冲使用中的内存量;
第五行(Swap):
表示类别同第四行(Mem),但此处反映着交换分区(Swap)的使用情况。通常,交换分区(Swap)
被频繁使用的情况,将被视作物理内存不足而造成的。
第二部分-- 中间部分的内部命令提示栏:
top 运行中可以通过top 的内部命令对进程的显示方式进行控制。内部命令如下表:
s - 改变画面更新频率
l - 关闭或开启第一部分第一行top 信息的表示
t - 关闭或开启第一部分第二行Tasks 和第三行Cpus 信息的表示
m - 关闭或开启第一部分第四行Mem 和第五行Swap 信息的表示
N - 以PID 的大小的顺序排列表示进程列表(第三部分后述)
P - 以CPU 占用率大小的顺序排列进程列表(第三部分后述)
M - 以内存占用率大小的顺序排列进程列表(第三部分后述)
h - 显示帮助
n - 设置在进程列表所显示进程的数量
q - 退出top
s - 改变画面更新周期
第三部分-- 最下部分的进程列表栏:
以PID 区分的进程列表将根据所设定的画面更新时间定期的更新。通过top 内部命令可以控制此处的显示方式。
应用top一般的,我们通过远程监控的方式对服务器进行维护,让服务器本地的终端实时的运行top ,是在服务器本地监视服务器状态的快捷便利之一。
CentOS 5.5 的下载、安装
(最近更新日:2010-12-16/)
前言
CentOS 是当前最流行的商业版Linux -- Red Hat Enterprise Linux(RHEL)的克隆版。它和RHEL 的区别除了没有RHEL 一样的技术支持以外,就是修正了RHEL 已知的一些Bug,所以,其稳定性值得我们信赖。
至于RHEL 的技术支持,在一般公司采购的情况下,大多是为了安心或者在问题出现的时候能够找到负责方才购买Red Hat 的技术支持。事实上,为了能够享受技术支持而付费的公司,真正确实的享受了技术支持服务的情况并没有想象的那么多。因为对Linux 相关技术的掌握程度只要相当于LPIC Level 1 级别的用户就基本能够驾驭它。所以,对于我们个人,根据用途的不同,不需要技术支持,也完全有能力活用这个系统。
对于安装,我们的原则就是在初期按装时采用最小安装,这样使得初期状态显得干净而简洁。在此前提下,保证系统中具备最基本的开发环境,以便能够安装一些需要编译的组件。在以后的配置中,需要哪些组件的时候,再通过CentOS 的“yum”命令(前提需要首先接入互联网)来在线安装。
CentOS 5.5 的下载及安装光盘的制作
从镜像站点上下载ISO的镜像文件
http://ftp.tcc.edu.tw/Linux/CentOS/5.5/isos/i386/CentOS-5.5-i386-bin-DVD.iso
这里,选择了从CentOS 的台湾镜像站上下载。根据具体位置可以选择距离近、速度快的景象站点。查找CentOS 的镜像请见官方镜像站点http://www.centos.org/modules/tinycontent/index.php?id=15列表。
将ISO镜像文件制作成CentOS安装CD
在Microsoft Windows 下,用Nero 等等的光盘刻录软件将ISO 镜像文件转换、刻录成安装CD。
CentOS 5.5 的安装过程
将BIOS 设置中的启动项设置为从光盘启动,然后放入CentOS 安装CD 的第一张后,重新启动计算机。
安装程序启动后的安装与设置步骤如下:
1.把刻录好的光盘放到服务器CD-ROM.以CD-ROM启动.就会看到如下CentOS欢迎画面, 按回车继续安装.
 
2.接着系统会问是否测试安装光盘,一般按”Skip”即可.
 
3.等一会,进入图形安装界面,直接按”Next”.
 
4.选择语言,选english.按”Next”.
 
5.键盘配置,默认即可.
 
6.磁盘分区设置,建议选择“删除系统内的所有分区”.如有需要可以选择手工分区.手工分区方法,新建分区,系统类型为"swap",大小设置为2048(一般为内存的两倍,内存大于3G,则为n+2G),"固定大小",确定;再新建分区,挂载点"/",文件系统类型"ext3","使用全部可用空间".磁盘设置,默认.期间可能会警告提示,按确定继续.
 
7.引导装载程序配置,默认.
 
8.网络配置. 点击“编辑”,会弹出“编辑端口eth0”,不选择“使用DHCP进行配置”,按实际情况填写IP和掩码.点击“确定”.回到“网络配置”界面,选择“手动设置”,“其他设置”的“网关”和DNS按实际情况填写.特别,eth0 的IP 地址不能够与局域网中其他计算机的IP地址重复。
 
9.时区选“Asia/Shanghai”。
 
10.设置root口令,尽量使用复杂点的口令,并在Confirm再输一遍口令。记下你的口令,以后登陆系统要用到该口令。
 
11.软件包选择,这里为了精简系统的目的,把所有默认的复选项的勾全部去掉,为方便新手操作保留了Desktop-Gnome 。选Customize now 点next 。

建议选择开发工具前两项.以后使用的时候就方便一些,安装一些软件要用到.
 
12.语言设置,在默认“English(USA)”被安装的基础上,找到简体中文、繁体中文等等的复选项,将它们打勾安装到系统中。但在这里为了省去解决CUI 下文字显示方面的繁琐,默认语言选择“English(USA)”。
 
13.设置完毕,可以开始安装了.安装过程为30-60分钟.
 
14.防火墙配置,选择“无防火墙”。SELinux 选择“Disable”(禁止)。等所有程序调试安装完成后,再开启防火墙和Selinux,针对进行有关规则进行配置。

系统安装后的初始环境设置
(最近更新日:2010-12-16)
前言
在CentOS 安装好之后,安全性以及对硬件的适应性方面,可能并不完全符合我们的实际情况。在这里,对新的CentOS 系统进行初始环境设置将以如下方面为原则:
1、为了安全,尽最大可能将访问限制限制到可能的最大程度;
2、为了节省内存及CPU 使用率(以及安全方面的考虑),尽最大可能将不需要的服务关闭;
3、为了减少误操作可能带来的损失,平时通过wheel 组用户登录进行系统管理;
4、为了让系统变的更加轻便、快速,将内核中不需要的模块卸载;
[1]系统的登录与退出
sample login: root ← 用root 用户来登录系统,输入用户名root
Password: ← 在这里输入安装时设置的root 密码,输入时密码不会被显示
# ← root 用户登录成功,提示符为“#”。若一般用户登录成功后,提示符为“$”
# exit ← 退出系统
sample login: ← 退出系统成功
[2]修改LINUX主机的主机名

Linux 安装好后,默认的主机名是 localhost。
 
[root@localhost ~]# hostname
localhost.localdomain
[root@localhost ~]# sysctl -n kernel.hostname
localhost.localdomain
[root@localhost ~]# cat /proc/sys/kernel/hostname
localhost.localdomain
Shell中主机名是由内核维护的。初始化脚本 /etc/init.d/hostname.sh 在系统启动的时候根据 /etc/hostname 中存储的名称设置主机名(使用 hostname 这个命令)。这个文件应该只包含系统的主机名,而不是完整的域名。

hosts只是用来解释网络中主机与所对应的IP文件,供hosts所有者主机查询用,比如ftp、http、samba等等的服务,它的作用等同于windows中的hosts,此主机名只是网络服务的主机名。
修改主机名三部曲
1. 变更当前主机名
三种方法:
# sysctl -w kernel.hostname=new-hostname.localdomain
# echo new-hostname.localdomain> /proc/sys/kernel/hostname
# hostname new-hostname.localdomain
后面的.localdomain可以不输入,效果都一样。
修改完了必须注销才能显示新的主机名
[root@new-hostname ~]#
这三种方法都是重启后回复原来的主机名。
2. 修改配置文件,使得下次重启的时候,使用新的主机名
编辑文件: /etc/sysconfig/network
#vi /etc/sysconfig/network
修改: HOSTNAME=new-hostname.domainname

3. 配置本机的域名解析文件,使得本机的应用程序能够解析新的主机名编辑文件: /etc/hosts
# vi /etc/hosts
修改:
127.0.0.1               localhost.localdomain localhost

xxx.xxx.xxx.xxx new-hostname.domainname new-hostname
(这里的xxx代表本机的网络地址,也可以是环回地址127.0.0.1)

127.0.0.1new-hostname.domainname new-hostname
[3]一般用户的建立与删除
# useradd test ← 建立用户名为test的一般用户
# passwd test  ← 为用户test设置密码
Changing password for user test.
New UNIX password: ← 输入密码(密码不会被显示)
Retype new UNIX password: ← 再次输入密码确认两次密码一致
passwd: all authentication tokens updated successfully. ← 密码设置成功
[4]通过一般用户登录为root 用户
因为root 用户对系统具有全权的操作权限,为了避免一些失误的操作,建议在一般情况下,以一般用户登录系统,必要的时候需要root 操作权限时,再通过“su -”命令来登录为root 用户进行操作。
$ ← 提示符为“$”,说明当前状态为一般用户test登录在系统中
$ su - ← 输入登录为root 用户的命令
Password: ← 输入root 密码(密码不会被显示),回车
# ← 成功登录为root 用户,提示符变为“#”
# exit ← 回到一般用户的登录状态
$ ← 提示符变为“$”,回到了一般用户test登录系统的状态
su test  //切换到test用户
[5]建立管理员组内一般用户
在一般情况下,一般用户通过执行“su -”命令、输入正确的root 密码,可以登录为root 用户来对系统进行管理员级别的配置。但是,为了更进一步加强系统的安全性,有必要建立一个管理员的组,只允许这个组的用户来执行“su -”命令登录为root 用户,而让其他组的用户即使执行“su -”、输入了正确的root 密码,也无法登录为root 用户。在UNIX 下,这个组的名称通常为“wheel”。
# usermod -G wheel test ← 将一般用户test加在管理员组wheel 组中
# vi /etc/pam.d/su ← 打开这个配置文件
#auth           required        pam_wheel.so use_uid ← 找到此行,去掉行首的“#”,在命令行模式移到光标到#按x可以删除#

auth           required        pam_wheel.so use_uid ← 变为此状态(大约在第6 行的位置)
# echo "SU_WHEEL_ONLY yes" >> /etc/login.defs ← 添加语句到行末
以上操作完成后,可以再建立一个新用户,然后用这个新建的用户测试会发现,没有加入到wheel 组的用户,执行“su -”命令,即使输入了正确的root 密码,也无法登录为root 用户。
[root@new-hostname ~]# useradd test2
[root@new-hostname ~]# passwd test2
[root@new-hostname ~]# su test2
[test2@new-hostname ~]$ su -
Password:
su: incorrect password
[6]检查系统是否正常
# more /var/log/messages //检查有无系统内核级错误信息
# dmesg //检查硬件设备是否有错误信息
# ifconfig //检查网卡设置是否正确
# ping www.163.com // 检查网络是否正常
# yum info filename // 查看安装组件的信息,例:yum info yum
# rpm -ql filename //查看文件安装到哪里
[7]root 邮件的转送
在系统出现错误或有重要通知发送邮件给root 的时候,让系统自动转送到我们通常使用的邮箱中,这样方
便查阅相关报告和日志。
# vi /etc/aliases ← 编辑aliases,添加如下行到文尾
root: ddtt3@139.com ← 加入自己的邮箱地址
# newaliases ← 重建aliasesdb
/etc/aliases: 79 aliases, longest 19 bytes, 825 bytes total
# echo test | mail root ← 发送测试邮件给root
如果成功的话,会在刚刚填入的ddtt3@139.com的邮箱中收到测试的邮件。
[8]locate 命令用数据库更新及自动更新设定
locate 命令是Linux 下告诉搜索文件用的工具,它的原理和Windows 下的“Google 桌面搜索”有点类似,是通过事先建立数据库的方式,来达到高速查找目标文件的目的。
# vi /etc/updatedb.conf ← 编辑locate 数据库更新配置文件
# updatedb ← 运行locate 数据库更新命令,稍等片刻…更新成功后出现提示符
[9]定义yum 的非官方库并更新系统
在服务器构建的过程中,我们将要用到的一些工具不存在于CentOS 中yum 的官方库中,所以需要定义yum的非官方库文件,让一些必需的工具通过yum 也能够安装。
非官方库1
# vi /etc/yum.repos.d/dag.repo ← 建立dag.repo,定义非官方库

[dag]
name=Dag RPM Repository for Red Hat Enterprise Linux
baseurl=http://apt.sw.be/redhat/el$releasever/en/$basearch/dag
gpgcheck=1
enabled=1
← 文件到此结束
[root@new-hostname CentOS]# cd /tmp
[root@new-hostname tmp]# wget http://dag.wieers.com/rpm/packages/RPM-GPG-KEY.dag.txt
# rpm --import RPM-GPG-KEY.dag.txt
← 导入非官方库的GPG

非官方库2

# vi /etc/yum.repos.d/CentOS-Base.repo 增加下面信息到文件未
[utterramblings]
name=Jason's Utter Ramblings Repo
baseurl=http://www.jasonlitka.com/media/EL$releasever/$basearch/
enabled=1
gpgcheck=1
gpgkey=http://www.jasonlitka.com/media/RPM-GPG-KEY-jlitka
← 文件到此结束

# rpm --import http://www.jasonlitka.com/media/RPM-GPG-KEY-jlitka
← 导入非官方库的GPG
更新系统
#yum -y update
[10]使用 yum 程序安装所需开发包(以下为标准的rpm包名称)
# yum -y install gcc gcc-c++ compat-gcc-34-g77 flex bison autoconf \
automake bzip2-devel zlib-devel ncurses-devel libjpeg-devel libpng-devel \
libtiff-devel freetype-devel pam-devel openssl-devel libxml2-devel \
  gettext-devel pcre-devel  //太长了,建议大家直接复制粘贴到终端中运行。
这里我们将所必须的一些小软件比如:
libpng,libtiff,freetype,libjpeg,gettext-devel等先用RPM 的方式一并安装好,避免手动编译浪费时间,同时也能避免很多错误,这几个小软件的编译很麻烦。这几个小软件编译错误了,GD当然安装不了,php5的编译当然也没戏了。所以我们抓大放小,对这些小牛鬼蛇神采取快速简洁的方式进行安装。并且对服务器的性能也不能产生什么影响。
另外libxml2系统已经默认安装了,所以我们不需要手工编译了,直接安装它的开发包就行了。

[11]关闭不需要的服务

# export LANG='en_US' //设置语言解决使用SH Secure Shell的乱码问题
# setup //选择启动的服务可以设置很多设置
进入system service 选项。
按Tab切换服务,可以space 键选定所需服务。
以下仅列出需要启动的服务,未列出的服务一律关闭(言过了,大家跟据需要来处理):
crond
irqbalance 仅当服务器CPU为S.M.P架构或支持双核心、HT技术时,才需开启,否则关闭。
microcode_ctl
network
iptables
sshd
syslog
yum-updatesd
linux开机启动服务详解
http://hegz.iteye.com/blog/642165

进入  Firewall configuration,设置为
Security Level: () Enabled ( *) Disabled                                                                                                                                                           SELinux: Permissive
可避免调试中一此莫名其妙的问题。
Selinux管理与应用
1.1 SElinux概述
SELinux(Security-Enhanced Linux) 是美国国家安全局(NAS)对于强制访问控制的实现,在这种访问控制体系的限制下,进程只能访问那些在他的任务中所需要文件。大部分使用 SELinux 的人使用的都是SELinux就绪的发行版,例如 Fedora、Red Hat Enterprise Linux (RHEL)、Debian 或 Gentoo。它们都是在内核中启用 SELinux 的,并且提供一个可定制的安全策略,还提供很多用户层的库和工具,它们都可以使用 SELinux 的功能。
1.1.1 SElinux特点
1.MAC
对访问的控制彻底化,对所有的文件、目录、端口的访问都是基于策略设定的,可由管理员时行设定。
2.RBAC
对于用户只赋予最小权限。用户被划分成了一些role(角色),即使是root用户,如果不具有sysadm_r角色的话,也不是执行相关的管理。哪里role可以执行哪些domain,也是可以修改的。
3.安全上下文
当启动selinux的时候,所有文件与对象都有安全上下文。进程的安全上下文是域,安全上下文由用户:角色:类型表示。
(1)系统根据pam子系统中的pam_selinux.so模块设定登录者运行程序的安全上下文
(2)rpm包安装会根据rpm包内记录来生成安全上下文,
(3)如果是手工他建的,会根据policy中规定来设置安全上下文,
(4)如果是cp,会重新生成安全上下文。
(5)如果是mv,安全上下文不变。
1.1.2 安全上下文格式
安全上下文由user:role:type三部分组成,下面分别说明其作用:
1.user identity:类似linux系统中的UID,提供身份识别,安全上下文中的一部分。
三种常见的user:
user_u-:   普通用户登录系统后预设;
system_u-:开机过程中系统进程的预设;
root-:    root登录后预设;
在targeted policy中users不是很重要;
在strict policy中比较重要,的有预设的selinux users都以 "_u"结尾,root除外。
2.role
文件与目录的role,通常是object_r;
程序的role,通常是system_r;
用户的role,targeted policy为system_r;
strict policy为sysadm_r,staff_r,user_r
用户的role,类似于系统中的GID,不同的角色具备不同的权限;用户可以具备多个role;但是同一时间内只能使用一role;
role是RBAC的基础;
3.type
type:用来将主体与客体划分为不同的组,组每个主体和系统中的客体定义了一个类型;为进程运行提供最低的权限环境。
当一个类型与执行的进程关联时,该type也称为domain,也叫安全上下文。
域或安全上下文是一个进程允许操作的列表,决字一个进程可以对哪种类型进行操作。
1.1.3 SElinux配置文件
vi /etc/selinux/config
# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
# enforcing - SELinux security policy is enforced.
# permissive - SELinux prints warnings instead of enforcing.
# disabled - SELinux is fully disabled.
SELINUX=enforcing
#SELINUX=disabled
# SELINUXTYPE= type of policy in use. Possible values are:
# targeted - Only targeted network daemons are protected.
# strict - Full SELinux protection.
SELINUXTYPE=targeted
#SELINUX有「disabled」「permissive」,「enforcing」3种选择。
1.模式的设置
enforcing:强制模式,只要selinux不允许,就无法执行
permissive:警告模式,将该事件记录下来,依然允许执行
disabled:关闭selinux;停用,启用需要重启计算机。

2.策略的设置
targeted:保护常见的网络服务,是selinux的默认值;
stric:提供RBAC的policy,具备完整的保护功能,保护网络服务,一般指令及应用程序。
策略改变后,需要重新启动计算机。
也可以通过命令来修改相关的具体的策略值,也就是修改安全上下文,来提高策略的灵活性。

3.策略的位置
/etc/selinux/<策略名>/policy/

1.2 SElinux命令介绍
1.2.1 查询SElinux状态命令
1.查询selinux状态
[root@redhat ~]# sestatus
SELinux status:                 enabled
SELinuxfs mount:                /selinux
Current mode:                   enforcing
Mode from config file:          enforcing
Policy version:                 21
Policy from config file:        targeted

2.查询selinux激活状态
[root@redhat ~]# selinuxenabled
[root@redhat ~]# echo $?
0
如果为-256为非激活状态。
1.2.2 切换SElinux类型
1.切换成警告模式
[root@redhat ~]# setenforce 0或setenforce permissive
[root@redhat ~]# sestatus
SELinux status:                 enabled
SELinuxfs mount:                /selinux
Current mode:                   permissive
Mode from config file:          enforcing
Policy version:                 21
Policy from config file:        targeted

[root@redhat ~]# getenforce Permissive

2.切换成强制模式
[root@redhat ~]# setenforce 1
[root@redhat ~]# getenforce Enforcing
注:使用setenforce切换enforcing与permissive模式不需要重启计算机。
1.2.3 检查安全上下文
1.检查帐号的安全上下文
[root@redhat ~]# id -Z
root:system_r:unconfined_t:SystemLow-SystemHigh

2.检查进程的安全上下文
[root@redhat home]# ps -Z
LABEL                             PID TTY          TIME CMD
root:system_r:unconfined_t:SystemLow-SystemHigh 2383 pts/0 00:00:00 bash
root:system_r:unconfined_t:SystemLow-SystemHigh 2536 pts/0 00:00:00 ps

3.检查文件与目录的安全上下文
[root@redhat home]# ls -Z
drwx------  tom  tom  system_u:object_r:user_home_dir_t tom
1.2.4 修改文件/目录安全上下文与策略
1.chcon命令
chcon -u [user]  对象
      -r [role]
      -t [type]
      -R 递归
示例:
chcon -R -t samba_share_t /tmp/abc
注:安全上下文的简单理解说明,受到selinux保护的进程只能访问标识为自己只够访问的安全上下文的文件与目录。
例如:上面解释为使用smb进程能够访问/tmp/abc目录而设定的安全上下文。

2.getsebool命令
获取本机selinux策略值,也称为bool值。
getsebool -a  命令同sestatus -b
[root@redhat files]# getsebool -a
NetworkManager_disable_trans --> off
allow_cvs_read_shadow --> off
allow_daemons_dump_core --> on
allow_daemons_use_tty --> off
allow_execheap --> off
allow_execmem --> on
allow_execmod --> off
allow_execstack --> on
allow_ftpd_anon_write --> off   /*是否允许ftp匿名访问*/
allow_ftpd_full_access --> off
...
httpd_disable_trans --> off    /*只要有disable_trans关闭保护*/

说明:selinux的设置一般通过两个部分完成的,一个是安全上下文,另一个是策略,策略值是对安全上下文的补充。

3.setsebool命令
setsebool -P allow_ftpd_anon_write=1
-P 是永久性设置,否则重启之后又恢复预设值。
示例:
[root@redhat files]# setsebool -P allow_ftpd_anon_write=1
[root@redhat files]# getsebool allow_ftpd_anon_write
allow_ftpd_anon_write --> on
说明:如果仅仅是安全上下文中设置了vsftpd进程对某一个目录的访问,配置文件中也允许可写,但是selinux中策略中不允许可写,仍然不可写。所以基于selinux保护的服务中,安全性要高于很多。

1.3 SElinux应用
selinux的设置分为两个部分,修改安全上下文以及策略,下面收集了一些应用的安全上下文,供配置时使用,对于策略的设置,应根据服务应用的特点来修改相应的策略值。
1.3.1 SElinux与samba
1.samba共享的文件必须用正确的selinux安全上下文标记。
chcon -R -t samba_share_t /tmp/abc
如果共享/home/abc,需要设置整个主目录的安全上下文。
chcon -R -r samba_share_t /home
2.修改策略(只对主目录的策略的修改)
setsebool -P samba_enable_home_dirs=1
setsebool -P allow_smbd_anon_write=1
getsebool 查看
samba_enable_home_dirs -->on
allow_smbd_anon_write --> on /*允许匿名访问并且可写*/

1.3.2 SElinux与nfs
selinux对nfs的限制好像不是很严格,默认状态下,不对nfs的安全上下文进行标记,而且在默认状态的策略下,nfs的目标策略允许nfs_export_all_ro
nfs_export_all_ro
nfs_export_all_rw值为0
所以说默认是允许访问的。
但是如果共享的是/home/abc的话,需要打开相关策略对home的访问。
setsebool -P use_nfs_home_dirs boolean 1
getsebool use_nfs_home_dirs

1.3.3 SElinux与ftp
1.如果ftp为匿名用户共享目录的话,应修改安全上下文。
chcon -R -t public_content_t /var/ftp
chcon -R -t public_content_rw_t /var/ftp/incoming

2.策略的设置
setsebool -P allow_ftpd_anon_write =1
getsebool allow_ftpd_anon_write
allow_ftpd_anon_write--> on

1.3.4 SElinux与http
apache的主目录如果修改为其它位置,selinux就会限制客户的访问。
1.修改安全上下文:
chcon -R -t httpd_sys_content_t /home/html
由于网页都需要进行匿名访问,所以要允许匿名访问。
2.修改策略:
setsebool -P allow_ftpd_anon_write = 1
setsebool -P allow_httpd_anon_write = 1
setsebool -P allow_<协议名>_anon_write = 1
关闭selinux对httpd的保护
httpd_disable_trans=0

1.3.5 SElinux与公共目录共享
如果ftp,samba,web都访问共享目录的话,该文件的安全上下文应为:
public_content_t
public_content_rw_t
其它各服务的策略的bool值,应根据具体情况做相应的修改。

1.3.6 SElinux配置总结
以上内容的selinux的配置实验还需要进行相关验证,以便在实际环境中能够直接应用,相关的内容还需要继续补充。
对于多于牛毛的策略,可以用过滤还查看一个服务相当开启哪些策略。
用OpenSSH 构建SSH 服务器
(最近更新日:2010-12-17)
前言
SSH 服务和Telnet 服务一样,通过远程登录登录到系统,在远程操控系统。但它与Telnet 的不同点就是:
Telnet 在传输的过程中是平文传输,而SSH 是将传输内容加密,在传送的过程中保证了传送内容的保密性,从而提高了系统的安全性。
当服务器的SSH 服务正常运行后,我们完全可以从此在我们的自用PC 上用SSH 客户端软件在局域网中登录到服务器,用这种方式完成服务器以后的配置和维护。不严格的说,这时服务器是不需要显示器和键盘的,因为绝大多数的配置工作都可在远端(局域网内)的客户端上操控。另外在用户认证方式上,为了服务器和用户的安全,禁止用户密码的认证方式,而基于“钥匙”的方式。
用SSH Secure Shell密钥方式登录
一、先用自已的用户登录到服务器,比如我用test登录到服务器
 
二、运行 SSH Secure Shell 工具中的“Secure Shell Client ”,选择菜单中“Edit”-> “Setting”,在打开的窗口左侧依次选择“Global Settings”->“User Authentication”->“Keys”,然后看到如下画面:

 

 三、点击“Generate New”,在打开的窗口中点击“Next”看到如下图:
选择 “RSA”和 “2048”,然后点击“Next”,稍等一会,会计算一个密钥。

 

四、看到如下图,参照图片中的内容进行填写,比如test用户可以填写成test_key,这个无所谓,不要跟其它key重复就好了。

 

  在Passphrase中填写一个密码,这个是保护本地私有密钥的密码,也就是说,即使有人盗用了你的计算机,没有这个密码,也仍然不能使用你的密钥。注意,这个不是服务器上用户密码。填写完毕点击“Next”

  五、填写完毕后,密钥就生成完了,点击完成。然后看到如下画面:

 
  
六、选择刚才生成的密钥,点击“Upload”,会弹出如下窗口:

 
  
  参考窗口中的内容填写,注意名称是自动出现的,不用管。第二项需要修改为 .ssh ,第三项不用管。
  然后点“Upload”
  注意:这个时候应该是已经登录的状态,不然公钥传不上去。

  七、如果没有提示错误,那么公钥就自动被上传到服务器上去了。

  接着要做一些手工的操作,在命令行界面里,输入如下命令: (左脚注意前面的$符号不是命令,只是个提示符)

  $ cd .ssh/

  $ ls -l

  会至少看到你刚才生成的 .pub 公钥文件和一个 authorization 认证配置文件。如果没有你刚才起的名子的文件,那就有问题,检查上面的过程。

  接着做下面的命令,假设我生成的是test_key.pub

  $ ssh-keygen -i -f test_key.pub > authorized_keys

  然后,删除刚才生成的文件:

  $ rm -f test_key.pub authorization

  再接着,修改文件权限。(注意,本步骤很重要)

  $ chmod400 *

  $ cd ../

  $ chmod 700 .ssh

  八、退出 SSH 工具。重新发起一次链接,参照下图进行选择:

  注意最后一项“Public Key”
 

  九、点击链接,然后会看到下面的提示:
 
  
  这个提示就是要你输入刚才设置的“Passphrase”密码,输入正确后,就会登录到系统中了。

  十,客户端配置最后一步,也最重要:

  本地会保存你生成的私钥和公钥,刚才所上传上去的就是公钥。每次登录,软件都会自动拿本地的私钥和远端的公钥做加密运算,然后才能登录。所以,我们必须保护我们本地的密钥文件,这个就象招商银行网上银行专业版的数字证书一样,丢了就不能再次登录了。

  密钥文件存放在本地目录:

C:\Documents and Settings\Administrator\Application Data\SSH\UserKeys

  把这个目录里的文件备份出来,压缩成带密码的压缩包,弄到手机里或者U盘里,以备重做系统后可用。
SSH相关配置文件的修改
首先修改SSH 的配置文件。如下:
# vi /etc/ssh/sshd_config ← 用vi 打开SSH 的配置文件
#Protocol 2,1 ← 找到此行将行头“#”删除,再将行末的“,1”删除,只允许SSH2 方式的连接

Protocol 2 ← 修改后变为此状态,仅使用SSH2(这版本的openssl默认有这一行不用改了)
#ServerKeyBits 768 ← 找到这一行,将行首的“#”去掉,并将768 改为2048

ServerKeyBits 2048 ← 修改后变为此状态,将ServerKey 强度改为2048比特
#PermitRootLogin yes ← 找到这一行,将行首的“#”去掉,并将yes 改为no

PermitRootLogin no ← 修改后变为此状态,不允许用root 进行登录
#PasswordAuthentication yes ← 找到这一行,将yes 改为no

PasswordAuthentication no ← 修改后变为此状态,不允许密码方式的登录
#PermitEmptyPasswords no ← 找到此行将行头的“#”删除,不允许空密码登录

PermitEmptyPasswords no ← 修改后变为此状态,禁止空密码进行登录
然后保存并退出。(vi 保存退出的命令为ZZ)
因为我们只想让SSH 服务为管理系统提供方便,所以在不通过外网远程管理系统的情况下,只允许内网客户端通过SSH 登录到服务器,以最大限度减少不安全因素。设置方法如下:
# vi /etc/hosts.deny ← 修改屏蔽规则,在文尾添加相应行
#
#hosts.deny This file describes the names of the hosts which are
# *not* allowed to use the local INET services, as decided
# by the '/usr/sbin/tcpd' server.
#
#The portmap line is redundant, but it is left to remind you that
# the new secure portmap uses hosts.deny and hosts.allow. In particular
# you should know that NFS uses portmap!
sshd: ALL ← 添加这一行,屏蔽来自所有的SSH 连接请求
# vi /etc/hosts.allow ← 修改允许规则,在文尾添加相应行
#
#hosts.allow This file describes the names of the hosts which are
# allowed to use the local INET services, as decided
# by the '/usr/sbin/tcpd' server.
#
sshd: 192.168. ← 添加这一行,只允许来自内网的SSH 连接请求

重新启动SSH服务
在修改完SSH 的配置文件后,需要重新启动SSH 服务才能使新的设置生效。
# /etc/rc.d/init.d/sshd restart ← 重新启动SSH 服务器
Stopping sshd: [ OK ]
Starting sshd: [ OK ] ← SSH 服务器重新启动成功
这时,在远程终端(自用PC 等等)上,用SSH 客户端软件以正常的密码的方式是无法登录服务器的。为了在客户能够登录到服务器,我们接下来建立SSH 用的公钥与私钥,以用于客户端以“钥匙”的方式登录SSH 服务器。
由于在SSH 服务器设定时禁止了root 直接从远程登录,所以用SSH 客户端是无法用通过root 登录的,再者,要允许某个用户对服务器进行登录,必须基于某个用户建立其相应的公钥与私钥--因为我们禁止用户通过用户密码的认证方式来登录SSH 服务器,这样就大大增强了服务器的安全性。但作为管理员,您可以将一般用户加入到wheel 组中(方法见CentOS的下载、安装及初始环境设置),然后基于此一般用户建立相应私钥于公钥,通过此用户远程登录到,然后再通过“su -”命令,获得root 权限,对系统进行配置。而且,在初始环境设置中,我们不允许wheel 组外用户“su -”登录为root 用户,从而又进一步增强了系统的安全性。
从此,我们就可以通过在Windows 下用SSH Secure Shell 登录到服务器的方式来完成所有服务器的配置工作。当然如果您喜欢,或出于其他原因,也同样可以在服务器本机上完成所有的配置工作。二者无本质的区别,这也体现了UNIX 操作系统多用户、多任务处理的特性之一。
数据完整性监测系统的构建( Tripwire档案比对工具)
(最近更新日:2010-12-19)
前言
当服务器遭到黑客攻击时,在多数情况下,黑客可能对系统文件等等一些重要的文件进行修改。对此,我们用Tripwire 建立数据完整性监测系统。虽然它不能抵御黑客攻击以及黑客对一些重要文件的修改,但是可以监测文件是否被修改过以及哪些文件被修改过,从而在被攻击后有的放矢的策划出解决办法。
Tripwire 的原理是Tripwire 被安装、配置后,将当前的系统数据状态建立成数据库,随着文件的添加、删除和修改等等变化,通过系统数据现状与不断更新的数据库进行比较,来判定哪些文件被添加、删除和修改过。正因为初始的数据库是在Tripwire 本体被安装、配置后建立的原因,我们务必应该在服务器开放前,或者说操作系统刚被安装后用Tripwire 构建数据完整性监测系统。很多网站就是基于tripwire建立网页防篡改系统。
rpm包安装tripwire
一、Tripwire 简介
1.   Tripwire是一套比对档案/目录完整性的安全工具,经由比对现存档案与先前所建立的基准数据库(baseline database),如果发现有任何数据受到新增、删除或修改,Tripwire可实时通知系统管理员,并产生弹性的可读式报告;管理员可依此评估是否要进行后续检验或系统还原的工作。
2. Tripwire RPM 版的相关档案如下:
程序文件:(在 /usr/sbin/)
-tripwire(#man tripwire):提供五大模式维护工作,(1)数据库初始化 (2)完整性检验
(3)数据库更新 (4)原则更新 (5)邮件测试
-twadmin(#man twadmin):可产生Tripwire所使用的设定档,原则档及金钥档,也用来做编码及签章
-twprint(#man twprint):以纯文字列出数据库和报告文件内容
-siggen(#man siggen):可检视档案的杂凑编码数据
设定档:/etc/tripwire/tw.cfg --(twcfg.txt-未加密)
原则档:/etc/tripwire/tw.pol --(twpol.txt-未加密)
数据库:/var/lib/tripwire/$(HOSTNAME).twd
报告档:/var/lib/tripwire/report/$(HOSTNAME)-$(DATE).twr
金钥档:分为site key和local key;site key可用在多套系统上,是用来保护设定档和原则档;
local key是针对个别主机使用的,例如每个主机的数据库
(/etc/tripwire/site.key和 $(HOSTNAME)-local.key
3. 下载软件:tar.gz: http://sourceforge.net/projects/tripwire/ (下载tripwire-2.3.1以上版本)
     rpm: http://rpmfind.net 搜寻 "tripwire"
http://www.linickx.com/archives/229/tripwire-rpm-f or-rhel-4-wbel-4-centos-4
# cd /tmp
# wgethttp://www.linickx.com/files/rpm/whitebox/4/i386/tripwire-2.4.1.1-1.i386.rpm

# rpm -ivh tripwire-2.4.1.1-1.i386.rpm
出错:Failed dependencies:libcrypto.so.4 is needed
  不明白,继续百度,老外给的答案:libcrypto.so.4 and libssl.so.4 were provided by the package openssl097a, while libdb-4.2.so is provided by db4. Check carefully the library versions inside the packages because they are updated frequently.
嗯,晓得啦~~
# yum –y install openssl097a db4
# rpm -ivh tripwire-2.4.1.1-1.i386.rpm
ok!终于装上了。验证一下:
#rpm -qa|grep tripwire
tripwire-2.4.1.1-1
#rpm -ql tripwire
/etc/cron.daily/tripwire-check
/etc/tripwire
/etc/tripwire/twcfg.txt
/etc/tripwire/twpol.txt
/usr/sbin/siggen
/usr/sbin/tripwire
/usr/sbin/tripwire-setup-keyfiles
/usr/sbin/twadmin
/usr/sbin/twprint
/usr/share/doc/tripwire-2.4.1.1
/usr/share/doc/tripwire-2.4.1.1/COMMERCIAL
/usr/share/doc/tripwire-2.4.1.1/COPYING
/usr/share/doc/tripwire-2.4.1.1/ChangeLog
/usr/share/doc/tripwire-2.4.1.1/License-Issues
/usr/share/doc/tripwire-2.4.1.1/README.Fedora
/usr/share/doc/tripwire-2.4.1.1/TRADEMARK
/usr/share/doc/tripwire-2.4.1.1/policyguide.txt
/usr/share/doc/tripwire-2.4.1.1/tripwire.gif
/usr/share/man/man4/twconfig.4.gz
/usr/share/man/man4/twpolicy.4.gz
/usr/share/man/man5/twfiles.5.gz
/usr/share/man/man8/siggen.8.gz
/usr/share/man/man8/tripwire.8.gz
/usr/share/man/man8/twadmin.8.gz
/usr/share/man/man8/twintro.8.gz
/usr/share/man/man8/twprint.8.gz
/var/lib/tripwire
/var/lib/tripwire/report
# rm -f tripwire-2.4.1.1-1.i386.rpm openssl097a db4 //删除已经安装的安装包

设定 "site keyfile" 和 "local keyfile" 密码

#/usr/sbin/tripwire-setup-keyfiles

Creating key files...

(When selecting a passphrase, keep in mind that good passphrases typically
have upper and lower case letters, digits and punctuation marks, and are
at least 8 characters in length.)

Enter the site keyfile passphrase: ← 输入“site keyfile”口令(输入后不会显示),并且记住这个口令
Verify the site keyfile passphrase: ← 再次确认“site keyfile”口令
Generating key (this may take several minutes)...Key generation complete.

(When selecting a passphrase, keep in mind that good passphrases typically
have upper and lower case letters, digits and punctuation marks, and are
at least 8 characters in length.)

Enter the local keyfile passphrase: ← 输入“local keyfile”口令(输入后不会显示),并且记住
Verify the local keyfile passphrase: ← 再次确认“local keyfile”口令
Generating key (this may take several minutes)...Key generation complete.

----------------------------------------------
Signing configuration file...
Please enter your site passphrase: ← 输入“site keyfile”口令(输入后不会显示)
A clear-text version of the Tripwire configuration file:
/etc/tripwire/twcfg.txt
has been preserved for your inspection.  It  is  recommended  that  you
move this file to a secure location and/or encrypt it in place (using a
tool such as GPG, for example) after you have examined it.


----------------------------------------------
Signing policy file...
Please enter your site passphrase: ← 输入“site keyfile”口令(输入后不会显示)
Wrote policy file: /etc/tripwire/tw.pol

A clear-text version of the Tripwire policy file:
/etc/tripwire/twpol.txt
has been preserved for  your  inspection.  This  implements  a  minimal
policy, intended only to test  essential  Tripwire  functionality.  You
should edit the policy file to  describe  your  system,  and  then  use
twadmin to generate a new signed copy of the Tripwire policy.

Once you have a satisfactory Tripwire policy file, you should move  the
clear-text version to a secure location  and/or  encrypt  it  in  place
(using a tool such as GPG, for example).

Now run "tripwire --init" to enter Database Initialization  Mode.  This
reads the policy file, generates a database based on its contents,  and
then cryptographically signs the resulting  database.  Options  can  be
entered on the command line to specify which policy, configuration, and
key files are used  to  create  the  database.  The  filename  for  the
database can be specified as well. If no  options  are  specified,  the
default values from the current configuration file are used.

配置Tripwire
[1] twcfg的配置
首先打开文本格式的配置文件twcfg.txt,该文件的位置在前面所述安装过程后的//etc/tripwire目录下。然后根据需要修改配置文件,修改完毕后存盘。最后使用twadmin命令根据已编辑的文本文件生成一个加密的配置文件。
通常情况下,配置文件的内容不会发生变化,因此没有必要去修改它,使用Tripwire默认的就可以了。在此时我们应该测试一下Email报告功能是否起作用,以防以后遇到麻烦,输入以下命令进行测试。

  #tripwire --test --email user@domain.com
[root@new-hostname tripwire]# tripwire --test --email ddtt3@139.com
Sending a test message to: ddtt3@139.com

# vi /etc/tripwire/twcfg.txt ← 修改文本格式的Tripwire 配置文件
LOOSEDIRECTORYCHECKING =false ← 找到这一个行,将false 的值变为true(不监测所属目录的数据完整性)

LOOSEDIRECTORYCHECKING =true ← 变为此状态
REPORTLEVEL =3 ← 找到这一行,将3 变为4(改变监测结果报告的等级)

REPORTLEVEL =4 ← 变为此状态
# /usr/sbin/twadmin -m F --site-keyfile /etc/tripwire/site.key  /etc/tripwire/twcfg.txt ← 从文本配置文件建立加密格式配置文件
Please enter your site passphrase: ← 输入“site keyfile”口令(输入后不会显示)
Wrote configuration file: /etc/tripwire/tw.cfg
# rm -f /etc/tripwire/twcfg.txt ← 为不留安全隐患,删除文本格式的配置文件
注:恢复文本格式的Tripwire 配置文件,可通过执行“twadmin --print-cfgfile > /etc/tripwire/twcfg.txt”。
[2] Policy 文件的配置
 首先打开文本格式的策略文件twpol.txt。该文件的位置在前面所述安装过程后的/etc/tripwire/目录下。Tripwire在安装时已经在策略文件中写入了默认的检查规则。这些默认的规则主要检查重要的系统文件和Tripwire自身文件的完整性。

  由于默认的配置就不能监视系统中的SUID和SGID文件,而这对于我们的系统安全是非常重要的,因此,我们需要修改配置加入对这个项目的监视。使用如下命令可以找出系统中的所有SUID文件:

  #find / -type f -perm -4000 -print
  以下命令可以找出系统中的所有SGID文件:

  #find / -type f -perm -2000 -print
  现在,我们需要把以上命令找出的SUID和SGID文件加入到Tripwire的/策略文件中去。除此之外,我们还要把所有用户home目录下的初始文件也纳入监视的范畴。主要包括以下文件:

.bashrc、.profile、.bash_profile、.cshrc、kshrc、.login等
bash、csh以及ksh登录之后的初始化命令或者脚本
.forward:告诉/usr/lib/sendmail把邮件转发到某些地址
.rhosts:可以使用rsh登录到本帐户的远程主机名
.xinitrc、.Xauthority、Xdefault等X窗口系统的一些重要文件
在创建Tripwire的特征码数据库之前,还有一件事情要做,就是检查.netrc和.rhosts文件的权限是否是600。修改完策略文件后存盘。最后使用twadmin命令根据已编辑的文本文件生成一个加密的策略文件。最后,策略文件的文本文件要删除掉,否则该文件的内容易被察看。

修改原则文件以符合系统现有的档案架构

#cd /etc/tripwire
# vi /etc/tripwire/twpol.txt ← 编辑Policy 文件
$(TWREPORT) -> $(SEC_CONFIG) (recurse=0) ; ← 找到这一行,在这一行的下一行添加语句(113 行前后)
!$(TWDB)/$(HOSTNAME).twd ; ← 添加这一句(不对数据库进行监测)
# /usr/sbin/twadmin -m P /etc/tripwire/twpol.txt← 从文本配置文件建立加密格式配置文件
Please enter your site passphrase: ← 输入“site keyfile”口令(输入后不会显示)
Wrote policy file: /etc/tripwire/tw.pol
# rm -f /etc/tripwire/twpol.txt ← 为不留安全隐患,删除文本格式的配置文件
[3] 建立数据库
根据新的原则文件重建数据库
#/usr/sbin/tripwire -m i ← 建立数据库
Please enter your local passphrase: ← 输入“local keyfile”口令(输入后不会显示)
Parsing policy file: /etc/tripwire/tw.pol
Generating the database...
*** Processing Unix File System ***
Wrote database file: /var/lib/tripwire/new-hostname.domainname.twd
The database was successfully generated.
运行Tripwire
下面开始测试并让Tripwire 开始工作。
[1] 建立Tripwire 运行脚本:
可在 /etc/cron.daily/ 下新增 script: (tw-check)
#vi /etc/cron.daily/tw-check
#!/bin/bash
/usr/sbin/tripwire -m c | mail -s "Tripwire Daily Report from {$HOSTNAME}" root@localhost
# chmod 700 /etc/cron.daily/tw-check ← 赋予运行脚本文件可执行的权限
注:Tripwire 的监测报告会被加密保存到/var/lib/tripwire/report 目录下。日志被保存在/var/log/messages中。
[2] 测试运行脚本
# cd /etc/cron.daily/
#sh tw-check ← 运行一次脚本
由于增加了运行脚本本身,也被认作系统被作了改动,会发邮件通知root…查看邮箱回收到监测报告
# sh tw-check ← 再次运行一次脚本
由于两次连续运行,之间不太可能有文件变更,所以请确认不会发送E-mail 给root .
[3]运行完整性检查
# ls -l /var/lib/tripwire/report/ ← 监测报告所在目录的文件列表
  基准数据库生成完毕之后,我们可以使用tripwire命令随时进行完整性检查了:
  #tripwire --check
  进行检查时可以指定检查报告的存贮位置:
  #tripwire --check --twfile/var/lib/report/report.twr  //twr文件名根据实际填写
  进行检查时也可发送Email报告结果:
  #tripwire --check --email-report
  进行检查时指定使用Email进行发送的报告等级:
  #tripwire --check --email-report --email-report-level 2
  使用指定严重性等级的规则进行检查:
  #tripwire --check --severity 80
  使用指定的规则名进行检查:
  #tripwire --check --rule-name rulename
  只检查指定的文件或目录:
  #tripwire --check object1 object2 object3 …
  进行检查时忽略某些属性(因为有些属性的检查比较耗费系统资源,比如Hash算法):
  #tripwire --check --ignore "property, property, property, property"
  如果完整性检查完毕后,发现Email报告功能未生效,可以检查两个方面:一个是策略文件中规则的emailto属性必须填写妥当,另一个是运行tripwire命令时,--email-report选项必须被包含。
[4] 在服务器本地监测报告的浏览
# ls -l /var/lib/tripwire/report/ ← 监测报告所在目录的文件列表
total 16
16 -rw-r--r-- 1 root root 11606 Dec 25 07:54 new-hostname.domainname-20101225-074801.twr ← 比如想浏览此篇报告
# cd /etc/tripwire ← 进入Tripwire 配置文件所在目录
# twprint -m r -c tw.cfg -r /var/lib/tripwire/report/ new-hostname.domainname-20101225-074801.twr -L site.key -t 4 > tripwire-report  ←此处无换行,将加密的报告内容输出到一个文本文件
# cat tripwire-report ← 浏览监测报告

完整性检查进行完毕后,我们就可以查阅报告以发现有哪些文件遭到了改动,改动了什么。使用twprint命令可以输出报告,它有多种使用方式。注意twr文件名按实际文件名。
  如下命令将加密的报告内容输出到显示器:
  #twprint --print-report --twrfile /var/lib/report/{HOSTNAME}-{DATE}.twr
  如下命令将加密的报告内容输出到一个文本文件:
  #twprint --print-report --twrfile /var/lib/report/{HOSTNAME}-{DATE}.twr - >myreport.txt
  如下命令输出报告时指定输出的报告等级:
  #twprint --print-report --report-level 4 --twrfile /var/lib/report/{HOSTNAME}-{DATE}.twr
[5] Database Update Mode(升级基准数据库文件)
如果系统有新增或修改档案,需更新数据库:
#/usr/sbin/tripwire -m u -r /var/lib/tripwire/report/{HOSTNAME}-{DATE}.twr
例如:
#/usr/sbin/tripwire -m u -r /var/lib/tripwire/report/new-hostname.domainname-20101225-074801.twr
或者是
# tripwire --update --twrfile /var/lib/tripwire/report/new-hostname.domainname-20101225-074801.twr
进入 vi 编辑模式,在报告文件中有违反原则的会有一个选择框 ([X]),若维持"X"表示接受此更动,如果移除"X"则表示不更新此变化(未来再检查还是会列出来),改完存盘时需输入local key密码,Tripwire会更新数据库并存盘
[6] Policy Update Mode(升级策略文件)
将现有的原则档(加密版)汇出为 twpol.txt(纯文字版)
#/usr/sbin/twadmin -m p > /etc/tripwire/twpol.txt ,改完再更新回加密版
#/usr/sbin/tripwire -m p /etc/tripwire/twpol.txt
#/usr/sbin/tripwire -m c    < --立即做检查,并记得删除 twpol.txt !!!
#/rm twpol.txt
[7] 要更新设定档
需先汇出现有的设定档(加密版)为纯文字格式
#/usr/sbin/twadmin -m f > /etc/tripwire/twcfg.txt ,改完再更新回加密版
#/usr/sbin/twadmin -m F --site-keyfile /etc/tripwire/site.key  twcfg.txt
#rm twcfg.txt
[8]改变site key和local key
  sitekey和localkey是在安装时生成的,但是也可以随时修改。注意,如果已经用来加密的

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics