2008年11月28日星期五

RHEL4下的kickstart+dhcp+tftp+pxelinux+nfs全自动安装指南

原理:
1、客户机必须自带支持pxe的网卡,并将bios设为网络启动。
2、网卡的启动模块中的固化程序先申请ip地址,dhcp服务器做出应答。
3、dhcp服务器指定客户机的ip、pxelinux启动程序及配置文件的位置。
4、客户机通过dhcp服务器指定的文件位置,通过tftp方式从tftp服务器下载对应文件。包括:pxelinux.0、pxelinux.cfg/default、vmlinuz、initrd.img等文件
5、根据pxelinux.cfg/default文件,下载nfs目录下的ks.cfg文件,按照该文件的配置,使用nfs自动下载所需的rpm包,并安装。

过程:
tftp、nfs服务器为同一台机器10.0.1.61 dhcp为单独服务器
redhat源文件路径:/home/os/rhel4
tftp主目录:/tftpboot

1、配置/etc/dhcpd.conf,添加:
group {
next-server 10.0.1.61;
filename "rhel4/pxelinux.0";

host netman1 {
hardware ethernet 00:0d:56:10:ae:20;
fixed-address 10.0.1.1;
}
}
其中,
next-server 10.0.1.61 指定tftp服务器的ip
filename "rhel4/pxelinux.0" 指定客户机的启动文件
host {...} 指定要使用pxe安装的客户机ip
重启dhcp服务器:/etc/init.d/dhcpd restart

2、配置tftp服务器
打开/etc/xinetd.d/tftp文件,设disable=no。
启动xinetd:/etc/init.d/xinetd restart
默认情况下,tftp服务器的主目录是/tftpboot,将第一张光盘的isolinux下的所有文件都拷贝到/tftpboot下。
执行:mkdir -p /tftpboot/pxelinux.cfg
mv /tftpboot/isolinux.cfg /tftpboot/pxelinux.cfg/default
修改default文件,添加:
label auto
kernel vmlinuz
append initrd=initrd.img ks=nfs:10.0.1.61:/home/os/rhel4/ks.cfg devfs=nomount ramdisk_size=8192 nofb
其中,ks指定了ks.cfg文件所在的位置。注意,不要将initrd=ininrd.img的位置放到后面,有可能起不出来咯:)
目前,ks好像不支持ftp方式,只支持http和nfs。
http方式的格式为:
ks=http:///

3、配置ks.cfg文件。
这个步骤相对简单,找台linux机器,在x下运行redhat-config-kickstart(RHEL3)或system-config-kickstart(RHEL4)。配置完保存在nfs服务器的/home/os/rhel4/ks.cfg就可以了。

4、拷贝rhel4的cd1源包到目录/home/os/rhel4下,cd2/3/4下的rpm包都放到/home/os/rhel/RedHat/RPMS/下。

5、配置nfs服务器
配置/etc/exports文件,添加
/home/os/rhel4/ *(rw)
启动portmap、nfs

6、差不多了,打开客户机,在出现boot:下键入auto看看:)

解决apache Web服务器中文网页显示乱码

解决的方法之一:
(1)在每一个网页里增加
< meta http-equiv="Content-Language" content="zh-cn" >;
< meta http-equiv="Content-Type" content="text/html; charset=GB2312" >;
并在APACHE的httpd.conf配置文件中将AddDefaultCharset ISO-8859-1 改为 AddDefaultCharset off

解决的方法之二:
直接在httpd.conf配置文件中将AddDefaultCharset ISO-8859-1 改为
AddDefaultCharset GB2312 .ZH-CN .zh-cn
上述两种方法都可以解决apache Web服务器网页显示乱码的问题。 其中以第二种方法最好最简单,且一劳永逸。

解决的方法之三:
把所有 AddDefaultCharset选项全部禁用,网站会自动选择编码。

2008年11月25日星期二

在用SSH远程操作的时候经常遇到断线的解决办法

问题:
在用SSH远程操作的时候经常遇到断线,怎么回到任务去啊
比如我正在安装编译一个程序,忽然终端段开了,我再次连接上去的时候已经是[root@localhost~]#
怎么才能回到任务中去继续啊,晕啊


回答:
在这种情况下,一般只能重新编译安装。

因为通过这个终端连接到主机所进行的编译与安装操作是基于这个终端的。

P.S. 通过 ps ax 可以查看到系统进程会随着该用户终端的关闭而中止基于这个终端的用户操作。

需要补充的是:根据 y178574112 的描述,虽然已经无法回到断开的任务中继续,但是如果在编译安装时,通过 nohup 来执行,既可以在超时断开,以及登出服务器后也能够继续让其在后台运行。

例如:
# nohup make install

这样即使断开终端,也不会让安装终止,直到安装进行完毕自动结束。

2008年11月23日星期日

linux下查看某个服务的pid

比如看时间服务器的:
[root@web1 ~]# pgrep ntpd
24947

如何为grub加密

为grub密分为二种,一是明文,二是采用MD5算法的加密。
明文加密:编辑 grub.conf文件
vim /boor/grub/grub.conf 在default=0下面加一行 password=1234567890(这个就是明文密码)

MD5加密:先要命令 grub-md5-crypt计算出MD5的值,然后复制这个值到grub.conf文件中 password --md5$BYxEn$e5X/xOTS2pTpPPWtgIMhU1(这个就是用MD5加密后的值)

2008年11月19日星期三

linux重启鼠标命令

重启鼠标命令: /etc/rc.d/init.d/gpm restart

2008年11月14日星期五

linux救援模式,grub篇

  1. 在出现grub画面时,用上下键选中你平时启动linux的那一项(别选dos哟),然后按e键
  2. 再次用上下键选中你平时启动linux的那一项(类似于kernel /boot/vmlinuz-2.4.18-14 ro root=LABEL=/),然后按e键
  3. 修改你现在见到的命令行,加入single,结果如下:
  kernel /boot/vmlinuz-2.4.18-14 single ro root=LABEL=/
  4. 回车返回,然后按b键启动,即可直接进入linux命令行
  5. #vi /etc/shadow
  将第一行,即以root开头的一行中root:后和下一个:前的内容删除,
  第一行将类似于
  root::......
  保存
  6.也可以使用命令:passwd 修改密码。
  7. #reboot重启,root密码为空

GRUB下进入单用户模式

在出现grub画面时,用上下键选中你平时启动linux的那一项(别选dos哟),然后按e键
2. 再次用上下键选中你平时启动linux的那一项(类似kernel /boot/vmlinuz-2.4.18-14 ro 然后按e键
3. 修改你现在见到的命令行,加入single,结果如下:
kernel /boot/vmlinuz-2.4.18-14 single ro root=LABEL=/ 4. 回车返回,然后按b键启动,即可直接进入linux命令行

kernel /boot/vmlinuz-2.4.18-14 single ro root=LABEL=/
这一行中加single是关键的,在其它很多网站上说的比较模糊涂.

2008年11月13日星期四

如何显示linux系统中注册的用户数(含系统用户)

wc --lines /etc/passwd

36 /etc/passwd

nl /etc/passwd | head

1 root:x:0:0:root:/root:/bin/bash
2 bin:x:1:1:bin:/bin:/sbin/nologin
3 daemon:x:2:2:daemon:/sbin:/sbin/nologin
4 adm:x:3:4:adm:/var/adm:/sbin/nologin
5 lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
6 sync:x:5:0:sync:/sbin:/bin/sync
7 shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
8 halt:x:7:0:halt:/sbin:/sbin/halt
9 mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
10 news:x:9:13:news:/etc/news:

需要找出/etc/my.conf文件属于哪个包

执行rpm -qf /etc/my.conf即可。

安装src.rpm

#rpmbuild --rebuild mplayer-0.90pre8.20021004-1.src.rpm
#cd /usr/src/redhat(or other)/RPMS/i386/
#rpm -ivh xxxxx.rpm


rpmbuild那个包第二张盘里有,rpm-build

远程用SSH登陆redhat AS 4服务器,连接记录日志都在哪个文件?

cat /var/log/secure

2008年11月10日星期一

在Linux操作系统下手动分析病毒样本技巧

在Linux操作系统下手动分析病毒样本技巧

 原理:利用md5值的不同进行文件的对比。
  操作背景:

  1. XP安装光盘;

  2. 病毒样本;

  3. U盘;

  4. Ubuntu 7.10 LiveCD

  5.所需的几个对比md5和转化二进制文件格式的程序

  操作过程:

  1. 全盘格式化,同时安装Windows(也可采用ghost回去,但是一定注意其他磁盘可能的病毒感染)

  2. 在刚装好的Windows下,导出注册表。将导出文件放入C盘根目录下。这里我命名为1.reg

  3. 进入Ubuntu系统,注意,进入前f2选择简体中文模式

  4. 挂载C盘:

  mkdir /mnt/hdd1 (生产系统C盘挂载点)

  mount -t ntfs -o iocharset=cp936 /dev/hdd1 /mnt/hdd1 (将系统C盘挂载到/mnt/hdd1下,注意文件格式和设备号视具体情况而定)

  5. 挂载U盘:

  mkdir /mnt/usb (生成U盘挂载点)

  mount -t vfat /dev/sda1 /mnt/usb (将U盘挂载到/mnt/usb下,同样注意文件格式和设备号)

  6. 将导出的注册表信息放入U盘:

  假设U盘上已经有test目录,同时,在test目录下有parse.sh,parseWinReg,ShowList 三个程序

  cp /mnt/hdd1/1.reg /mnt/usb/test (将导出注册表拷贝至/mnt/usb/test目录下)

  cd /mnt/usb/test (进入U盘test 目录)

  ./parseWinReg 1.reg origreg (将导出注册表进行格式转换,生成origreg)

  7. 计算C盘所有文件md5值:

  rm /mnt/hdd1/pagefile.sys (这个文件太大影响计算速度,删除)

  /mnt/usb/test/parse.sh /mnt/hdd1/ > /mnt/usb/origfile (计算磁盘文件md5值,并将结果导出至U盘test目录下origfile)

  8. 重新进入Windows,同时,激发病毒文件

  注意:先将病毒文件放入磁盘,拔掉U盘,拔掉网线,再激发!

  9. 重复3,4,5,6,7步骤

  mkdir /mnt/hdd1

  mount -t ntfs -o iocharset=cp936 /dev/hdd1 /mnt/hdd1

  mkdir /mnt/usb

  mount -t vfat /dev/sda1 /mnt/usb

  cp /mnt/hdd1/2.reg /mnt/usb/test (这里假设导出的注册表是2.reg)

  cd /mnt/usb/test

  ./parseWinReg 2.reg newreg

  rm /mnt/hdd1/pagefile.sys

  /mnt/usb/test/parse.sh /mnt/hdd1/ > /mnt/usb/newfile

  10. 至此,我们得到了原始的系统信息:origreg, origfile,中病毒之后的信息:newreg, newfile

  11. 比较文件不同之处:diff -Nur origfile newfile > filediff

  12. 比较注册表不同之处:diff -Nur origreg newreg > regdiff

  13. 分析filediff 和 regdiff,得到结论

  分析小技巧:一般情况下前面出现+的就是病毒释放的,-就是有过改动的(感染的),如果是md5值是成双成对出现(一个+和一个-),那那一行一般不是,如果前面没有任何标记,那说明也不是。咱们把没用的删除,只留下有单个+或者单个-的,最好看文件路径,即得到了病毒的产生文件或者是感染文件。

2008年11月6日星期四

常用的Linux网络安全工具介绍

常用的Linux网络安全工具介绍
作者:吴阿亭

简介:
  尽管各种版本的Linux distribution 附带了很多开放源的自由软件,但是仍然有大量的有用的工具没有被默认。
  包括在它们的安装光盘内,特别是有一些可以增强Linux网络安全的工具包,它们大多也是开放源的自由软件。

这里简单地介绍一下几个增强Linux网络安全的工具。
1. sudo
   sudo是系统管理员用来允许某些用户以root身份运行部分/全部系统命令的程序。一个明显的用途是增强了站点的安全性,如果你需要每天以root身份做一些日常工作,经常执行一些固定的几个只有root身份才能执行的命令,那么用sudo对你是非常适合的。
sudo的主页在:http://www.courtesan.com/courtesan/products/sudo/
   以Redhat 为例,下面介绍一下安装及设置过程:
  首先,你能从sudo主页上下载for Redhat Linux的rpm package.
它在ftp://ftp.freshmeat.net/pub/rpms/sudo/ 当前最新的稳定版本1.5.9p4。

  执行#rpm -ivh sudo* 进行安装,然后用/usr/sbin/visudo编辑/etc/sudoers文件。
如果系统提示你找不到/usr/bin/vi但实际上你在目录/bin下有vi程序,你需要
ln -sf /bin/vi /usr/bin/vi为vi 在/usr/bin下创建符号链接。(注:我在Redhat 6.1上遇到,Redhat 5.x上没有此问题)
  另外,如果出现某些其它错误,你可能还需要#chmod 700 /var/run/sudo

下面是我的/etc/sudoers文件例子:

[Copy to clipboard] [ - ]CODE:
[root@sh-proxy /etc]# more sudoers
Host_Alias SERVER=sh-proxy

# User alias specification

User_Alias ADMIN=jephe,tome

# Cmnd alias specification

Cmnd_Alias SHUTDOWN=/etc/halt,/etc/shutdown,/etc/reboot

ADMIN SERVER=SHUTDOWN
jephe SERVER=/usr/bin/tail -f /var/log/maillog
jephe SERVER=/usr/bin/tail -f /var/log/messages

# User privilege specification
root ALL=(ALL) ALL
-----------

  既然我经常需要远程登录到服务器观察email log文件/var/log/maillog的变化,因此我加了这一行到 /etc/sudoers,这样我不需要经常登录作为root来完成我的日常工作,改善了安全性。

2. Sniffit
  sniffit 是一个有名的网络端口探测器,你可以配置它在后台运行以检测哪些Tcp/ip端口上用户的输入/输出信息。
  最常用的功能是攻击者可以用它来检测你的23(telnet)和110(pop3)端口上的数据传送以轻松得到你的登录口令和mail帐号密码,sniffit基本上是被破坏者所利用的工具,但是既然想知道如何增强你的站点的安全性,首先你应该知晓闯入者们所使用的各种工具。

  sniffit 的主页在 http://reptile.rug.ac.be/~coder/sniffit/sniffit.html你能从那里下载最新的版本,安装是非常容易的,就在根目录运行#tar xvfz sniff*解开所有文件到对应目录。

  你能运行sniffit -i以交互式图形界面查看所有在指定网络接口上的输入/输出信息。

如:为了得到所有用户通过某接口a.b.c.d接收邮件时所输入的pop3帐号和密码,你能运行
#sniffit -p 110 -t a.b.c.d &
#sniffit -p 110 -s a.b.c.d &
记录文件放在目录/usr/doc/sniffit*下面:
  log file根据访问者的IP地址,随机高端端口号和用来检测的网络接口IP地址和检测端口来命名。它利用了tcp/ip协议天生的虚弱性,因为普通的telnet和pop3所传的用户名和密码信息都是明文,不带任何方式的加密。 因此对telnet/ftp.你可以用ssh/scp来替代. sniffit检测到的ssh/scp信息基本上是一堆乱码,因此你不需要担心ssh所传送的用户名和口令信息会被第三方所窃取。


3. ttysnoop(s)
  ttysnoop是一个重定向对一个终端号的所有输入/输出到另一个终端的程序。目前我所知道的它的所在网站为http://uscan.cjb.net,但是始终连不上去,从其它途径我得到了ttysnoop-0.12c-5 ,地址是http://rpmfind.net/linux/RPM/contrib/libc6/i386/ttysnoop-0.12c-5.i386.html这个版本好象还不能支持shadow password,安装后你需要手动创建目录/var/spool/ttysnoop测试这个程序是有趣的,下面是相关指令:

  首先改/etc/inetd.conf中的in.telnetd默认调用login登录程序为/sbin/ttysnoops,象下面这样:

[Copy to clipboard] [ - ]CODE:
[root@jephe /etc]# more inetd.conf | grep in.telnetd
telnet stream tcp nowait root /usr/sbin/tcpd in.telnetd -L /sbin/ttysnoops
  更改后一定要运行killall -HUP inetd使之生效,确保不要使用阴影口令,用#pwunconv禁止阴影口令。
再编辑文件/etc/snooptab默认配置就可以了。

[Copy to clipboard] [ - ]CODE:
[root@jephe /etc]# more snooptab
ttyS1 /dev/tty7 login /bin/login
ttyS2 /dev/tty8 login /bin/login
* socket login /bin/login
------
  最后,如果在某个终端上有人登录进来(你可以用w命令查看它在哪个终端),如登录终端设备为ttyp0,则你可以登录进服务器打入#/bin/ttysnoop ttyp0(提示输入root口令,再次,上面提到的这个版本不支持阴影口令)以监视用户的登录窗口。

4. nmap
  nmap 是用来对一个比较大的网络进行端口扫描的工具,它能检测该服务器有哪些tcp/ip端口目前正处于打开状态。你可以运行它来确保已经禁止掉不该打开的不安全的端口号。
  nmap的主页在http://www.insecure.org/nmap/index.html

下面给出一个简单的例子:

[Copy to clipboard] [ - ]CODE:
[root@sh-proxy /etc]# /usr/local/bin/nmap public.sta.net.cn

Starting nmap V. 2.12 by Fyodor (fyodor@dhp.com, www.insecure.org/nmap/)
Interesting ports on public.sta.net.cn (202.96.199.97):
Port State Protocol Service
21 open tcp ftp
23 open tcp telnet
25 open tcp smtp
109 open tcp pop-2
110 open tcp pop-3
143 open tcp imap2
513 open tcp login
514 open tcp shell
7000 open tcp afs3-fileserver

Nmap run completed -- 1 IP address (1 host up) scanned in 15 seconds
第二部分

一 John the ripper

  在Linux中,密码以hash格式被存储,你不能反向从该hash数据表中分析出密码,但可以以一组单词hash后和它进行比较,如相同则就猜测出密码。故起一个很难被猜测的密码是非常关键的。一般地你决不能用字典存在的某个单词作为密码,那是相当容易被猜测出来的。另外也不能用一些常见的有规则性的字母数字排列来作为密码,以123abc等。

  John the ripper是一个高效的易于使用的密码猜测程序,其主页在http://www.openwall.com/john/
下载tar.gz格式的for UNIX的程序,然后用tar xvfz john*.tar.gz解开到任一目录下。进入src目录,打入 make linux-x86-any-elf (我用redhat 6.1)后会在run目录下生成几个执行文件,包括主程序john。现在要Crack密码就运行./john /etc/passwd即可。

  John也可以Crack由htpasswd 生成的用于验证apache用户的密码,如果你用htpasswd -c apachepasswd user创建了一个用户user,并生成了密码,你也可以用john apachepasswd来进行猜测。John在猜测密码时输出在终端上,并把猜测出的密码存于john.pot文件中。
  另一个password Cracker是大家知道的经典的Cracker. 主页在http://www.users.dircon.co.uk/~crypto/

二.Logcheck

  Logcheck是用来自动检查系统安全入侵事件和非正常活动记录的工具,它分析各种Linux log文件,
象/var/log/messages, /var/log/secure,/var/log/maillog等等,然后生成一个可能有安全问题的问题报告自动发送email给管理员。你能设置它基于每小时,或者每天用crond来自动运行。

  logcheck工具的主页在http://www.psionic.com/abacus/logcheck/下载后用tar xvfz logcheck*解开到一临时目录如/tmp下,然后用./make linux自动生成相应的文件到/usr/local/etc,/usr/local/bin/等目录下,你可能更改设置如发送通知能谁的邮件帐号,默认发送到root,你能设置root的邮件别名帐号到一批人,更改设置让其忽略某些类型的消息如你的邮件记录文件中的plug-gw,因为plug-gw做反向IP查找,若找不到则记录一个警告消息到/var/log/maillog,logcheck默认记录下所有这些警告发送给你,你可以通过设置忽略掉它们。

  利用logcheck工具分析你的所有logfile,避免了你每天经常手动地检查它们,节省了时间,提高了效率。

三. Tripwire

  Tripwire 是一个用来检验文件完整性的非常有用的工具,你能定义哪些文件/目录需要被检验,不过默认设置能满足大多数的要求,它运行在四种模下:数据库生成模式,数据库更新模式,文件完整性检查,互动式数据库更新。当初始化数据库生成的时候,它生成对现有文件的各种信息的数据库文件,万一以后你的系统文件或者各种配置文件被意外地改变,替换,删除,它将每天基于原始的数据库对现有文件进行比较发现哪些文件被更改,你能根据email的结果判断是否有系统入侵等意外事件。

  Tripwire的主页在 http://www.tripwiresecurity.com , tripwire-1.2.3的版本你能免费使用。如果你使用Redhat Linux 6.1,你也能得到最新的为6.1重建的Tripwire-1.2.3
(http://rufus.w3.org/linux/RPM/powertools/6.1/i386/tripwire-1.2-3.i386.html)当你手动更改了系统中的配置文件或程序时,你能手动再次生成一次数据库文件,运行 tripwire-initialize 在当前目录下创建databases目录并在该目录下生成新的系统数据库文件,然后cp到/var/spool/tripwire目录中覆盖旧的。

Linux安全配置步骤简述

Linux安全配置步骤简述

一、磁盘分区

1、如果是新安装系统,对磁盘分区应考虑安全性:
  1)根目录(/)、用户目录(/home)、临时目录(/tmp)和/var目录应分开到不同的磁盘分区;
  2)以上各目录所在分区的磁盘空间大小应充分考虑,避免因某些原因造成分区空间用完而导致系统崩溃;

2、对于/tmp和/var目录所在分区,大多数情况下不需要有suid属性的程序,所以应为这些分区添加nosuid属性;
    方法一:修改/etc/fstab文件,添加nosuid属性字。例如:

    /dev/hda2 /tmp ext2 exec,dev,nosuid,rw 0 0
^^^^^^
    方法二:如果对/etc/fstab文件操作不熟,建议通过linuxconf程序来修改。

    * 运行linuxconf程序;
    * 选择"File systems"下的"Access local drive";
    * 选择需要修改属性的磁盘分区;
    * 选择"No setuid programs allowed"选项;
    * 根据需要选择其它可选项;
    * 正常退出。(一般会提示重新mount该分区)


二、安装

1、对于非测试主机,不应安装过多的软件包。这样可以降低因软件包而导致出现安全漏洞的可能性。
2、对于非测试主机,在选择主机启动服务时不应选择非必需的服务。例如routed、ypbind等。


三、安全配置与增强

内核升级。起码要升级至2.2.16以上版本。
GNU libc共享库升级。(警告:如果没有经验,不可轻易尝试。可暂缓。)
关闭危险的网络服务。echo、chargen、shell、login、finger、NFS、RPC等
关闭非必需的网络服务。talk、ntalk、pop-2等
常见网络服务安全配置与升级
确保网络服务所使用版本为当前最新和最安全的版本。
取消匿名FTP访问
去除非必需的suid程序
使用tcpwrapper
使用ipchains防火墙
日志系统syslogd


一些细节:

1.操作系统内部的log file是检测是否有网络入侵的重要线索,当然这个假定你的logfile不被侵入者所破坏,如果你有台服务器用专线直接连到Internet上,这意味着你的IP地址是永久固定的地址,你会发现有很多人对你的系统做telnet/ftp登录尝试,试着运行#more /var/log/secure | grep refused 去检查。

2. 限制具有SUID权限标志的程序数量,具有该权限标志的程序以root身份运行,是一个潜在的安全漏洞,当然,有些程序是必须要具有该标志的,象passwd程序。

3.BIOS安全。设置BIOS密码且修改引导次序禁止从软盘启动系统。

4. 用户口令。用户口令是Linux安全的一个最基本的起点,很多人使用的用户口令就是简单的‘password',这等于给侵入者敞开了大门,虽然从理论上说没有不能确解的用户口令,只要有足够的时间和资源可以利用。比较好的用户口令是那些只有他自己能够容易记得并理解的一串字符,并且绝对不要在任何地方写出来。

5./etc/exports 文件。如果你使用NFS网络文件系统服务,那么确保你的/etc/exports具有最严格的存取权限设置,不意味着不要使用任何通配符,不允许root写权限,mount成只读文件系统。编辑文件/etc/exports并且加:例如:

/dir/to/export host1.mydomain.com(ro,root_squash)
/dir/to/export host2.mydomain.com(ro,root_squash)

/dir/to/export 是你想输出的目录,host.mydomain.com是登录这个目录的机器名,
ro意味着mount成只读系统,root_squash禁止root写入该目录。
为了让上面的改变生效,运行/usr/sbin/exportfs -a

6.确信/etc/inetd.conf的所有者是root,且文件权限设置为600 。
[root@deep]# chmod 600 /etc/inetd.conf
ENSURE that the owner is root.
[root@deep]# stat /etc/inetd.conf
File: "/etc/inetd.conf"
Size: 2869 Filetype: Regular File
Mode: (0600/-rw-------) Uid: ( 0/ root) Gid: ( 0/ root)
Device: 8,6 Inode: 18219 Links: 1
Access: Wed Sep 22 16:24:16 1999(00000.00:10:44)
Modify: Mon Sep 20 10:22:44 1999(00002.06:12:16)
Change:Mon Sep 20 10:22:44 1999(00002.06:12:16)

编辑/etc/inetd.conf禁止以下服务:
ftp, telnet, shell, login, exec, talk, ntalk, imap, pop-2, pop-3, finger,
auth, etc. 除非你真的想用它。
特别是禁止那些r命令.如果你用ssh/scp,那么你也可以禁止掉telnet/ftp。

为了使改变生效,运行#killall -HUP inetd
你也可以运行#chattr +i /etc/inetd.conf使该文件具有不可更改属性。
只有root才能解开,用命令
#chattr -i /etc/inetd.conf

7. TCP_WRAPPERS
默认地,Redhat Linux允许所有的请求,用TCP_WRAPPERS增强你的站点的安全性是举手
之劳,你可以放入
“ALL: ALL”到/etc/hosts.deny中禁止所有的请求,然后放那些明确允许的请求到
/etc/hosts.allow中,如:
sshd: 192.168.1.10/255.255.255.0 gate.openarch.com
对IP地址192.168.1.10和主机名gate.openarch.com,允许通过ssh连接。
配置完了之后,用tcpdchk检查

[root@deep]# tcpdchk
tcpchk是TCP_Wrapper配置检查工具,
它检查你的tcp wrapper配置并报告所有发现的潜在/存在的问题。

8. 别名文件aliases
编辑别名文件/etc/aliases(也可能是/etc/mail/aliases),移走/注释掉下面的行。

# Basic system aliases -- these MUST be present.
MAILER-DAEMON: postmaster
postmaster: root
# General redirections for pseudo accounts.
bin: root
daemon: root
#games: root ?remove or comment out.
#ingres: root ?remove or comment out.
nobody: root
#system: root ?remove or comment out.
#toor: root ?remove or comment out.
#uucp: root ?remove or comment out.
# Well-known aliases.
#manager: root ?remove or comment out.
#dumper: root ?remove or comment out.
#operator: root ?remove or comment out.
# trap decode to catch security attacks
#decode: root
# Person who should get root's mail
#root: marc
最后更新后不要忘记运行/usr/bin/newaliases,使改变生效。

9.阻止你的系统响应任何从外部/内部来的ping请求。
既然没有人能ping通你的机器并收到响应,你可以大大增强你的站点的安全性。你可以加下面的一行命令到/etc/rc.d/rc.local,以使每次启动后自动运行。

echo 1 >; /proc/sys/net/ipv4/icmp_echo_ignore_all

10. 不要显示出操作系统和版本信息。
如果你希望某个人远程登录到你的服务器时不要显示操作系统和版本信息,你能改变
/etc/inetd.conf中的一行象下面这样:

telnet stream tcp nowait root /usr/sbin/tcpd in.telnetd -h

加-h标志在最后使得telnet后台不要显示系统信息,而仅仅显示login:

11.The /etc/host.conf file
编辑host.conf文件(vi /etc/host.conf)且加下面的行:

# Lookup names via DNS first then fall back to /etc/hosts.
order bind,hosts
# We don't have machines with multiple IP addresses on the same card
(like virtual server,IP Aliasing).
multi off
# Check for IP address spoofing.
nospoof on
IP Spoofing: IP-Spoofing is a security exploit that works by tricking
computers in a trust relationship that you are someone that you really aren't.

12. The /etc/securetty file
该文件指定了允许root登录的tty设备,/etc/securetty被/bin/login程序读取,它的
格式是一行一个被允许的名字列表,如你可以编辑/etc/securetty且注释出下面的行。
tty1
#tty2
#tty3
#tty4
#tty5
#tty6
#tty7
#tty8
-意味着root仅仅被允许在tty1终端登录。

13. 特别的帐号
禁止所有默认的被操作系统本身启动的且不需要的帐号,当你第一次装上系统时就应该做此检查,Linux提供了各种帐号,你可能不需要,如果你不需要这个帐号,就移走它,你有的帐号越多,就越容易受到攻击。
为删除你系统上的用户,用下面的命令:
[root@deep]# userdel username
为删除你系统上的组用户帐号,用下面的命令:
[root@deep]# groupdel username
在终端上打入下面的命令删掉下面的用户。
[root@deep]# userdel adm
[root@deep]# userdel lp
[root@deep]# userdel sync
[root@deep]# userdel shutdown
[root@deep]# userdel halt
[root@deep]# userdel mail
如果你不用sendmail服务器,procmail.mailx,就删除这个帐号。
[root@deep]# userdel news
[root@deep]# userdel uucp
[root@deep]# userdel operator
[root@deep]# userdel games
如果你不用X windows 服务器,就删掉这个帐号。
[root@deep]# userdel gopher
[root@deep]# userdel ftp
如果你不允许匿名FTP,就删掉这个用户帐号。
===
打入下面的命令删除组帐号
[root@deep]# groupdel adm
[root@deep]# groupdel lp
[root@deep]# groupdel mail
如不用Sendmail服务器,删除这个组帐号
[root@deep]# groupdel news
[root@deep]# groupdel uucp
[root@deep]# groupdel games
如你不用X Windows,删除这个组帐号
[root@deep]# groupdel dip
[root@deep]# groupdel pppusers
[root@deep]# groupdel popusers
如果你不用POP服务器,删除这个组帐号
[root@deep]# groupdel slipusers
====
用下面的命令加需要的用户帐号
[root@deep]# useradd username
用下面的命令改变用户口令
[root@deep]# passwd username

用chattr命令给下面的文件加上不可更改属性。
[root@deep]# chattr +i /etc/passwd
[root@deep]# chattr +i /etc/shadow
[root@deep]# chattr +i /etc/group
[root@deep]# chattr +i /etc/gshadow

14. 阻止任何人su作为root.
如果你不想任何人能够su作为root,你能编辑/etc/pam.d/su加下面的行:

auth sufficient /lib/security/pam_rootok.so debug
auth required /lib/security/pam_wheel.so group=isd

意味着仅仅isd组的用户可以su作为root.
然后,如果你希望用户admin能su作为root.就运行下面的命令。

[root@deep]# usermod -G10 admin

16. 资源限制
对你的系统上所有的用户设置资源限制可以防止DoS类型攻击(denial of service attacks)
如最大进程数,内存数量等。例如,对所有用户的限制象下面这样:
编辑/etc/security/limits.con加:

* hard core 0
* hard rss 5000
* hard nproc 20
你也必须编辑/etc/pam.d/login文件加/检查这一行的存在。

session required /lib/security/pam_limits.so

上面的命令禁止core files“core 0”,限制进程数为“nproc 50“,且限制内存使用
为5M“rss 5000”。

17. The /etc/lilo.conf file

a) Add: restricted
加这一行到每一个引导映像下面,就这表明如果你引导时用(linux single),则需要一个password.

b) Add: password=some_password
当与restricted联合用,且正常引导时,需要用户输入密码,你也要确保lilo.conf
文件不能被不属于root的用户可读,也免看到密码明文。下面是例子:
编辑/etc/lilo.conf加:
====
boot=/dev/sda
map=/boot/map
install=/boot/boot.b
prompt
timeout=50
Default=linux
restricted ?add this line.
password=some_password ?add this line.
image=/boot/vmlinuz-2.2.12-20
label=linux
initrd=/boot/initrd-2.2.12-10.img
root=/dev/sda6
read-only
[root@deep]# chmod 600 /etc/lilo.conf (不再能被其他用户可读).
[root@deep]# /sbin/lilo -v (更新lilo配置).
[root@deep]# chattr +i /etc/lilo.conf(阻止该文件被修改)

18. 禁止 Control-Alt-Delete 重启动机器命令

[root@deep]# vi /etc/inittab
ca::ctrlaltdel:/sbin/shutdown -t3 -r now
To
#ca::ctrlaltdel:/sbin/shutdown -t3 -r now
[root@deep]# /sbin/init q

19. 重新设置/etc/rc.d/init.d/目录下所有文件的许可权限
[root@deep]# chmod -R 700 /etc/rc.d/init.d/*
仅仅root可以读,写,执行上述所有script file.

20. The /etc/rc.d/rc.local file
默认地,当你login到linux server时,它告诉你linux版本名,内核版本名和服务器
主机名。它给了你太多的信息,如果你就希望得到提示login: ,编辑
/etc/rc.d/rc.local放#在下面的行前面:
--
# This will overwrite /etc/issue at every boot. So, make any changes you
# want to make to /etc/issue here or you will lose them when you reboot.
#echo "" >; /etc/issue
#echo "$R" >;>; /etc/issue
#echo "Kernel $(uname -r) on $a $(uname -m)" >;>; /etc/issue
#
#cp -f /etc/issue /etc/issue.net
#echo >;>; /etc/issue
--
然后,做下面的事情:
[root@deep]# rm -f /etc/issue
[root@deep]# rm -f /etc/issue.net
[root@deep]# touch /etc/issue
[root@deep]# touch /etc/issue.net

21. 被root拥有的程序的位。
移走那些被root拥有程序的s位标志,当然有些程序需要这个,用命令‘chmod a-s’完成这个。
注:前面带(*)号的那些程序一般不需要拥有s位标志。

[root@deep]# find / -type f \( -perm -04000 -o -perm -02000 \) \-exec ls –lg {} \;
-rwsr-xr-x 1 root root 33120 Mar 21 1999 /usr/bin/at
*-rwsr-xr-x 1 root root 30560 Apr 15 20:03 /usr/bin/chage
*-rwsr-xr-x 1 root root 29492 Apr 15 20:03 /usr/bin/gpasswd
-rwsr-xr-x 1 root root 3208 Mar 22 1999 /usr/bin/disable-paste
-rwxr-sr-x 1 root man 32320 Apr 9 1999 /usr/bin/man
-r-s--x--x 1 root root 10704 Apr 14 17:21 /usr/bin/passwd
-rws--x--x 2 root root 517916 Apr 6 1999 /usr/bin/suidperl
-rws--x--x 2 root root 517916 Apr 6 1999 /usr/bin/sperl5.00503
-rwxr-sr-x 1 root mail 11432 Apr 6 1999 /usr/bin/lockfile
-rwsr-sr-x 1 root mail 64468 Apr 6 1999 /usr/bin/procmail
-rwsr-xr-x 1 root root 21848 Aug 27 11:06 /usr/bin/crontab
-rwxr-sr-x 1 root slocate 15032 Apr 19 14:55 /usr/bin/slocate
*-r-xr-sr-x 1 root tty 6212 Apr 17 11:29 /usr/bin/wall
*-rws--x--x 1 root root 14088 Apr 17 12:57 /usr/bin/chfn
*-rws--x--x 1 root root 13800 Apr 17 12:57 /usr/bin/chsh
*-rws--x--x 1 root root 5576 Apr 17 12:57 /usr/bin/newgrp
*-rwxr-sr-x 1 root tty 8392 Apr 17 12:57 /usr/bin/write
-rwsr-x--- 1 root squid 14076 Oct 7 14:48 /usr/lib/squid/pinger
-rwxr-sr-x 1 root utmp 15587 Jun 9 09:30 /usr/sbin/utempter
*-rwsr-xr-x 1 root root 5736 Apr 19 15:39 /usr/sbin/usernetctl
*-rwsr-xr-x 1 root bin 16488 Jul 6 09:35 /usr/sbin/traceroute
-rwsr-sr-x 1 root root 299364 Apr 19 16:38 /usr/sbin/sendmail
-rwsr-xr-x 1 root root 34131 Apr 16 18:49 /usr/libexec/pt_chown
-rwsr-xr-x 1 root root 13208 Apr 13 14:58 /bin/su
*-rwsr-xr-x 1 root root 52788 Apr 17 15:16 /bin/mount
*-rwsr-xr-x 1 root root 26508 Apr 17 20:26 /bin/umount
*-rwsr-xr-x 1 root root 17652 Jul 6 09:33 /bin/ping
-rwsr-xr-x 1 root root 20164 Apr 17 12:57 /bin/login
*-rwxr-sr-x 1 root root 3860 Apr 19 15:39 /sbin/netreport
-r-sr-xr-x 1 root root 46472 Apr 17 16:26 /sbin/pwdb_chkpwd
[root@deep]# chmod a-s /usr/bin/chage
[root@deep]# chmod a-s /usr/bin/gpasswd
[root@deep]# chmod a-s /usr/bin/wall
[root@deep]# chmod a-s /usr/bin/chfn
[root@deep]# chmod a-s /usr/bin/chsh
[root@deep]# chmod a-s /usr/bin/newgrp
[root@deep]# chmod a-s /usr/bin/write
[root@deep]# chmod a-s /usr/sbin/usernetctl
[root@deep]# chmod a-s /usr/sbin/traceroute
[root@deep]# chmod a-s /bin/mount
[root@deep]# chmod a-s /bin/umount
[root@deep]# chmod a-s /bin/ping
[root@deep]# chmod a-s /sbin/netreport

你可以用下面的命令查找所有带s位标志的程序:
[root@deep]# find / -type f \( -perm -04000 -o -perm -02000 \) \-exec ls -lg {} \;
>; suid-sgid-results
把结果输出到文件suid-sgid-results中。

为了查找所有可写的文件和目录,用下面的命令:
[root@deep]# find / -type f \( -perm -2 -o -perm -20 \) -exec ls -lg {} \; >; ww-files-results
[root@deep]# find / -type d \( -perm -2 -o -perm -20 \) -exec ls -ldg {} \; >; ww-directories-results

用下面的命令查找没有拥有者的文件:
[root@deep]# find / -nouser -o -nogroup >; unowed-results

用下面的命令查找所有的.rhosts文件:
[root@deep]# find /home -name .rhosts >; rhost-results


建议替换的常见网络服务应用程序

WuFTPD
WuFTD从1994年就开始就不断地出现安全漏洞,黑客很容易就可以获得远程root访问(Remote Root Access)的权限,而且很多安全漏洞甚至不需要在FTP服务器上有一个有效的帐号。最近,WuFTP也是频频出现安全漏洞。
它的最好的替代程序是ProFTPD。ProFTPD很容易配置,在多数情况下速度也比较快,而且它的源代码也比较干净(缓冲溢出的错误比较少)。有许多重要的站点使用ProFTPD。sourceforge.net就是一个很好的例子(这个站点共有3,000个开放源代码的项目,其负荷并不小啊!)。一些Linux的发行商在它们的主FTP站点上使用的也是ProFTPD,只有两个主要Linux的发行商(SuSE和Caldera)使用WuFTPD。
ProFTPD的另一个优点就是既可以从inetd运行又可以作为单独的daemon运行。这样就可以很容易解决inetd带来的一些问题,如:拒绝服务的攻击(denial of service attack),等等。系统越简单,就越容易保证系统的安全。WuFTPD要么重新审核一遍全部的源代码(非常困难),要么完全重写一遍代码,否则WuFTPD必然要被ProFTPD代替。

Telnet
Telnet是非常非常不安全的,它用明文来传送密码。它的安全的替代程序是OpenSSH。
OpenSSH在Linux上已经非常成熟和稳定了,而且在Windows平台上也有很多免费的客户端软件。Linux的发行商应该采用OpenBSD的策略:安装OpenSSH并把它设置为默认的,安装Telnet但是不把它设置成默认的。对于不在美国的Linux发行商,很容易就可以在Linux的发行版中加上OpenSSH。美国的Linux发行商就要想一些别的办法了(例如:Red Hat在德国的FTP服务器上(ftp.redhat.de)就有最新的OpenSSH的rpm软件包)。
Telnet是无可救药的程序。要保证系统的安全必须用OpenSSH这样的软件来替代它。

Sendmail
最近这些年,Sendmail的安全性已经提高很多了(以前它通常是黑客重点攻击的程序)。然而,Sendmail还是有一个很严重的问题。一旦出现了安全漏洞(例如:最近出现的Linux内核错误),Sendmail就是被黑客重点攻击的程序,因为Sendmail是以root权限运行而且代码很庞大容易出问题。
几乎所有的Linux发行商都把Sendmail作为默认的配置,只有少数几个把Postfix或Qmail作为可选的软件包。但是,很少有Linux的发行商在自己的邮件服务器上使用Sendmail。SuSE和Red Hat都使用基于Qmail的系统。
Sendmail并不一定会被别的程序完全替代。但是它的两个替代程序Qmail和Postfix都比它安全、速度快,而且特别是Postfix比它容易配置和维护。

su
su是用来改变当前用户的ID,转换成别的用户。你可以以普通用户登录,当需要以root身份做一些事的时候,只要执行“su”命令,然后输入root的密码。su本身是没有问题的,但是它会让人养成不好的习惯。如果一个系统有多个管理员,必须都给他们root的口令。
su的一个替代程序是sudo。Red Hat 6.2中包含这个软件。sudo允许你设置哪个用户哪个组可以以root身份执行哪些程序。你还可以根据用户登录的位置对他们加以限制(如果有人“破”了一个用户的口令,并用这个帐号从远程计算机登录,你可以限制他使用sudo)。Debian也有一个类似的程序叫super,与sudo比较各有优缺点。
让用户养成良好的习惯。使用root帐号并让多个人知道root的密码并不是一个好的习惯。这就是www.apache.org被入侵的原因,因为它有多个系统管理员他们都有root的特权。一个乱成一团的系统是很容易被入侵的。

named
大部分Linux的发行商都解决了这个问题。named以前是以root运行的,因此当named出现新的漏洞的时候,很容易就可以入侵一些很重要的计算机并获得root权限。现在只要用命令行的一些参数就能让named以非root的用户运行。而且,现在绝大多数Linux的发行商都让named以普通用户的权限运行。命令格式通常为:named -u ; -g ;

INN
在INN的文档中已经明确地指出:“禁止这项功能(verifycancels),这项功能是没有用的而且将被除掉”。大约在一个月前,一个黑客发布了当“verifycancels”生效的时候入侵INN的方法。Red Hat是把“verifycancels”设为有效的。任何setuid/setgid的程序或网络服务程序都要正确地安装并且进行检查以保证尽量没有安全漏洞。





安全守则

1. 废除系统所有默认的帐号和密码。
2. 在用户合法性得到验证前不要显示公司题头、在线帮助以及其它信息。
3. 废除“黑客”可以攻击系统的网络服务。
4. 使用6到8位的字母数字式密码。
5. 限制用户尝试登录到系统的次数。
6. 记录违反安全性的情况并对安全记录进行复查。
7. 对于重要信息,上网传输前要先进行加密。
8. 重视专家提出的建议,安装他们推荐的系统“补丁”。
9. 限制不需密码即可访问的主机文件。
10.修改网络配置文件,以便将来自外部的TCP连接限制到最少数量的端口。不允许诸如tftp,sunrpc,printer,rlogin或rexec之类的协议。
11.用upas代替sendmail。sendmail有太多已知漏洞,很难修补完全。
12.去掉对操作并非至关重要又极少使用的程序。
13.使用chmod将所有系统目录变更为711模式。这样,攻击者们将无法看到它们当中有什么东西,而用户仍可执行。
14.只要可能,就将磁盘安装为只读模式。其实,仅有少数目录需读写状态。
15.将系统软件升级为最新版本。老版本可能已被研究并被成功攻击,最新版本一般包括了这些问题的补救。

2008年11月5日星期三

系统安全防护之UNIX下入侵检测方法

摘要:因为UNIX系统经常承当着关键任务,所以它经常是入侵者攻击的首选目标。于是检测入侵、保护系统安全是管理员的最为重要的任务之一。那么,在没有其它工具帮助的情况下,如何去判断系统当前的安全性?如何去发现入侵呢?下面给大家介绍一些常用到的检查方法 .


因为UNIX系统经常承当着关键任务,所以它经常是入侵者攻击的首选目标。于是检测入侵、保护系统安全是管理员的最为重要的任务之一。那么,在没有其它工具帮助的情况下,如何去判断系统当前的安全性?如何去发现入侵呢?下面给大家介绍一些常用到的检查方法
以LINUX和solaris为例:

1、检查系统密码文件
首先从明显的入手,查看一下passwd文件,ls –l /etc/passwd查看文件修改的日期。
输入命令
awk –F:’$3==0 {print $1}’ /etc/passwd来检查一下passwd文件中有哪些特权用户,系统中uid为0的用户都会被显示出来。顺便再检查一下系统里有没有空口令帐户:
awk –F: ‘length($2)==0 {print $1}’ /etc/shadow

2、查看一下进程,看看有没有奇怪的进程
重点查看进程:ps –aef grep inetd。Inetd是UNIX系统的守护进程,正常的inetd的pid都比较靠前,如果你看到输出了一个类似inetd –s /tmp/.xxx之类的进程,着重看inetd –s后面的内容。在正常情况下,LINUX系统中的inetd服务后面是没有-s参数的,当然也没有用inetd去启动某个文件;而solaris系统中也仅仅是inetd –s,同样没有用inetd去启动某个特定的文件;如果你使用ps命令看到inetd启动了某个文件,而你自己又没有用inetd启动这个文件,那就说明已经有人入侵了你的系统,并且以root权限起了一个简单的后门。
输入ps –aef 查看输出信息,尤其注意有没有以./xxx开头的进程。一旦发现异样的进程,经检查为入侵者留下的后门程序,立即运行kill –9 pid 开杀死该进程,然后再运行ps –aef查看该进程是否被杀死;一旦此类进程出现杀死以后又重新启动的现象,则证明系统被人放置了自动启动程序的脚本。这个时候要进行仔细查找:find / -name 程序名 –print,假设系统真的被入侵者放置了后门,根据找到的程序所在的目录,UNIX下隐藏进程有的时候通过替换ps文件来做,检测这种方法涉及到检查文件完整性,一会我们再讨论这种方法。接下来根据找到入侵者在服务器上的文件目录,一步一步进行追踪。

3、检查系统守护进程
检查/etc/inetd.conf文件,输入:
cat /etc/inetd.conf grep –v “^#”输出的信息就是你这台机器所开启的远程服务。一般入侵者可以通过直接替换in.xxx程序来创建一个后门,比如用/bin/sh 替换掉in.telnetd,然后重新启动inetd服务,那么telnet到服务器上的所有用户将不用输入用户名和密码而直接获得一个rootshell。

4、检查网络连接和监听端口
输入netstat -an,列出本机所有的连接和监听的端口,查看有没有非法连接。
输入netstat –rn,查看本机的路由、网关设置是否正确。
输入 ifconfig –a,查看网卡设置。

5、检查系统日志
命令last more查看在正常情况下登录到本机的所有用户的历史记录。但last命令依赖于syslog进程,这已经成为入侵者攻击的重要目标。入侵者通常会停止系统的syslog,查看系统syslog进程的情况,判断syslog上次启动的时间是否正常,因为syslog是以root身份执行的,如果发现syslog被非法动过,那说明有重大的入侵事件。
在linux下输入ls –al /var/log
在solaris下输入 ls –al /var/adm
检查wtmp utmp,包括messgae等文件的完整性和修改时间是否正常,这也是手工擦除入侵痕迹的一种方法。

6、检查系统中的core文件
通过发送畸形请求来攻击服务器的某一服务来入侵系统是一种常规的入侵方法,典型的RPC攻击就是通过这种方式。这种方式有一定的成功率,也就是说它并不能100%保证成功入侵系统,而且通常会在服务器相应目录下产生core文件,全局查找系统中的core文件,输入find / -name core –exec ls –l {} \; 依据core所在的目录、查询core文件来判断是否有入侵行为。

7、检查系统文件完整性
检查文件的完整性有多种方法,通常我们通过输入ls –l 文件名来查询和比较文件,这种方法虽然简单,但还是有一定的实用性。但是如果ls文件都已经被替换了就比较麻烦。在LINUX下可以用rpm –V `rpm –qf 文件名` 来查询,查询的结果是否正常来判断文件是否完整。在LINUX下使用rpm来检查文件的完整性的方法也很多,这里不一一赘述,可以man rpm来获得更多的格式。
UNIX系统中,/bin/login是被入侵者经常替换作为后门的文件,接下来谈一下login后门 :
UNIX里,Login程序通常用来对telnet来的用户进行口令验证。入侵者获取login的源代码并修改,使它在比较输入口令与存储口令时先检查后门口令。如果用户敲入后门口令,它将忽视管理员设置的口令让你长驱直入:这将允许入侵者进入任何账号,甚至是root目录。由于后门口令是在用户真实登录并被日志记录到utmp和wtmP前产生的一个访问,所以入侵者可以登录获取shell却不会暴露该账号。管理员注意到这种后门后,使用”strings”命令搜索login程序以寻找文本信息。
许多情况下后门口令会原形毕露。入侵者又会开始加密或者更改隐藏口令,使strings命令失效。所以许多管理员利用MD5校验和检测这种后门。UNIX系统中有md5sum命令,输入md5sum 文件名检查该文件的md5签名。它的使用格式如下:
md5sum –b 使用二进制方式阅读文件;
md5sum –c 逆向检查MD5签名;
md5sum –t 使用文本方式阅读文件。
在前面提到过守护进程,对于守护进程配置文件inetd.conf中没有被注释掉的行要进行仔细比较,举个简单的例子,如果你开放了telnet服务,守护进程配置文件中就会有一句:
telnet stream tcp nowait root /usr/sbin/in.telnetd in.telnetd
可以看到它所使用的文件是 /usr/sbin/in.telnetd,检查该文件的完整性,入侵者往往通过替换守护进程中允许的服务文件来为自己创建一个后门。
LINUX系统中的/etc/crontab也是经常被入侵者利用的一个文件,检查该文件的完整性,可以直接cat /etc/crontab,仔细阅读该文件有没有被入侵者利用来做其他的事情。
不替换login等文件而直接使用进程来启动后门的方法有一个缺陷,即系统一旦重新启动,这个进程就被杀死了,所以得让这个后门在系统启动的时候也启动起来。通常通过检查/etc/rc.d下的文件来查看系统启动的时候是不是带有后门程序。说到这里,另外提一下,如果在某一目录下发现有属性为这样的文件:-rwsr-xr-x 1 root root xxx .sh,这个表明任何用户进来以后运行这个文件都可以获得一个rootshell,这就是setuid文件。运行 find –perm 4000 –print对此类文件进行全局查找,然后删除这样的文件。

8、检查内核级后门
如果你的系统被人安装了这种后门,通常都是比较麻烦的,首先,检查系统加载的模块,在LINUX系统下使用lsmod命令,在solaris系统下使用modinfo命令来查看。这里需要说明的是,一般默认安装的LINUX加载的模块都比较少,通常就是网卡的驱动;而solaris下就很多,没别的办法,只有一条一条地去分析。对内核进行加固后,应禁止插入或删除模块,从而保护系统的安全,否则入侵者将有可能再次对系统调用进行替换。我们可以通过替换create_module()和delete_module()来达到上述目的。另外,对这个内核进行加固模块时应尽早进行,以防系统调用已经被入侵者替换。如果系统被加载了后门模块,但是在模块列表/proc/module里又看不到它们。出现这种情况,需要仔细查找/proc目录,根据查找到的文件和经验来判断被隐藏和伪装的进程,当然目录也可能不是隐藏的。
手工的入侵检测行为对于系统安全来说只是治标而不治本,多半还是依靠管理员的技巧和经验来增强系统的安全性,没有,也不可能形成真正的安全体系,虽然好过没有,可以检测和追踪到某些入侵行为,但如果碰上同样精通系统的入侵者就很难抓住踪迹了。搭建真正的安全体系需要配合使用入侵检测系统,一个优秀的入侵检测系统辅以系统管理员的技巧和经验可以形成真正的安全体系,有效判断和切断入侵行为,真正保护主机、资料。

http://blog.chinaunix.net/u2/69926/showart.php?id=702718
How to Check Loaded Modules [如何检查装入的模块]

2008年11月4日星期二

用Flood进行WEB服务器测试

当你设置好服务器投入使用后,你最关心的事莫过于服务器的性能了。你可以用一些手动的方法进行测试,但手动方法有很多局限性。


  先不论手工测试方法所投入的时间和精力问题,用手工方法测试的一大不足就是它不容易揭示出你的站点的真正问题所在,是服务器设置的问题还是因为一些动态组件又或是网络基础设施造成的问题?


  幸运的Apache HTTP工程包含了一个名为HTTPD-Test的子工程,正如这个名称所揭示的,这是一个Apache的通用测试工具包,这个包里包含了大量的不同工具,而本文将主要介绍其中一个名为洪水(Flood)的工具,它之所以如此命名,是因为它利用向服务器发出洪水般的大量请求测试服务器的响应时间。


  洪水使用一个XML文件来进行必要的测试设置,包括测试中使用的URL和POST数据和准备测试的服务器组,然后Flood开始测量以下一系统操作的时间:


  打开一个到服务器的socket

  
向socket写入对服务器的请求

  
读出服务器的响应

  
关闭socket


  当测试结束,管理员就可以了解到是否存在Apache服务器(或其它HTTP服务器)的设置问题,服务器的实际负荷,硬件的性能表现和是否存在着网络基础设置瓶颈。


  安装Flood


  你可以在Apache网站下载httpd-test和apr/apr-util软件包,后者是当从Apache的CVS服务器上直接build时所需要的。你必需先进行登录(密码是"anoncvs")


  $ cvs -d :pserver:anoncvs@cvs.apache.org:/home/cvspublic login

  $ cvs -d
:pserver:anoncvs@cvs.apache.org:/home/cvspublic co httpd-test/flood

  $ cd httpd-test/flood

  $ cvs -d
:pserver:anoncvs@cvs.apache.org:/home/cvspublic co apr

  $ cvs -d
:pserver:anoncvs@cvs.apache.org:/home/cvspublic co apr-util


  如果你取得了源码,你可以用下面的命令安装


  $ buildconf

  $ configure

  $ make all


  现在,安装完成了。


  设置Flood


  Flood通过一个XML格式的设置文件来定义测试中使用的各种参数,我们不妨通过一个形象的比喻也说明一下Flood的工作过程和需要设置的各个方面。首先,Flood使用一个模型(profile)来定义一组给定的URL如何被访问,具体的访问由一个或多个农夫(farmer)来进行,而这些农夫又属于一个或多个农场(farm),我们来看一下下面这个示意图:


  如图所示,现在我们使用一个农场,这个农场有两组农夫,其中农夫组Joe使用访问模型A与一个包含五个地址的URL列表,农夫组B使用访问模型B与一个包含三个URL的地址列表,这些家夫直接向WEB服务器请求列表中的地址。Flood使用线程来创建各个农夫,然后比较各个农夫收集到的数据并存入一个单独的文件以便之后做进一步的处理。


  XML文件包括了这个测试需要定义的四个方面:URL列表,访问模型,农夫和农场。


  URL列表也即一组即将被访问的地址的列表,这些URL地址可以被简单的引用进一步定义特定的请求方法(GET,POST,HEAD)。


  访问模型定义测试使用哪一个地址列表,它们如何被访问,使用哪一种Socket,收集的信息如何被报告。


  农夫负责实际的请求过程,对农夫唯一的可设置选项是使用哪一个访问模型和对一个访问模型的调用次数。每个农夫独立的执行自己的访问模型,但一个访问模型可以执行多次,因此最后的请求过程可能是这样:地址一、地址二、地址一、地址二、……。


  对家场的定义涉及到创建农夫的数目和时间,通过增加一个家场创建农夫的数目,可以增加并发请求的数目。并通一些附加的设置,你可以设置一些初始数目的农夫,然后每隔特定的时间增加一定的农夫数量。例如,你可以开始创建两个农夫,然后每5秒钟增加一个农夫,直到农夫数目达到20时停止增加。这可以在一个给定的期间形成一个最大20的并发访问升级过程,然后又逐步将并发请求数降到0。另外也可以模拟这种访问情况,一定数目的访问者长时期的访问一系列页面,并操持最大并发请求数在5-6之间。


  注意:到写这篇文章的时候为止,目前的Flood仅支持一个农场,而且它的名子必须是"Bingo",不过,通过为一个农场定义多个农夫,你可以取得同样的基本效果。


  通过调节农夫,农场和URL列表的参数,你可以控制总请求数,并发请求数,测试时间(基于URL列表,重复次数和农夫的数量可以决定这一点),以及这些请求在整个测试期间的分布,这就允许你针对不同的条件订制你的测试。


  在使用Flood进行测试设置时你应该记住的三个基本点是:


  地址列表定义了农夫们将访问的地址

  
每个农夫的重复数目定义了一个用户访问你的站点的次数。

  
一个农场的农夫数目定义了并发访问用户的数目。


  在Flood发行包里的examples目录下有一个样例设置文件,round-robin.xml可能是一个最适合初学者学习的例子,不过本文并不准备就编辑此XML文件的规则或处理产生的数据文件做进一步的解说。


  这里,我们主要想讲一下如何针对不同类型的WEB服务器来调整测试的参数。为了便于理解后面的内容,这里我们先看一下使用examples目录下的analyze-relative测试脚本得到的一个结果。在这个例子中,测试对象是一台内部服务器。


  Slowest pages on average (worst 5):

  Average times (sec)

  connect write   read   
close   hits   URL

  0.0022  0.0034  0.0268 
0.0280  100    http://test.mcslp.pri/java.html

  0.0020  0.0028  0.0183 
0.0190  700    http://www.mcslp.pri/

  0.0019  0.0033  0.0109 
0.0120  100    http://test.mcslp.pri/random.html

  0.0022  0.0031  0.0089 
0.0107  100    http://test.mcslp.pri/testr.html

  0.0019  0.0029  0.0087 
0.0096  100    http://test.mcslp.pri/index.html

  Requests: 1200 Time: 0.14 Req/Sec: 9454.08


  在这里你可以看到测试中进行连接(connect),请求(write/request),回应(read /response),关闭连接(close)的平均时间。你也可以对服务器每称处理的请求数目有个基本的印象。


  对于新闻类站点的测试


  对于如New York Times、Slashdot之类的新闻站点以及一些BLOG之类,它们都有一个主要的首页,首页上有着众多到栏目页和内容页的连接,对某条信息感兴趣的读者可以点进去仔细阅读。


  通常情况下,这类站点的首页访问量相对固定而对于其它页面,访问量的变化就会更大一些。如果它推出了RSS/RDF订阅服务,那么就会出现一定量的直接到内容页的流量而不经过首页。大部分的此类站点都使用了某种内容的动态化技术,而Flood是测试这类动态站点的一个不错方法,特别你可以将之与一些静态站的响应相对比。


  你可以用以下的参数设置模拟对一个新闻类型的网站的访问:


Farmer Set A



Farmer Set B



Farmer Set C



URL List



Homepage Only



Homepage +3 stories



3 story pages



Repeat Count



1



3



3



Count



100



20



20



Start Count



5



5



5



Start Delay



1



5



5



Notes



Home page only



Homepage+Stories



Stories only (RSS)




  测试在线商店站点


  在线商店,在线商品目录或其它一些更具交互性的网站则有不同的使用模型。虽然仍会有一部分人到达你的首页,一些人会直接进入你站内的某一个页面,大多数用户会在你的站里找来找去,他们可能会在一个产品页上浏览大量的产品,进行一些搜索或者点击进入一些相关的产品页面。


  因此,你应该用更大数量的地址列表测试这类站点,更大的重复次数(以模拟大量的用户)和相对新闻类站点比较低的并发访问数目:


Farmer Set



URL List



10-15 pages



Repeat Count



5



Count



50



Start Count



5



Start Delay



5




  测试 "Slashdot" 效应


  有时,你必须测试你的系统能否应付某个特定时刻大量用户同时访问你的网站的情况。很多网站已经遇到过这个问题,一次重大事件中对于Slashdot网站的几个页面的引用就引发了对这个页面的巨量并发请求。


  典型的情况下这些请求仅针对一个特殊的页面,我们可以通过在Flood中创建成百上千的家夫来并发请求服务器上的特定页面来模拟这种情况,通过设置高重复率和延迟系统来模拟一定时间内大量用户的连续访问。


Farmer Set



URL List



1 page



Repeat Count



50



Count



250



Start Count



100



Start Delay



1




  测试技巧


  为了让以上各类测试都工作得很好,你应该记住以下几点:


  最重要的是,不要直接在WEB服务器上用Flood进行测试,如果你这样做你仅仅是在测试一台机器打开一个网络连接与自己通讯的能力,一定要在另一台机器上进行测试。

  
要对自己机器的一些技术限制有所了解,这包括你机器容许的最大线程数和最大网络连接数,如果你试图创建超过这个限制的农夫将会带来让人难以理解的测试结果。

  
Flood是一个客户端解决方案,因此对于在多台机器上进行测试没有任何限制。事实上我们推荐你这样做,因为这是一个在想进行饱和性测试时避免你的客户机系统的技术限制的好方法。

  
Flood测试由于是在客户机上运行,它的表现也要依赖于客户的性能,如果客户机系统处于繁忙的状态,Flood进程会与其它客户进程一样被阻塞,因此,最好使用一台专用的客户机进行测试,如果客户机上还运行着其它任务,在开始测试之前最好关掉它们。

 原文地址 http://www.bsdlover.cn/html/12/n-1012.html