CNSCN安全性能检测

原贴:http://blog.chinaunix.net/u/13329/showart.php?id=99059

 
CNSCN安全性能检测
 
 
[更多安全问题请访问] http://www.cnscn.org


. 系统各项指标检测
在UNIX中用sar命令进行系统维护
本文出自: http://www.yesky.com/ 作者: 周娟 (2002-01-07 08:10:00)
  在使用UNIX操作系统的过程中,我们常常会用到各种各样的问题,比如系统运行速度
突然变慢,系统容易死机或者主机所带的终端常出现死机,这时我们常常猜测,是硬
盘空间太小,还是内存不足?I/O出现瓶颈,或者是系统的核心参数出了问题?这时,
我们应该考虑使用系统给我们提供的sar命令来对系统作一个了解,该命令是系统维护
的重要工具,主要帮助我们掌握系统资源的使用情况,特别是内存和CPU 的使用情况,
是UNIX系统使用者应该掌握的工具之一。
sar 命令行的常用格式:

sar [options] [-A] [-o file] t [n]

在命令行中,n 和t 两个参数组合起来定义采样间隔和次数,t为采样间隔,是必须有
的参数,n为采样次数,是可选的,默认值是1,-o file表示将命令结果以二进制格式
存放在文件中,file 在此处不是关键字,是文件名。options 为命令行选项,sar命令
的选项很多,下面只列出常用选项:

-A:所有报告的总和。
-u:CPU利用率
-v:进程、I节点、文件和锁表状态。
-d:硬盘使用报告。
-r:没有使用的内存页面和硬盘块。
-g:串口I/O的情况。
-b:缓冲区使用情况。
-a:文件读写情况。
-c:系统调用情况。
-R:进程的活动情况。
-y:终端设备活动情况。
-w:系统交换活动。

例一:使用命令行 sar -u t n
例如,每60秒采样一次,连续采样5次,观察CPU 的使用情况,并将采样结果以二进制形式存入当前目录下的文件zhou中,需键入如下命令:

# sar -u -o zhou 60 5
  SCO_SV   scosysv 3.2v5.0.5 i80386   10/01/2001
    14:43:50   %usr   %sys  %wio    %idle(-u)
    14:44:50   0     1    4      94
    14:45:50   0     2    4      93
    Average    0     2    4      94

在显示内容包括:

  %usr:CPU处在用户模式下的时间百分比。
  %sys:CPU处在系统模式下的时间百分比。
  %wio:CPU等待输入输出完成时间的百分比。
  %idle:CPU空闲时间百分比。

在所有的显示中,我们应主要注意%wio和%idle,%wio的值过高,表示硬盘存在I/O瓶颈,
%idle值高,表示CPU较空闲,如果%idle值高但系统响应慢时,有可能是CPU等待分配内存,此时应加大内存容量。%idle值如果持续低于10,那么系统的CPU处理能力相对较低,表明系统中最需要解决的资源是CPU。

如果要查看二进制文件zhou中的内容,则需键入如下sar命令:

    # sar -u -f zhou

可见,sar命令即可以实时采样,又可以对以往的采样结果进行查询。

例二:使用命行sar -v t n

例如,每30秒采样一次,连续采样5次,观察核心表的状态,需键入如下命令:

# sar -v 30 5
      SCO_SV scosysv 3.2v5.0.5 i80386 10/01/2001
      10:33:23 proc-sz ov inod-sz ov file-sz ov lock-sz   (-v)
10:33:53 305/ 321  0 1337/2764  0 1561/1706 0 40/ 128
10:34:23 308/ 321  0 1340/2764  0 1587/1706 0 37/ 128  

显示内容包括:
proc-sz:目前核心中正在使用或分配的进程表的表项数,由核心参数MAX-PROC控制。
  inod-sz:目前核心中正在使用或分配的i节点表的表项数,由核心参数MAX-INODE控制。
  file-sz: 目前核心中正在使用或分配的文件表的表项数,由核心参数MAX-FILE控
制。
  ov:溢出出现的次数。
  Lock-sz:目前核心中正在使用或分配的记录加锁的表项数,由核心参数MAX-FLCKRE
控制。
实际使用表项/可以使用的表项数
显示内容表示,核心使用完全正常,三个表没有出现溢出现象,核心参数不需调整,如
果出现溢出时,要调整相应的核心参数,将对应的表项数加大。

例三:使用命行sar -d t n
例如,每30秒采样一次,连续采样5次,报告设备使用情况,需键入如下命令:
# sar -d 30 5

      SCO_SV scosysv 3.2v5.0.5 i80386 10/01/2001
11:06:43 device %busy   avque   r+w/s  blks/s  avwait avserv (-d)
11:07:13 wd-0   1.47   2.75   4.67   14.73   5.50 3.14
11:09:13 wd-0   1.97   21.78   5.86   34.06   69.66 3.35
Average wd-0   1.15   12.11   4.09   15.19   31.12 2.80  

device: sar命令正在监视的块设备的名字。
  %busy: 设备忙时,传送请求所占时间的百分比。
  avque: 队列站满时,未完成请求数量的平均值。
  r+w/s: 每秒传送到设备或从设备传出的数据量。
  blks/s: 每秒传送的块数,每块512字节。
  avwait: 队列占满时传送请求等待队列空闲的平均时间。
  avserv: 完成传送请求所需平均时间(毫秒)。

在显示的内容中,wd-0是硬盘的名字,%busy的值比较小,说明用于处理传送请求的有
效时间太少,文件系统效率不高,一般来讲,%busy值高些,avque值低些,文件系统
的效率比较高,如果%busy和avque值相对比较高,说明硬盘传输速度太慢,需调整。

例四:使用命行sar -b t n

例如,每30秒采样一次,连续采样5次,报告缓冲区的使用情况,需键入如下命令:
# sar -b 30 5
  SCO_SV scosysv 3.2v5.0.5 i80386 10/01/2001
14:54:59 bread/s lread/s %rcache bwrit/s lwrit/s %wcache pread/s pwrit/s (-b)
14:55:29 0  147  100  5  21  78   0   0
14:57:29 0   89  100  4  12  66   0   0
Average  1  156   99  5  28  80   0   0

bread/s: 每秒从硬盘读入系统缓冲区buffer的物理块数。
lread/s: 平均每秒从系统buffer读出的逻辑块数。
%rcache: 在buffer cache中进行逻辑读的百分比。
bwrit/s: 平均每秒从系统buffer向磁盘所写的物理块数。
lwrit/s: 平均每秒写到系统buffer逻辑块数。
%wcache: 在buffer cache中进行逻辑读的百分比。
pread/s: 平均每秒请求物理读的次数。
pwrit/s: 平均每秒请求物理写的次数。

在显示的内容中,最重要的是%cache和%wcache两列,它们的值体现着buffer的使用效
率,%rcache的值小于90或者%wcache的值低于65,应适当增加系统buffer的数量,buffer
数量由核心参数NBUF控制,使%rcache达到90左右,%wcache达到80左右。但buffer参数 值的多少影响I/O效率,增加buffer,应在较大内存的情况下,否则系统效率反而得不到提高。

例五:使用命行sar -g t n
例如,每30秒采样一次,连续采样5次,报告串口I/O的操作情况,需键入如下命令:
# sar -g 30 5
SCO_SV scosysv 3.2v5.0.5 i80386  11/22/2001
17:07:03  ovsiohw/s  ovsiodma/s  ovclist/s (-g)
17:07:33   0.00   0.00   0.00
17:09:33   0.00   0.00   0.00
Average    0.00   0.00   0.00

ovsiohw/s:每秒在串口I/O硬件出现的溢出。
ovsiodma/s:每秒在串口I/O的直接输入输出通道高速缓存出现的溢出。
ovclist/s :每秒字符队列出现的溢出。

在显示的内容中,每一列的值都是零,表明在采样时间内,系统中没有发生串口I/O溢
出现象。

sar命令的用法很多,有时判断一个问题,需要几个sar命令结合起来使用,比如,怀疑
CPU存在瓶颈,可用sar -u 和sar -q来看,怀疑I/O存在瓶颈,可用sar -b、sar -u和
sar-d来看,以上举出的五例仅仅是其中的一部分


.禁止PING

1)禁止  : 将icmp_echo_ignore_all文件内容改为1后为禁止PING
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all

2)解禁  : 将icmp_echo_ignore_all文件内容改为0后为解除禁止PING
echo 0 > /proc/sys/net/ipv4/icmp_echo_ignore_all


.改变ping 的TTL值(cgweb)
 #sysctl -w net.ipv4.ip_default_ttl=N
 (N=0~255),若N>255,则ttl=0


.改变系统配置默认值(houaq)
 编辑/etc/sysctl.conf, 例如,将
   net.ipv4.ip_forward = 0
 变为
  net.ipv4.ip_forward = 1
 重启后生效,用sysctl -a查看可知


.允许|禁止root通过SSH登陆
 修改sshd_config:PermitRootLogin no|yes


.模仿超级终端,LINUX里什么程序连接路由器和交换机(alstone)
 minicom


.用什么工具做入侵检测
 snort


.Linux下检测程序内存泄漏的工具
 cchecker或是efence库都可以


.监视所有通过本机网卡的数据
 tcpdump iptraf


.关闭用户的POP3权限(tiansgx)
  把POP3的端口关了就可以了。 在文件/etc/services中找到这一行 pop-3 110/tcp 把这一行前加个#,把它注释掉就可以了。


.防止任何人使用su命令成为root(xiaohu0)
  1.vi /etc/pam.d/su
    auth sufficient /lib/security/pam_rootok.so debug
    auth required /lib/security/pam_wheel.so group=wheel
  2.在/etc/pam. d/su配置文件中定义了wheel组


.网卡激活了,却上不了网,怎么办?(Slock )
  trace一下,看看到底是在那一块被阻住的。
  1.Ping自己
  2.Ping网关
  3.Ping DNS
  4.trace DNS
  If All=ok
  then nslookup www.csai.cn
  Ping csais address
  Tra csai address
  基本上就可以知道结果了


.如何得到网卡的MAC地址
  arp -a | awk {print $4}


.如何得到网卡的IP地址(mb)
  ifconfig eth0 |awk /inet addr/ {split($2,x,":");print x[2]}


.用netstat  -atuv检测正在使用的端口
-bash-2.05b$ netstat  -atuv  | more
Active Internet connections (servers and established)
Proto Recv-Q Send-Q      Local Address            Foreign Address           State      
tcp        0      0                 *:32768                   *:*                     LISTEN      
tcp        0      0                  *:7937          *:*                     LISTEN      
tcp        0      0              CnsLinux3:32769           *:*                     LISTEN      
tcp        0      0              CnsLinux3:32770           *:*                     LISTEN      

他们中大部分通过inetd守护进程控制的,可通过过修改/etc/xinetd.d内的amanda    chargen      daytime  来实现禁止和开启。


.判定哪些端口在监听来自网络上的 TCP 连接:
 nmap -sT -O localhost


.查出22端口现在运行什么程序
 lsof -i :22
 或
 netstat -anp | grep 22


. 用 ps 命令检查机器上正在运行的守护程序
ps xc -u 0


.列出当前对外开放的服务端口
[root@localhost ~]# nmap -p1-65535 localhost

Starting nmap 3.70 ( http://www.insecure.org/nmap/ ) at 2006-04-13 08:48 CST
Interesting ports on localhost.localdomain (127.0.0.1):
(The 65528 ports scanned but not shown below are in state: closed)
PORT      STATE SERVICE
22/tcp    open  ssh
25/tcp    open  smtp
111/tcp   open  rpcbind
139/tcp   open  netbios-ssn
445/tcp   open  microsoft-ds
631/tcp   open  ipp
32769/tcp open  unknown

Nmap run completed -- 1 IP address (1 host up) scanned in 13.563 seconds


[root@localhost ~]# nmap -sT -O localhost

Starting nmap 3.70 ( http://www.insecure.org/nmap/ ) at 2006-04-13 08:49 CST
Interesting ports on localhost.localdomain (127.0.0.1):
(The 1654 ports scanned but not shown below are in state: closed)
PORT    STATE SERVICE
22/tcp  open  ssh
25/tcp  open  smtp
111/tcp open  rpcbind
139/tcp open  netbios-ssn
445/tcp open  microsoft-ds
631/tcp open  ipp
Device type: general purpose
Running: Linux 2.4.X|2.5.X|2.6.X
OS details: Linux 2.5.25 - 2.6.3 or Gentoo 1.2 Linux 2.4.19 rc1-rc7)
Uptime 0.023 days (since Thu Apr 13 08:15:39 2006)

Nmap run completed -- 1 IP address (1 host up) scanned in 2.617 seconds


. 禁止普通用户使用su命令
  1)修改/etc/pam.d/su文件,除去   auth  required  /lib/security/$ISA/pam_wheel.so use_uid的屏蔽标识#。
  2)使用/usr/sbin/usermod -G10 bjecadm将bjecadm这个账号加入gid为10的组,就是wheel组
  3)这样仅有bjecadm用户可以使用su使用切换成根用户


. 限制根用户可以登陆的终端/etc/securetty
  1) 当根用户试图登陆时,login程序首先查阅/etc/securetty, 看看其中是否列出了当前字符终端设备。
  1>如果没有找到, login会认为它不安全,而提示口令,而后报告Login  incorrect 错误;
  2>如果没有/etc/securetty文件,根用户可以从任何一台字符终端上登陆,从而造成安全问题
  3>/etc/securetty的权限应是600或400


. 查看系统登陆信息设置/etc/issue
 [root@CnsLinux3 root]# cat  /etc/issue
 Red Hat Enterprise Linux AS release 3 (Taroon Update 2)
 Kernel /r on an /m


.关掉不必要的服务
1>finger
1>>一个远端的用户可以通过它获得大量有关用户的信息
用户目前登陆的终端,多长时间,是什么系统连接
用户有电子邮件吗,是否还未被读?
他在/etc/passwd中的GECOS入口的内容即注释
他登陆的目录路径
使用的是什么shell
finger   xxxx@373.com

查看是否有管理员在暗地监视他,而列出所有的登陆用户
finger  @373.com

服务fingerd被/etc/inetd.conf中的一个表项所控制

2>关闭rwhod
#rpm  -e rwho

3>关闭rwalld

4>关闭snmpd
snmp简单网络管理协议,它使远程管理变得更容易,snmp使用的udp端口是161
# chkconfig --del   snmpd

5>关闭nfs和nfslock
在#ntsysv中去掉nfs和nfslock
停止
/etc/rc.d/init.d/nfs  stop
/etc/rc.d/init.d/nfslock stop

chkconfig --del nfs
chkconfig --del  nfslock

6>关掉rsh/rcp/rlogin/rexec

7>关掉fdmount
程序fdmount允许软盘组的用户从软盘驱动器(假设set-UID被禁用)安装文件系统。允许软盘组的任何人得到根用户带来的一个缓冲区溢出脆弱之处在2000年5月被弄明白。建议通过下述命令禁用fdmount
  chmod  0  /usr/bin/fdmount

8>关闭掉Echo和Chargen

9>关闭talk和ntalk/tftp



.
TCP 会绕程序和攻击警告

如果某个主机或网络被发现正在攻击服务器,TCP 会绕程序可以通过 spawn 指令对来自该主机或网络的后续攻击向管理员发出警告。

在这个例子中,假定某个来自 206.182.68.0/24 网络的怪客被发现正在试图攻击服务器。如果把以下行添加到 /etc/hosts.deny 文件中,连接企图就会被拒绝并记录在一个特殊的文件中。

ALL : 206.182.68.0 : spawn /bin/ 'date' %c %d >> /var/log/intruder_alert%d 代符提供攻击者其它访问的服务名称。

要运行连接并记录日志,把 spawn 指令放在 /etc/hosts.allow 文件中。

注记 因为 spawn 指令执行任何 shell 命令,你可以创建一个脚本,该脚本会在某个特定客户企图连接服务器的时候通知管理员或执行一系列命令。



. 控制服务器资源

xinetd 的另一个重要功能是它能够控制从属服务可以利用的资源量。

它通过以下指令来达到这个目的:
  • cps = <number_of_connections> <wait_period> — 指定每秒钟内被允许到服务的连接数量。该指令只接受整数值。
  • instances = <number_of_connections> — 指定允许到服务的连接总数。该指令接受整数值或 UNLIMITED。
  • per_source = <number_of_connections> — 指定每个主机被允许到服务的连接数量。该指令接受整数值或 UNLIMITED。
  • rlimit_as = <number[K|M]> — 指定服务可以占用的内存地址空间数量,以千字节或兆字节为单位。该指令接受整数值或 UNLIMITED。
  • rlimit_cpu = <number_of_seconds> — 指定服务占用 CPU 的时间(以秒为单位)。该指令接受整数值或 UNLIMITED。
使用这些指令有助于防止某个 xinetd 服务大量占用系统,从而导致“拒绝服务”情况的出
现。



. 保护 Portmap 的安全性

portmap 服务是用于 RPC 服务(如 NIS 和 NFS)的动态端口分配守护进程。它的验证机制比较薄弱,而且具备为它所控制的服务分配大范围端口的能力。由于这些原因,要保护它的安全比较困难。

如果运行 RPC 服务,请遵守以下基本规则。

1) 使用 TCP 会绕程序来保护 portmap。

使用 TCP 会绕程序来限制可以使用 portmap 服务的网络或主机这一点很重要,因为 portmap 没有内建的验证方式。

更进一步,在限制对服务的使用时, 使用 IP 地址。避免使用主机名,因为主机名可以通过 DNS 污染或其它方法被伪造。


2) 使用 IPTables 来保护 portmap

要进一步限制对 portmap 服务的使用,在服务器上添加 IPTables 规则来限制到指定网络的进出是一个好办法。

以下是两个 IPTables 命令的例子,允许网络 192.168.0/24TCP 和 localhost( Nautilus 程序使用的 sgi_fam 服务所必需的)到 portmap 服务(监听端口111)的连接。所有其它分组都被放弃。

iptables -A INPUT -p tcp -s! 192.168.0.0/24  --dport 111 -j DROP
iptables -A INPUT -p tcp -s 127.0.0.1  --dport 111 -j ACCEPT
要以相似的方法限制 UDP 交通,使用以下命令。

iptables -A INPUT -p udp -s! 192.168.0.0/24  --dport 111 -j DROP




. 保护 Apache HTTP 服务器的安全
  
Apache HTTP 服务器是红帽企业 Linux 包括的最稳定和最安全的服务之一。保护 Apache HTTP 服务器安全的方法和技术多得数不胜数 — 在这里我们无法逐一详述。
  
在配置 Apache HTTP 服务器时阅读它的文档是很重要的。这些文档包括: 《红帽企业 Linux 参考指南》的“ Apache HTTP 服务器”这一章; 《红帽企业 Linux 系统管理指南》的“ Apache HTTP 服务器 配置”这一章;以及在 http://www.redhat.com/docs/manuals/stronghold/ 上的原有手册。
  
以下是管理员应该小心使用的配置选项列表。
  
  
1)修改/etc/httpd/conf.d/welcome.conf,并注释掉所有默认内容
[root@192 conf.d]# cat  welcome.conf
#
# This configuration file enables the default "Welcome"
# page if there is no default index page present for
# the root URL.  To disable the Welcome page, comment
# out all the lines below.
#
#<LocationMatch "^/+$">
#    Options -Indexes
#    ErrorDocument 403   /error/noindex.html
#</LocationMatch>

  
FollowSymLinks
  
该指令被默认启用,在创建到万维网服务器的文档根的符号链接时请小心。例如,提供一个到 / 的符号链接就不是个好主意。
  
  
2)Indexes 指令
  
该指令被默认启用,但它可能不应该被启用。要阻止访问者浏览服务器上的文件,你可以删除该指令。
  
  
3)UserDir 指令
  
UserDir 指令被默认禁用,因为它可以确认某个用户帐号在系统上是否存在。
要启用服务器上的用户目录浏览,请使用以下指令:
  
UserDir enabled UserDir disabled root这些指令为除了 /root/ 以外的所有用户目录激活浏览。
要把用户添加到禁用帐号列表中,在 UserDir disabled 行中添加一个用空格隔开的用户列表。
  
  
4)不要删除 IncludesNoExec 指令
  
按照默认设置,服务器端包括(server-side includes)模块不能执行命令。除非在极端必要的情况下,建议你不要改变这个设置,因为它有可能会使攻击者能够在系统上执行命令。
  
  
5)限制对可执行目录的权限
  
对于任何包含脚本或 CGI 的目录,请确定只给根用户以写权限。这可以通过键入以下命令来达到:
  
chown root <directory_name>
chmod 755 <directory_name>
  
还有,总是在把脚本放入生产环境 之前校验它们在系统上的运行情况符合你的设想。
  
  
6)报错提示文档
<Directory "/var/www/html">
     Options  FollowSymLinks   #去掉了Options Index FollowSymLinks中的 Index
  
     ErrorDocument 400 "BAD_REQUEST"
     ErrorDocument 401 "UNAUTHORIZED"
    ErrorDocument 403  "You don't have permission to access / on this server."
    ErrorDocument 404   "The requested URL /a.php was not found on this server."
     ErrorDocument 405 "METHOD_NOT_ALLOWED"
     ErrorDocument 408 "REQUEST_TIME_OUT"
     ErrorDocument 410 "GONE"
     ErrorDocument 411 "LENGTH_REQUIRED"
     ErrorDocument 412 "PRECONDITION_FAILED"
     ErrorDocument 413 "REQUEST_ENTITY_TOO_LARGE"
     ErrorDocument 414 "REQUEST_URI_TOO_LARGE"
     ErrorDocument 415 "UNSUPPORTED_MEDIA_TYPE"
     ErrorDocument 500 "INTERNAL_SERVER_ERROR"
     ErrorDocument 501 "NOT_IMPLEMENTED"
     ErrorDocument 502 "BAD_GATEWAY"
     ErrorDocument 503 "SERVICE_UNAVAILABLE"
     ErrorDocument 506 "VARIANT_ALSO_VARIES"
</Directory>



. 只允许部分IP登陆ssh
 如果用TCP_WRAPPERS来增强我们站点的安全性简直是举手之劳,
 1)你可以将禁止所有的请求放入“ALL :ALL ”到/etc/hosts.deny 中,
 2)然后放那些明确允许的请求到/etc/hosts.allow中,
 3)如:sshd: 192.168.1.10/255.255.255.0 www.test.com
  对IP地址192.168.1.10和主机名 www.test.com ,允许通过ssh 连接。
 4)配置完后,用tcpdchk 检查,你可以直接执行:tcpdchk。tcpchk是TCP_Wrapper配置检查工具,它检查你的tcp wrapper 配置并报告所有发现的潜在/ 存在的问题



. 禁止不用的帐户登陆
 如lp, sync, shutdown, halt, news, uucp, operator, games, gopher等


. 设置最短密码长度
 修改密码长度:设置为不少于8位的。
 
修改最短密码长度需要编辑login.defs文件(vi /etc/login.defs),把下面这行
    PASS_MIN_LEN 5 (默认的情况)
 改为
    PASS_MIN_LEN 8 (修改后的情况)
 login.defs文件是login程序的配置文件。


. Shell命令记录.bash_history删除
 Bash shell在“~/.bash_history”(“~/”表示用户目录)文件中保存了500条使用过的命令,这样可以使你输入使用过的长命令变得容易。每个在系统中拥有账号的用户在他的目录下都有一个“.bash_history”文件。

 bash shell应该保存少量的命令,并且在每次用户注销时都把这些历史命令删除。
第一步:

“/etc/profile”文件中的“HISTFILESIZE”和“HISTSIZE”行确定所有用户的“.bash_history”文件中可以保 存的旧命令条数。强烈建议把把“/etc/profile”文件中的“HISTFILESIZE”和“HISTSIZE”行的值设为一个较小的数,比如 30。编辑profile文件(vi /etc/profile),把下面这行改为:
HISTFILESIZE=30
HISTSIZE=30
这表示每个用户的“.bash_history”文件只可以保存30条旧命令。

 第二步:

 网管还应该在"/etc/skel/.bash_logout" 文件中添加下面这行"rm -f $HOME/.bash_history" 。这样,当用户每次注销时,“.bash_history”文件都会被删除.



. web日志分析
webalizer是一个高效的、免费的web服务器日志分析程序。其分析结果以HTML文件格式保存,从而可以很方便的通过web服务器进行浏览。Internet上的很多站点都使用webalizer进行web服务器日志分析。Webalizer具有以下一些特性:

1. 为是用C写的程序,所以其具有很高的运行效率。在主频为200Mhz的机器上,webalizer每秒钟可以分析10000条记录,所以分析一个40M大小的日志文件只需要15秒。

2. webalizer支持标准的一般日志文件格式(Common Logfile Format);除此之外,也支持几种组合日志格式(Combined Logfile Format)的变种,从而可以统计客户情况以及客户操作系统类型。并且现在webalizer已经可以支持wu-ftpd xferlog日志格式以及squid日志文件格式了。

3. 支持命令行配置以及配置文件。

4. 可以支持多种语言,也可以自己进行本地化工作。

5. 支持多种平台,比如UNIX、linux、NT, OS/2 和 MacOS等。

安装:

1.从webalizer的官方站点 http://www.mrunix.net/webalizer/下载,尽量获得当前的最新版本。

2.首先解开源代码包:tar xvzf 下在到的.tgz包

3.在生成的目录中有个lang目录,该目录中保存了各种语言文件,如果没有中文支持,可以考虑自己重新翻译一下。

4.然后进入生成的目录:
./configure
make --with-language=Chinese (如果有简体中文支持的话)

5.编译成功后,会产生一个webalizer可执行文件,可以将其拷贝到/usr/sbin/目录下:
cp webalizer /usr/sbin/
然后就可以开始配置webalizer了。

配置:

上面说过,可以通过命令行配置webalizer,也可以通过配置文件进行配置,在本文中我们将介绍使用命令行参数进行配置,需要了解配置文件使用方法可以参考README文件,里面有很详细的介绍。

可以执行webalizer –h得到所有命令行参数:
Usage: webalizer [options] [log file]
-h = 打印帮助信息
-v -V = 打印版本信息
-d = 打印附加调试信息
-F type = 日志格式类型. type= (clf | ftp | squid)
-i = 忽略历史文件
-p = 保留状态 (递增模式)
-q = 忽略消息信息
-Q = 忽略所有信息
-Y = 忽略国家图形
-G = 忽略小时统计图形
-H = 忽略小时统计信息
-L = 忽略彩色图例
-l num = 在图形中使用数字背景线
-m num = 访问超时 (seconds)
-T = 打印时间信息
-c file = 指定配置文件
-n name = 使用的主机名
-o dir = 结果输出目录
-t name = 指定报告题目上的主机名
-a name = 隐藏用户代理名称
-r name = 隐藏访问链接
-s name = 隐藏客户
-u name = 隐藏URL
-x name = 使用文件扩展名
-P name = 页面类型扩展名
-I name = index别名
-A num = 显示前几名客户类型
-C num = 显示前几名国家
-R num = 显示前几名链接
-S num = 显示前几名客户
-U num = 显示前几名URLs
-e num = 显示前几名访问页面
-E num = 显示前几名不存在的页面
-X = 隐藏个别用户
-D name = 使用dns缓存文件
-N num = DNS 进程数 (0=禁用dns)

假设,web服务器主机名为 www.test.com,统计站点域名为 www.test.com, 访问日志为/var/log/httpd/access_log, 我们将webalizer分析结果输出到/var/www/html/log下面。则我们可以建立以下脚本/etc/rc.d/webalizer:

#!/bin/sh
run=/usr/sbin/webalizer
$run -F clf -p -n " " -t " www.test.com"
-o /var/www/html/log /var/log/httpd/access_log

说明:

-F clf 指明我们的web日志格式为标准的一般日志文件格式(Common Logfile Format)
-p 指定使用递增模式,这就是说每作一次分析后,webalizer会生产一个历史文件,这样下一次分析时就可以不分析已经处理过的部分。这样我们就可以在短时间内转换我们的日志文件,而不用担心访问量太大时日志文件无限增大了。
-n “ “ 指定服务器主机名为空,这样输出结果会美观一些。
-o “ www.test.com” 指定输出结果标题.
/var/log/httpd/access_log:指定日志文件

然后在/etc/crontab中加入:
01 1 * * * root /etc/rc.d/webalizer
即每天凌晨1点执行该脚本。
然后运行/etc/rc.d/init.d/crond reload重载入crond服务。

测试:

执行以下命令:
# /etc/rc.d/webalizer
然后在浏览器中访问 http://www.test.com/log/就可以看到webalizer的分析结果了



. RPC守护进程错误使用
对Unix威胁最大可以说就是rpc上面的漏洞,远程过程调用(Remote Procedure Call)允许一台计算机上的程序去执行另一台计算机上的程序。它们广泛的应用在各种网络服务中,如文件共享服务NFS。有很多漏洞是RPC本身的缺陷导 致的,它们正不停的涌现出来。有很明显的证据表明,1999年末2000年初大规模的分布式拒绝服务攻击中,很多被作为攻击跳板的牺牲品就是因为存在 RPC漏洞。在Solar Sunrise事件期间,对美国陆军广为人知的成功攻击就是因为在数百台国防部的系统中找到了一个RPC漏洞。


.
BIND程序存在的漏洞,得用nxt, qinv, in.named可以真接得到root权限
  BIND(Berkeley Internet Name Domain)软件包是域名服务(DNS)的一个应用最广泛的实现软件--我们所有人都通过它来定位Internet上的系统,只需知道域名(如www.cnns.net)而不用知道IP地址,由此可体会它的重要性--这使它成为最受欢迎的攻击目标。


.
ff.core缓冲溢出
ff.core存在缓冲溢出漏洞,一个普通用户只要执行一个简单的脚本,就可以令缓冲区溢出从而得到一个root shell


. solaris安全设置---PROM OpenBoot和物理安全
 1)OpenBoot安全级别

  none    :不需要任何口令,所有OpenBoot设置都可以修改,任何人只要物理接触到了主控台,就可以完全控制
  command : 除了boot和go之外所有命令都需要口令。
full          : 除了go命令之外所有命令都需要口令

  2)改变OpenBoot安全级别
  首先,使用eeprom security-password命令来设置OpenBoot口令
  其次,在root登陆状态使用eeprom security-mode=command命令改变安全级别为commad或在OK状态: ok setenv security-mode=command的密码保护来实现



. solaris安全设置---文件系统安全
·每个文件对应一个"i节点","i节点"包括UID(文件拥有者)、GID(文件所在组)、模式(文件的权限)文件大小文件类型ctime("i节点"上次修改时间)、mtime(文件上次修改时间)、atime(文件上次访问时间)nlink(链接数)。它表示了文件的基本属性。

·根目录下各级目录

/bin         用户命令的可执行文件
/dev         特殊设备文件
/etc         系统执行文件、配置文件、管理文件,主要是配置文件
/home        用户起始目录
/lib         引导系统以及在root文件系统中运行命令所需的共享库文件
/lost+found  与特定文件系统断开连结的丢失文件
/mnt         临时安装的文件系统(如光驱、软驱)
/proc        一个伪文件系统,用来作为到内核数据结构或正在运行的进程的接口(用于调试)
/sbin        只有root使用的可执行文件和只需要引导或安装/usr的文件
/tmp         临时文件
/usr         为用户和系统命令使用的可执行文件、头文件、共享库、帮助文件、本地程序(在/usr
/local中)
/var         用于电子邮件、打印、cron等的文件,统计文件,日志文件



·文件系统有多种类型,unix内核支持如下文件系统:
1) ext2          固定和可移动磁盘都支持的一种高性能文件系统,用于linux
2) msdos         由MS-DOS和Windows使用
3) umsdos        Linux使用的一种扩充的DOS文件系统,支持长文件名、权限设置
4) iso9660       遵从ISO9660标准的CD-ROM文件系统
5) hpfs          High Performance Filesystem,高性能文件系统,OS/2使用
6) minix         在Minux OS中使用,最早的Linux文件系统
7) nfs           用来访问远程计算机中磁盘的网络文件系统
8) swap          用作交换的磁盘分区


3.1.2.2 文件权限
1) 文件权限是unix文件系统安全的关键。

2) Unix中的每个用户有一个唯一的用户名和UID(用户ID号),每个用户属于一个或多个组。基本分组成员在/etc/passwd中定义,附加的分组成 员在/etc/group中定义。例如,用户tiger的UID为225,分组为11(students),此外,他还是分组185 (postgraduates)的成员。

3) 每个文件和目录有三组权限,一组是文件的拥有者、一组是文件所属组的成员、一组是其他所有用户。"r"表示可读,"w"表示可写,"x"表示可执行。一共9位(每组3位),合起来称为模式位(mode bits)。

4) 模式位通常由一列10个字符来表示,每个字符表示一个模式设置,第一个指明文件类型,如
(d表示目录,-表示普通文件,l表示链接文件等等)。
例如,用ls -l 命令显示如下:
drwxr-xr-x 2    root    root    1024     Aug  13 09:22    backup/
-rw-r--r-- 1      root    root    1824     Apr   21 18:45    client.c
-rw------- 1      root    root    65536   Apr   22 17:56    core

例如最后一行以"-"开始,表示test使一个普通文件,文件拥有者可以读写执行、本组其他成员可以读执行、其他用户可以读执行。我们可以用chmod和umask命令来改变权限,这很简单,察看相应的帮助就知道怎么修改权限。


.测试IDE磁盘性能
[root@localhost ~]# /sbin/hdparm -tT /dev/hda

/dev/hda:
 Timing cached reads:   1124 MB in  2.00 seconds = 561.52 MB/sec
 Timing buffered disk reads:   30 MB in  3.03 seconds =   9.90 MB/sec


.
使用多个交换分区
如果你的系统有多块硬盘,可以考虑使用多个交换分区。每个磁盘上划分一个交换分区。通过在/etc/fstab文件中设置pri 选项,可使多个交换分区具有同样的优先级。Linux系统即可并行地使用它们。这样即可提高交换分区的性能。

/dev/hda5 swap swap defaults,pri=5 0 0
/dev/hdc5 swap swap defaults,pri=5 0 0


.
最大打开文件数比较合理的设置为每4M物理内存256,比如256M内存可以设为16384,而最大的使用的i节点的数目应该是最大打开文件数目的3倍到4倍。


. 分区
分区的时候,根据计划安装的软件灵活决定分区。一般分区有:/,/boot,/root,/home, /usr,/var和swap分区,其中swap分区类型和其他不同需要专门选择一下,它的空间一般是物理内存的两倍即可。/root分区是紧急情况 root用的,有64兆就行了。


.
如果和Windows混装的时候,装完了系统起不来了。可以用98启动盘启动,然后用FDISK /MBR回复主引导分区来保住Windows分区。


.
网卡设置
[root@192 greensoft]#cat /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
BOOTPROTO=static
HWADDR=00:0A:EB:16:B9:85
BROADCAST=192.168.0.255
IPADDR=192.168.0.88
NETMASK=255.255.255.0
NETWORK=192.168.0.0

ONBOOT=yes
TYPE=Ethernet


.超时自动注销
在/etc/profile中加入
export TMOUT=300           五分钟内没有操作则自动注销 (秒)


. 切换桌面
#switchdesk   gnome  或 kde

. 修改系统时间
date -s “2003-04-14 cst”,cst指时区,时间设定用date -s 18:10


. 设置启动模式
·/etc/inittab
id:3:initdefault文本模式
id:5:initdefault图形模式


. 设置主机名
[root@localhost default]# vi /etc/sysconfig/network

NETWORKING=yes
#HOSTNAME=localhost.localdomain
HOSTNAME=cnscnlinux


[root@localhost default]# /etc/rc.d/init.d/network restart
正在关闭接口 eth0:                                         [  确定  ]
正在关闭接口 eth1:                                         [  确定  ]
关闭环回接口:                                                  [   确定  ]
设置网络参数:                                                  [   确定  ]
弹出环回接口:                                                  [   确定  ]
弹出界面 eth0:                                               [  确定  ]
弹出界面 eth1:                                               [  确定  ]
[root@localhost default]# hostname
cnscnlinux


. 鼠标设置
redhat-config-mouse

COM1在linux中是/dev/ttyS0
COM2在linux中是/dev/ttyS1
设置成左键鼠标 $gpm  -B  321


. 时区设置
/usr/sbin/timeconfig


. 显示器休眠
不让显示器休眠
setterm -blank 0
setterm -blank n (n为等待时间)


. vnc图形显示设置
1)在xterm中执行 xhost + 192.168.0.249
2) #export  DISPLAY=192.168.0.88:0
3) 修改vi  $HOME/.vnc/xstartup ,把所有内容注释掉,在最后添加startkde &
[root@CnsLinux3 root]# vi  $HOME/.vnc/xstartup
#!/bin/sh
# Uncomment the following two lines for normal desktop:
# unset SESSION_MANAGER
# exec /etc/X11/xinit/xinitrc
#[ -r $HOME/.Xresources ] && xrdb $HOME/.Xresources
#xsetroot -solid grey
#vncconfig -iconic &
#xterm -geometry 80x24+10+10 -ls -title "$VNCDESKTOP Desktop" &
#twm &
startkde &
4)重启vncserver
(确保nfs服务的运行)


. 制作启动盘
/sbin/mkbootdisk


. 防一用户名由两个人同时登陆
echo "* hard maxlogins 2" >> /etc/security/limits.conf

Notes: This setting do not affact root account.


.
防火墙配置
/usr/sbin/lokkit


. 改变机器语言
[root@CnsLinux3 sbin]# vi  /etc/sysconfig/i18n   
#LANG="en_US.UTF-8"                            #英文
LANG="zh_CN.GB18030"                            #中文
SUPPORTED="zh_CN.GB18030:zh_CN:zh:en_US.UTF-8:en_US:en"    #所支持的语言
SYSFONT="latarcyrheb-sun16"                   #使用的字体

========================================================

//推荐配置
LANG="zh_CN.GB18030"
LANGUAGE="zh_CN.GB18030:zh_CN.GB2312:zh_CN"
SUPPORTED="zh_CN.GB18030:zh_CN:zh:en_US.UTF-8:en_US:en"
SYSFONT="lat0-sun16"
SYSFONTACM="8859-15"


export LANG=zh_CN.GB1830
export LC_ALL=Zh_CN


. 给网卡加第二个IP地址
ifconfig eth0:x ip up
x可以代表很多,就是一块网卡可以绑定很多IP地址。



[root@book ~]# ifconfig eth0:1 192.168.0.89 up
[root@book ~]# ifconfig
eth0      Link encap:Ethernet  HWaddr 00:0A:EB:16:BA:87  
          inet addr:192.168.0.88  Bcast:192.168.0.255  Mask:255.255.255.0
          inet6 addr: fe80::20a:ebff:fe16:ba87/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:303011 errors:0 dropped:0 overruns:0 frame:0
          TX packets:87302 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:33526346 (31.9 MiB)  TX bytes:35230323 (33.5 MiB)
          Interrupt:5 Base address:0xc800

eth0:1    Link encap:Ethernet  HWaddr 00:0A:EB:16:BA:87  
          inet addr:192.168.0.89  Bcast:192.168.0.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:0 (0.0 b)  TX bytes:0 (0.0 b)
          Interrupt:5 Base address:0xc800

[root@book ~]# ping 192.168.0.89
PING 192.168.0.89 (192.168.0.89) 56(84) bytes of data.
64 bytes from 192.168.0.89: icmp_seq=0 ttl=64 time=0.082 ms
64 bytes from 192.168.0.89: icmp_seq=1 ttl=64 time=0.071 ms
--- 192.168.0.89 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 999ms
rtt min/avg/max/mdev = 0.071/0.076/0.082/0.010 ms, pipe 2


. 禁止文件被rm掉 (但这样文件就不可修改了)
[root@book ~]# touch a.txt

[root@book ~]# chattr +i a.txt

[root@book ~]# rm  -f a.txt
rm: cannot remove `a.txt': Operation not permitted

[root@book ~]# ls
anaconda-ks.cfg   a.txt  Desktop  firstboot.1120181163.33  install.log  install.log.syslog

[root@book ~]# chattr  -i  a.txt

[root@book ~]# rm  -f a.txt

[root@book ~]# ls
anaconda-ks.cfg  Desktop  firstboot.1120181163.33  install.log  install.log.syslog



. 命令行的实现汉字显示
set meta-flag on
set input-meta on
set convert-meta off
set output-meta on
这几行主要是实现命令行上实现汉字的输入以及显示。



.用chroot()限制用户
   如果的确想限制一个用户,可用chroot()子程序为用户建立一个完全隔离的环境,改变了进程对根目录的概念,因此可用于将一个用户封在整个文件系 统的某一层目录结构中,使用户无法用cd命令转出该层目录结构,不能存取文 件系统中其余部分的任何文件.这种限制方式比加限制的shell好得多.
   用户使 用的命令应由系统管理员在新的root目录中建立一个bin目录,并建立用户可 用命令的链到系统的/bin目录中相应命令文件上(若在不同的文件系统则应拷 贝命令文件).
   还应建立新的passwd文件,保留系统登录户头(为了使ls -l正确地报告与 受限制的子文件系统中的文件相关的正确登录名)和用户帐户,但系统帐户的 口令改为NOLOGIN以使受限制的用户不能取得系统登录的真实口令,使“破密“ 程序的任何企图成为泡影.
   utmp文件是who所需要的,该文件含有系统中已登录用户的列表.
   新的/etc/profile文件也不是建链文件,以便受限制的用户可以执行不同 的启动命令. 
   /dev目录中的终端设备文件被链接到新的/dev目录下,因为命令who产生 输出时要查看这些文件.
   在系统V及以后的UNIX版本中,login命令有chroot()的功能.如果口令文 件中用户入口项的登录shell域(最后一个域)是*,login将调用chroot()把用 户的根目录设置成为口令文件中用户入口项登录目录域指定的目录.然后再调 用exec()执行login,新的login将在新子系统文件中执行该用户的登录.
   chroot()并不是把root封锁在一个子文件系统中,所以给受限制用户用的 命令时应加以考虑,具有root的SUID许可的程序可能会给予用户root的能力. 应当将这种可能减低到最小程度,交给用户使用的命令应当取自清除了SUID陷 井的系统命令.
   链接文件可减少磁盘占用区,但要记住,当与敌对用户打交道时 链接到chroot目录结构(尤其是命令)的系统文件是很危险的. 如果建立一个像这样的限制环境,应确保对安装到新的/bin的每条命令都 做过测试,有些程序可能有系统管理员未曾想到的出乎意料的执行结果.
   为了 使这些命令能运行,还得在加限制的子文件系统中加服务目录或文件如:/tmp, /etc/termcap,/usr/lib/terminfo,/dev/mem,/dev/kmem,/dev/swap,用户所 登录的/dev中的tty文件以及/unix.
   有些程序在子文件系统中运行时不会很好,如果将假脱机程序和网络命令 拷贝到加限制的子文件系统中,并放在为两条命令专建的目录层结构下,它们 可能也运行不了.


.init的运行等级(0~6)
0       完全关闭系统
1或S级   单用户模式       关闭所有多用户和远程登录进程,只运行最小软件聚合
2-5     多用户级别      
6       重新引导


./etc/inittab
 定义了init在它的每个运行级上要做什么事情


./etc/init.d/rc 
 定义了由/etc/inittab调用的程序


.启动脚本
 脚本的主拷贝位于/etc/init.d的目录中,用来负责守护进程
 
 一个简单的启动脚本
 #!/bin/sh
 #
 #Name  : /etc/init.d/sshd
 #Author: cnscn
 #Time  : 2006-04-23
 
 test -f /usr/local/sbin/sshd || exit 0
 
 case "$1" in
    start)
           echo -n "Starting sshd: ssd"
           /usr/local/sbin/sshd
           echo "."
           ;;
    stop)
           echo -n "Stopping sshd: sshd"
           kill `cat  /var/run/sshd.pid`
           echo "."
           ;;
 restart)
           echo -n "Stopping sshd: sshd"
           kill `cat /var/run/sshd.pid`
           echo "."

           echo -n "Starting sshd: sshd"
           /usr/local/sbin/sshd
           echo "."
           ;;
      *)
           echo "Usage: /etc/init.d/sshd start|stop|restart"
           exit 1
           ;;
 esac



 用init自动启动关闭程序 (把程序连接到相应的rcX.d启动目录中)
 ln -s /etc/init.d/sshd  /etc/rc2.d/S99sshd
 ln -s /etc/init.d/sshd  /etc/rc0.d/K25sshd
 ln -s /etc/init.d/sshd  /etc/rc6.d/K25sshd


.直接更改当前的运行等级
 #telinit  1               进入运行等级1


.ps监视进程
[root@localhost ~]# ps aux
USER       PID %CPU %MEM   VSZ  RSS TTY      STAT START   TIME COMMAND
root      5009  0.0  0.0  3036  744 pts/2    R+   10:39   0:00 ps aux

USER      进程属主ID
PID       进程ID
%CPU      进程正在使用的CPU时间百分数
%MEM      进程正在使用的实际内存的百分数
VSZ       进程的虚拟大小
RSS       驻留集的大小(内存页的数量)
TTY       控制终端的ID
STAT      当前进程的状态(R=可运行 
                       D=在等磁盘或短期等待
                       S=在睡眠(<20秒) 
                       T=被跟踪或被停止  
                       Z=僵进程    
                       W=进程被交换出去
                       <=进程拥有比普通优先级更高的优先级
                       N=
进程拥有比普通优先级更低的优先级
                      
L=有些页面被锁在内存中
                      )
START     启动进程的时间
TIME      进程消耗掉的CPU时间
COMMAND   命令名和参数



 
.TOP监视进程
#top
top - 10:52:04 up  2:41,  4 users,  load average: 1.10, 0.87, 0.61
Tasks: 105 total,   1 running, 103 sleeping,   0 stopped,   1 zombie
Cpu(s): 15.8% us, 27.7% sy,  0.0% ni, 56.1% id,  0.0% wa,  0.3% hi,  0.0% si
Mem:    775708k total,   770204k used,     5504k free,    12144k buffers
Swap:  1124540k total,      448k used,  1124092k free,   545612k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
 4014 root       5 -10  480m 384m 377m S 25.5 50.8  12:18.44 vmware-vmx
 3447 root      15   0  123m  28m 8176 S  5.6  3.7   7:05.72 X
 4225 root      16   0  146m  56m  20m S  4.6  7.5  16:55.74 firefox-bin

PR        The priority of the task.
NI        Nice value
VIRT      The total amount of virtual memory used by the task
RES       The non-swapped physical memory a task has used
SHR       The amount of shared memory used by a task.
S         The status of the task which can be one of:
            D = uninterruptible sleep
            R = running
            S = sleeping
            T = traced or stopped
            Z = zombie

TIME+     CPU Time, hundredths



.crontab
分钟   小时    日    月    周     [user]   command
45     10     *     *    1-5             ....     周一到周五的上午10:45运行
0,30   *      13    *     5                       周五及每月13号每半个小执行
15-45/5  *    *     *     *                       每小时的15-45分钟内每5分钟执行
30     2      *     *     1                       每周一早上2:30时执行
20     1      *     *     *      find /tmp  -atime +3 -exec rm -f {} ';'  每天早上1:20删除/tmp中3天无人访问的文件
55    23      *     *     0-3,6 
find /tmp  -atime +3 -exec rm -f {}   每周日到周三及周六执行


 

.自动注销
  编辑/etc/profile~
  在HISTFILESIZE=   这一行下面增加
  export TMOUT=600             //10分钟内如无操作则自动退出


.禁ping
$ echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all


此后可以用 来判断机器是否运行着
# nmap -sP 192.168.0.88


Starting nmap 3.70 ( http://www.insecure.org/nmap/ ) at 2006-04-09 14:46 CST
Host 192.168.0.88 appears to be up.
MAC Address: 00:11:25:AB:B6:98 (IBM)
Nmap run completed -- 1 IP address (1 host up) scanned in 18.652 seconds


.编辑/etc/host.conf加入

#lookup names via DNS first then fall back to /etc/hosts
order hosts,bind

#We don't have machines with multiple IP address on the same card (like virtual server, IP Aliasing)
#multi off

#Check for IP address spoofing   (防止IP欺骗)
nospoof on



4)禁止和允许的root登陆终端
#vi /etc/securetty
tty1
#tty2
#tty3
#tty4


.取得系统字长
$getconf WORD_BIT
 32


.注销时删除命令记录
编辑 /etc/skel/.bash_logout
增加
    rm -f $HOME/.bash_history
~~~~

.关掉rpc(也就是portmap)服务
# ntsysv~~~
  去掉portmap就可以了


.crontab的权限
如果想限制能建立crontab的用户,可在文件/usr/lib/cron/cron.allow文件中列出允许运行crontab命令的用户.任何未列于该文件的用户不能运行crontab.反之,若更愿意列出不允许运行crontab命令的用户,则可将他们列入/usr/lib/cron/cron.deny文件中,未列于该文件的其他用户将被允许建立crontab.
注意:若两个文件都存在,系统将使用cron.allow,忽略cron.deny.如果两 个文件都不存在,则只有root可运行crontab.所以,若要允许系统中的所有用 户都可运行crontab命令,应当建立一个空的cron.deny文件,如果cron.allow

也存在,则删除该文件.这个版本的cron命令的安全程度比前一个高,因为用户只能看自己的crontab,系统管理员也不必担心其他用户的程序是否会作为root运行,由于允许每个系统登录用户有自己的crontab,也简化了对程序必须由cron运行,但不必作为root运行的系统程序的处理.必须确保rootcrontab文件仅对root可写,并且该文件所在的目录及所有的父目录也仅对root可写.


.保护Portmap的安全性
1)保护 Portmap 的安全性

portmap 服务是用于 RPC 服务(如 NIS 和 NFS)的动态端口分配守护进程。它的验证机制比较薄弱,而且具备为它所控制的服务分配大范围端口的能力。由于这些原因,要保护它的安全比较困难。

如果运行 RPC 服务,请遵守以下基本规则。

2)使用 TCP 会绕程序来保护 portmap。

使用 TCP 会绕程序来限制可以使用 portmap 服务的网络或主机这一点很重要,因为 portmap 没有内建的验证方式。

更进一步,在限制对服务的使用时, 使用 IP 地址。避免使用主机名,因为主机名可以通过 DNS 污染或其它方法被伪造。


3)使用 IPTables 来保护 portmap

要进一步限制对 portmap 服务的使用,在服务器上添加 IPTables 规则来限制到指定网络的进出是一个好办法。

以下是两个 IPTables 命令的例子,允许网络 192.168.0/24TCP 和 localhost( Nautilus 程序使用的 sgi_fam 服务所必需的)到 portmap 服务(监听端口111)的连接。所有其它分组都被放弃。

iptables -A INPUT -p tcp -s! 192.168.0.0/24  --dport 111 -j DROP
iptables -A INPUT -p tcp -s 127.0.0.1  --dport 111 -j ACCEPT

要以相似的方法限制 UDP 交通,使用以下命令。
iptables -A INPUT -p udp -s! 192.168.0.0/24  --dport 111 -j DROP


=================================================================
[From] http://www-128.ibm.com/developerworks/cn/security/se-lbuffer/

级别: 初级

薛静锋北京理工大学计算机科学工程系

2002 年 4 月 01 日

缓 冲区溢出攻击是目前黑客最常用的攻击手段之一,为了应对不断涌现的缓冲区溢出攻击,我们研究了在Linux系统下防范缓冲区溢出的方法,通过研究,总结了 在Linux平台下防范缓冲区溢出攻击的安全策略,这些安全策略可以应用于一般企业内部服务器,包括web服务器、mail服务器、samba服务器、 ftp服务器以及proxy服务器等。在实际使用中,我们发现通过这些安全策略的配置能够对缓冲区溢出攻击起到很好的防范措施。

在对计算机系统安全的 研究中,有一种系统安全漏洞引起了我们的关注。一方面是由于这种安全漏洞的广泛性--几乎使所有的操作系统平台都受到影响。另一方面,我们为黑客基于此类 安全漏洞所编写的攻击程序的隐蔽性和强大威力所吸引。这就是缓冲区溢出技术。它可以使看似安全的,正在运行常规服务(如 DNS、ftpd等)的主机在几秒钟内失去控制权。缓冲区溢出攻击是目前黑客最常用的攻击手段。在当前CERT和CIAC等发布的Internet安全事 件报告中, 缓冲区溢出已成为常见的用语。缓冲区溢出攻击的目的在于扰乱具有某些特权运行的程序的功能。这样可以让攻击者取得程序的控制权,如果该程序具有足够的权 限,那么整个主机就被控制了。

为了应对不断涌现的缓冲区溢出攻击,我们研究了在Linux系统下防范缓冲区溢出的方 法,之所以选择Linux平台,主要有两方面的原因:(1)Linux是一个开放源码的平台,有利于我们在研究的过程中深入技术细节,由于Linux及其 上面的大量应用都是基于开放源码,有很多黑客在其上进行了大量的工作,可以说Linux上的网络攻击水平代表了整个网络攻击的最高水平。(2)Linux 是一个类Unix系统,同时也是在Internet中大量使用的操作系统平台,选择Linux作为研究缓冲区溢出技术的平台是非常具有代表性的,在 Linux平台上取得的经验可以非常容易地移植到其他Unix或者类Unix平台上。

通过研究,我们总结了在Linux平台下防范缓冲区溢出的安全策略,这些安全策略可以应用于一般企业内部服务器,包括web服务器、mail服务器、samba服务器、ftp服务器以及proxy服务器等。我们所总结的这些安全策略如下所示:

不显示系统提示信息

如果不想让远程登录的用户看到系统的提示信息,可以改变"/etc/inetd.conf"文件中的telnet设置:

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

在末尾加上"-h"参数可以让daemon不显示任何系统信息,只显示登录提示。当然,只有在服务器上装了telnet服务器才有这样做的必要。





回页首


处理"rc.local"文件

在默认情况下,当登录装有Linux系统的计算机时,系统会告诉你Linux发行版的名字、版本号、内核版本和服务器名称。这泄露了太多的系统信息。出于安全的考虑,最好只显示一个"Login:"的提示信息。处理方法如下:

(1)编辑"/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
……

(2)删除"/etc"目录下的"issue.net"和"issue"文件:

[root@snow]# rm -f /etc/issue
[root@snow]# rm -f /etc/issue.net

"/etc/issue.net" 文件是用户从网络登录计算机时(例如:telnet、SSH)看到的登录提示。同样在"/etc"目录下还有一个"issue"文件,是用户从本地登录时 看到的提示。这两个文件都是文本文件,可以根据需要改变。但是,如果想删掉这两个文件,必须向上面介绍的那样把"/etc/rc.d/rc.local" 脚本中的那些行注释掉,否则每次重新启动的时候,系统又会重新创建这两个文件。





回页首


禁止提供finger 服务

在Linux系统下,使用finger命令可以显示本地或远程系统中目前已登录用户的详细信息,黑客可以利用这些信息,增大侵入系统的机会。为了系统的安 全,最好禁止提供finger服务,即从/usr/bin下删除finger 命令。如果要保留 finger服务,应将finger文件换名,或修改其权限,使得只允许root用户执行finger命令。





回页首


处理"inetd.conf"文件

inetd也叫作"超级服务器",其作用是根据网络请求装入网络程序。"/etc/inetd.conf"文件告诉inetd监听哪些网络端口,为每个端 口启动哪个服务。把Linux系统放在任何网络环境中,第一件要做的事就是了解一下服务器到底要提供哪些服务。不需要的那些服务应该被禁止掉,最好卸载 掉,这样黑客就少了一些攻击系统的机会。查看"/etc/inetd.conf"文件,了解一下inetd提供哪些服务。用加上注释的方法(在一行的开头 加上#号)禁止任何不需要的服务,再给inetd进程发一个SIGHUP信号。具体操作步骤如下:

(1)把文件"/etc/inetd.conf"的许可权限改成600,只允许root来读写该文件。

[root@snow]# chmod 600 /etc/inetd.conf

(2)确定"/etc/inetd.conf"文件所有者为root。

[root@snow]# 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: Fri Apr 12 14:28:11 2002(00000.00:10:44)
Modify: Wed Apr 10 11:20:22 2002(00002.06:12:16)
Change: Wed Apr 10 11:20:22 2002(00002.06:12:16)

(3)编辑 /etc/inetd.conf文件(vi /etc/inetd.conf),禁止所有不需要的服务,如:ftp、telnet、 shell、login、exec、talk、ntalk、imap、pop-2、pop-3、finger、auth等。把不需要的服务关闭可以使系统 的危险性降低很多。

(4)改变了"inetd.conf"文件之后,要给inetd进程发送一个SIGHUP信号(killall -HUP inetd)。

[root@snow /root]# killall -HUP inetd

(5)为了保证"inetd.conf"文件的安全,可以用chattr命令把它设成不可改变的。如下:

[root@snow]# chattr +i /etc/inetd.conf

这 样可以防止对"inetd.conf"文件的任何修改。一个有"i"属性的文件是不能被改动的(不能删除或重命名,不能创建这个文件的链接,不能向这个文 件里写数据)。唯一可以取消这个属性的人只有root。如果要修改"inetd.conf"文件,首先要取消不可修改的属性,如下:

[root@snow]# chattr -i /etc/inetd.conf


再改变了"inetd.conf"文件后,需要再把它的属性改为不可改变的。





回页首


启动系统的"rc"脚本

/etc/rc.d目录下"rc"开头的文件是用来启动系统的初始化文件的。rc系列文件与Ms- Dos系统下的autoexec.bat很类似。rc的意思是"runtime commands"。它们决定了init进程要启动哪些服务。redhat系统下,这些脚本在/etc/rc.d/rc3.d(如果系统以x为默认启动的 话,就是/etc/rc.d/rc5.d)。要在启动时禁止某个服务,只需要把大写的S替换为小写的s,同时,redhat也提供一个工具来帮助你关闭服 务,输入/usr/sbin/setup,然后选择"system services",就可以定制系统启动时运行哪些服务。另外一个选择是chkconfig命令,很多linux版本的系统都自带这个工具。脚本名字中的 数字是启动的顺序,以大写的K开头的是用来杀死进程的。 如将S50snmpd(SNMP简单网络管理协议,远程用户能从中获得许多系统信息)改为s50snmpd,则系统启动时将不会启动这项服务。

用下列命令察看在关闭启动脚本之前有多少服务在运行:

suneagle# ps -eaf|wc -l


有两个非常有用的工具:ps -xau(输出大量的有关系统运行的信息)和netstat -vat(列出所有和网络相关的信息)。运行他们就可以知道系统在提供、运行哪些服务。





回页首


处理"services"文件

端口号和标准服务之间的对应关系在RFC1700"Assigned Numbers"中有详细的定义。"/etc/services"文件使得服务器和客户端的程序能够把服务的名字转成端口号,这张表在每一台主机上都存 在,其文件名是"/etc/services"。只有"root"用户才有权限修改这个文件,而且在通常情况下这个文件是没有必要修改的,因为这个文件中 已经包含了常用的服务所对应的端口号。为了提高安全性,我们可以给这个文件加上保护以避免没有经过授权的删除和改变。为了保护这个文件可以用下面的命令:

[root@snow]# chattr +i /etc/services






回页首


改变"/etc/rc.d/init.d/"目录下脚本文件的访问许可

通过以下方式改变启动和停止daemon的脚本文件的权限。

[root@snow]# chmod -R 700 /etc/rc.d/init.d/*


这样只有root可以读、写和执行这一脚本,因为一般用户不需要知道脚本文件的内容。





回页首


使系统对ping没有反应

防止系统对ping请求做出反应,对于网络安全是很有好处的,因为没人能够ping你的服务器并得到任何反应。TCP/IP协议本身有很多的弱点,黑客可 以利用一些技术,把传输正常数据包的通道用来偷偷地传送数据。使你的系统对ping请求没有反应,可以把这个危险减到最小。使用下面的命令:

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


运 行完这个命令后,系统对ping就没有反应了。可以把这一行加到"/etc/rc.d/rc.local"文件中去,这样当系统重新启动时,该命令就会自 动运行。对ping命令没有反应,至少可以把绝大多数的黑客排除到系统之外,因为黑客不可能知道你的服务器在哪里。重新恢复对ping的响应,可以使用下 面的命令:

echo 0 > /proc/sys/net/ipv4/icmp_echo_ignore_all"






回页首


用ssh代替telnet

SSH协议在开始设计时的目的就是提供尽可能安全的远程存取方式。它可以用来进行任何基于网络的信息传递,而且适应性很强。Linux、Unix、NT等 系统都可以使用。由于在和远程交互时,传递的密钥、认证信息等都是加密的,所以安全性能很好。用ssh完全取代telnet/ftp,它能够确保数据在网 络中的安全传输。





回页首


取消普通用户的控制台访问权限

应该取消普通用户的控制台访问权限,比如shutdown、reboot、halt等命令。

[root@kapil /]# rm -f /etc/security/console.apps/<servicename>


其中<servicename>是要注销的程序名。





回页首


Shell logging

Bash shell在"~/.bash_history"("~/"表示用户目录)文件中保存了500条使用过的命令,这样可以使你输入使用过的长命令变得容易。 每个在系统中拥有账号的用户在他的目录下都有一个".bash_history"文件。bash shell应该保存少量的命令,并且在每次用户注销时都把这些历史命令删除。具体操作步骤如下:

(1) "/etc/profile"文件中的"HISTFILESIZE"和"HISTSIZE"行确定所有用户的".bash_history"文件中可以保 存的旧命令条数。建议把"/etc/profile"文件中的"HISTFILESIZE"和"HISTSIZE"行的值设为一个较小的数,比如30。编 辑profile文件(vi /etc/profile),把下面这行改为:

HISTFILESIZE=30
HISTSIZE=30

这表示每个用户的".bash_history"文件只可以保存30条旧命令。

(2)网络管理员还应该在"/etc/skel/.bash_logout" 文件中添加一行"rm -f $HOME/.bash_history"。这样,当用户每次注销时,".bash_history"文件都会被删除。

编辑.bash_logout文件(vi /etc/skel/.bash_logout),添加下面这行:

rm -f $HOME/.bash_history 






回页首


禁止Control-Alt-Delete键盘关闭命令

在"/etc/inittab" 文件中注释掉下面这行(使用#):

ca::ctrlaltdel:/sbin/shutdown -t3 -r now


改为:

#ca::ctrlaltdel:/sbin/shutdown -t3 -r now


为了使这项改动起作用,输入下面这个命令:

[root@kapil /]# /sbin/init q






回页首


带"s"位的程序

缓冲区溢出漏洞和suid/sgid程序的关系紧密,带"s"位的程序往往是系统不安全的根源。应该尽量将不必要的带"s"位的程序删除。

用ls -l命令列出来的文件,如果文件的权限位中出现"s",则这些文件的SUID(-rwsr-xr-x)或SGID(-r-xr-sr-x)位被设定了。因 为这些程序给执行它的用户一些特权,所以如果不需要用到这些特权,最好把这些程序的"s"位移去。可以用下面的这个命令"chmod a -s <文件名>"移去相应文件的"s"位。

可以清除"s"位的程序包括:从来不用的程序;不希望非root用户运行的程序;偶尔用用,但是不介意先用su命令变为root后再运行的程序。

下面加了星号(*)的程序有必要移去"s"位。注意,系统可能需要一些SUID的程序才能正常运行,所以要小心。

用下面的命令查找所有带"s"位的程序:

[root@snow]# find / -type f /( -perm -04000 -o -perm -02000 /) /-exec ls -lg {}/;
*-rwsr-xr-x 1 root root 35168 Sep 22 23:35 /usr/bin/chage
*-rwsr-xr-x 1 root root 36756 Sep 22 23:35 /usr/bin/gpasswd
*-r-xr-sr-x 1 root tty 6788 Sep 6 18:17 /usr/bin/wall
-rwsr-xr-x 1 root root 33152 Aug 16 16:35 /usr/bin/at
-rwxr-sr-x 1 root man 34656 Sep 13 20:26 /usr/bin/man
-r-s--x--x 1 root root 22312 Sep 25 11:52 /usr/bin/passwd
-rws--x--x 2 root root 518140 Aug 30 23:12 /usr/bin/suidperl
-rws--x--x 2 root root 518140 Aug 30 23:12 /usr/bin/sperl5.00503
-rwxr-sr-x 1 root slocate 24744 Sep 20 10:29 /usr/bin/slocate
*-rws--x--x 1 root root 14024 Sep 9 01:01 /usr/bin/chfn
*-rws--x--x 1 root root 13768 Sep 9 01:01 /usr/bin/chsh
*-rws--x--x 1 root root 5576 Sep 9 01:01 /usr/bin/newgrp
*-rwxr-sr-x 1 root tty 8328 Sep 9 01:01 /usr/bin/write
-rwsr-xr-x 1 root root 21816 Sep 10 16:03 /usr/bin/crontab
*-rwsr-xr-x 1 root root 5896 Nov 23 21:59 /usr/sbin/usernetctl
*-rwsr-xr-x 1 root bin 16488 Jul 2 10:21 /usr/sbin/traceroute
-rwxr-sr-x 1 root utmp 6096 Sep 13 20:11 /usr/sbin/utempter
-rwsr-xr-x 1 root root 14124 Aug 17 22:31 /bin/su
*-rwsr-xr-x 1 root root 53620 Sep 13 20:26 /bin/mount
*-rwsr-xr-x 1 root root 26700 Sep 13 20:26 /bin/umount
*-rwsr-xr-x 1 root root 18228 Sep 10 16:04 /bin/ping
*-rwxr-sr-x 1 root root 3860 Nov 23 21:59 /sbin/netreport
-r-sr-xr-x 1 root root 26309 Oct 11 20:48 /sbin/pwdb_chkpwd


用下面的命令禁止上面选出来的SUID的程序:

[root@snow]# chmod a-s /usr/bin/chage
[root@snow]# chmod a-s /usr/bin/gpasswd
[root@snow]# chmod a-s /usr/bin/wall
[root@snow]# chmod a-s /usr/bin/chfn
[root@snow]# chmod a-s /usr/bin/chsh
[root@snow]# chmod a-s /usr/bin/newgrp
[root@snow]# chmod a-s /usr/bin/write
[root@snow]# chmod a-s /usr/sbin/usernetctl
[root@snow]# chmod a-s /usr/sbin/traceroute
[root@snow]# chmod a-s /bin/mount
[root@snow]# chmod a-s /bin/umount
[root@snow]# chmod a-s /bin/ping
[root@snow]# chmod a-s /sbin/netreport






回页首


创建FTP日志

对于FTP服务器,可以通过修改/etc/ftpaccess或者/etc/inetd.conf,来保证每一个ftp连接日志都能够记录下来。下面是一个修改inetd.conf的例子:

ftp  stream  tcp  nowait  root  /usr/sbin/tcpd  in.ftpd -l -L -i -o
-l:每一个ftp连接都写到syslog
-L:记录用户的每一个命令
-I:文件received,记录到xferlog
-o:文件transmitted,记录到xferlog


以上就是我们通过研究总结出来的在Linux平台下防范缓冲区溢出攻击的一些安全策略,在实际使用中,我们发现通过这些安全策略的配置能够对缓冲区溢出攻击起到一定的防范措施。当然,这些安全措施还不够完善,还需要进一步的改进。





回页首






回页首


关于作者


薛 静锋,北京理工大学计算机科学工程系博士研究生,主要研究方向为网络安全技术。曾参与过的研究课题有:“分布式协同专家系统开发工具、计算机网络隐患扫描 技术,目前在研的课题为“异常入侵检测技术研究”。近三年来出版计算机书籍6本,译著2本;在各种学术刊物上发表论文7篇。可以通过 E_mail: xuebook@xinhuanet.com与他联系!




                           ------待续
 
 
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值