Linux安全学习总结

linux系统安全详解

一,BIOS安全(硬件上的安全)

1,最基本最简单的安全配置,保障计算机硬件配置等不被别人更改.给BIOS设置密


码,防止改变启动顺序从软盘或


光盘启动.防止特殊的启动盘启动用户的系统,进入rescue或其他模式.改变或删


除当前配置等.每一个细心的网


管每个细节都不应该忽视!
2,禁止使用contral+alt+delete重起机器
编辑/etc/inittab文件,注释掉下面一行.
ca::ctrlaltdel:/sbin/shutdown -t3 -r now
该成:(使用#)
# ca::ctrlaltdel:/sbin/shutdown -t3 -r now
 

二,帐号安全

口令,系统的第一道防线,目前大多数数攻击都是截获口令或猜测口令等口令攻击


开始的.
/etc 目录下主要存放系统的配置文件.我们要对这个目录下的好多文件进行修改


.
1,/etc/login.defs文件是login程序的配置文件.口令的长度和口令的有效期等


可以在这里设置.
[root@tp ~]# vi /etc/login.defs
...
PASS_MAX_DAYS   9999  密码被用最多天数
PASS_MIN_DAYS   0     密码被用最少天数
PASS_MIN_LEN    5     系统默认密码长度5,我们可以该成8或更多.
PASS_WARN_AGE   7     密码有效期警告,超过7天将提示用户更换新的密码.
...
 
2,/etc/profile文件是环境变量设置文件.在此文件设置环境变量将对所有用户


生效.我们要在此文件设置自动


注销帐户的时间.及命令的历史记录数.
[root@tp ~]# vi /etc/profile
...
HOSTNAME=`/bin/hostname`
HISTSIZE=1000 这里1000代表用户操作命令的历史记录.应尽量小一些.设置成0


也可以,呵呵.
tmout=600 添加此行,如果系统用户在600秒(10分钟)内不做任何操作,将自动注


销这个用户.
...
3,/etc/passwd文件存放系统用户名,用户标识(UID),组标识(GID)等的地方.我们


要在这里找到并清除没有设置


口令的用户.同时还要清除一些特别帐号(因为可能会存在潜在的危险).
[root@tp ~]# vi /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
...
wh::500:501::/home/wh:/bin/bash
仔细观察上面的一行(wh用户),在第二项,两个冒号中间什么都没有,而上面的的


用户(如root用户)都是x. 这表


明此用户没有密码.要不添加上,要不删掉.
4,特别帐号的处理
如果不启动用sendmail,删除如下用户
[root@tp wh]# userdel adm
[root@tp wh]# userdel lp
[root@tp wh]# userdel sync
[root@tp wh]# userdel shudown
[root@tp wh]# userdel halt
[root@tp wh]# userdel mail
如果不用X windows服务器.可有删除
[root@tp wh]# userdel news
[root@tp wh]# userdel uucp
[root@tp wh]# userdel operator
[root@tp wh]# userdel games
如果不允许匿名FTP帐号登陆,可删除
[root@tp wh]# userdel gopher
[root@tp wh]# userdel ftp
 

三,重要文件的安全设置.

首先要了解两个命令
1,chmod:改变文件的属主
2,chattr:改变文件属性
我们要做的是把重要文件的属主改成root并给相应的权限,还有就是改变文件的


属性让它禁止被修改
我们来统计一下重要文件:(其实,只要你不想让其他用户更改的文件都可以这么


做,我这里只是为安全而选择了


下面的文件.)
1,/etc/passwd,passwd-,passwd.OLD,group,group- 用户,组的ID等信息文件.
2,/etc/shadow,shadow-,gshadow,gshadow- 用户,组密码加密文件.
3,/etc/xinetd.conf 网络守护进程主配置文件
4,/etc/inittab  系统在启动是会读取这个文件里的内容.
5,/etc/services 防止未经许可的删除或添加服务
6,/etc/rc.d/rc.sysinit 系统启动是需要读取的文件,
7,/etc/rc.d/init.d/*  
以一个文件为例,其它都一样
[root@tp etc]# chmod 700 passwd
[root@tp etc]# chattr +i passwd
当chattr +i时就是禁止对文件进行修改,当我们要添加用户时,就会有麻烦,因为


passwd文件禁止修改写入.所以


我们还要该掉它的属性.chattr -i.
 

四,防止攻击系统安全设置

1,限制用户使用系统资源,主要包括资源最大进程数,内存使用量等.这样可以防


止DOS类型攻击.
需要编辑文件
[root@tp /]# vi /etc/security/limits.conf
...
(这三行是添加的) www.2cto.com
* hard core 0    禁止创建core文件
* hard rss 5000  其他用户(除root)最多使用5M内存
* hard nproc 20  最多进程数限制在20
注:*表示所有登陆到linux的用户.
# End of file
[root@tp /]# vi /etc/pam.d/login
...
在文件末尾加入下面一行
session required /lib/security/pam_limits.so
2,限制控制台的访问
[root@tp /]# vi /etc/securetty
...
我们注释掉
tty1
# tty2
# tty3
# tty4
# tty5
# tty6
只留下tty1,这时,root仅可在tty1终端登录
3,禁止外来ping请求.
[root@tp /]# vi /etc/rc.d/rc.local
...
在最后加入一行
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all
4,防止IP地址欺骗
[root@tp /]# vi /etc/host.conf
加入如下几行
order bind,hosts
multi off
nospoof on
5,禁止su命令进入root(这一部我反复测试总是不成功,group组里的用户依然不


能su成root用户.希望知道的朋


友告诉我,谢谢)
[root@tp pam.d]# vi /etc/pam.d/su
...
在下面加入如下两行
auth sufficient /lib/security/pam_rootok.so debug
auth required /lib/security/pam_wheel.so group=xxx
这表示只有xxx组的用户可以su成root.
6,使用TCP_WRAPPER
在默认情况下linux系统允许所有请求,可用TCP_WRAPPER增强安全性,
在/etc/hosts.deny写入"ALL:ALL"禁止所有请求
[root@tp etc]# 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!
   "ALL:ALL"
把允许访问的客户,或服务添加到/etc/hosts.allow,冒号左边为服务,冒号右边


为授权的机器
[root@tp etc]# 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.
#
vsftp:211.101.46.253    注:仅如许IP地址为211.101.46.253的机器访问FIP服


务器
7.删减登录信息
  [root@tp ~]# rm -f /etc/issue
  [root@tp ~]# rm -f /etc/issue.net
 [root@tp ~]# touch /etc/issue
  [root@tp ~]# touch /etc/issue.net
 

五,确保开启服务的安全性

我们先来看一下自己系统开启了多少服务.
[root@tp ~]# ps -eaf | wc -l
55
我的是55
我们可以通过当前的进程里在来看一下都是什么服务
[root@tp ~]# ps -aux
Warning: bad syntax, perhaps a bogus '-'? See /usr/share/doc/procps-


3.2.3/FAQ
USER       PID %CPU %MEM   VSZ  RSS TTY      STAT START   TIME COMMAND
root         1  0.0  0.2  2592  560 ?        S    21:02   0:00 init 


[3]                           


                  
root         2  0.0  0.0     0    0 ?        SN   21:02   0:00 


[ksoftirqd/0]
root         3  0.0  0.0     0    0 ?        S<   21:02   0:00 


[events/0]
root         4  0.0  0.0     0    0 ?        S<   21:02   0:00 


[khelper]
root         5  0.0  0.0     0    0 ?        S<   21:02   0:00 


[kacpid]
root        20  0.0  0.0     0    0 ?        S<   21:02   0:00 


[kblockd/0]
root        30  0.0  0.0     0    0 ?        S    21:02   0:00 


[pdflush]
root        31  0.0  0.0     0    0 ?        S    21:02   0:00 


[pdflush]
root        33  0.0  0.0     0    0 ?        S<   21:02   0:00 [aio/0]
root        21  0.0  0.0     0    0 ?        S    21:02   0:00 [khubd]
root        32  0.0  0.0     0    0 ?        S    21:02   0:00 


[kswapd0]
root       107  0.0  0.0     0    0 ?        S    21:02   0:00 


[kseriod]
root       181  0.0  0.0     0    0 ?        S<   21:03   0:00 


[kmirrord]
root       182  0.0  0.0     0    0 ?        S<   21:03   0:00 


[kmir_mon]
root       190  0.0  0.0     0    0 ?        S    21:03   0:00 


[kjournald]
root      1085  0.0  0.1  2604  444 ?        S<s  21:03   0:00 udevd
root      1611  0.0  0.0     0    0 ?        S<   21:03   0:00 


[kauditd]
root      1745  0.0  0.0     0    0 ?        S<   21:03   0:00 


[kmpathd/0]
root      1769  0.0  0.0     0    0 ?        S    21:03   0:00 


[kjournald]
root      2250  0.0  0.2  2668  632 ?        Ss   21:03   0:00 syslogd 


-m 0
root      2254  0.0  0.1  3352  472 ?        Ss   21:03   0:00 klogd 


-x
rpc       2274  0.0  0.2  2220  572 ?        Ss   21:03   0:00 portmap
rpcuser   2294  0.0  0.2  2108  756 ?        Ss   21:03   0:00 


rpc.statd
root      2322  0.0  0.3  5344  992 ?        Ss   21:03   0:00 


rpc.idmapd
root      2399  0.0  0.3  2612  816 ?        S    21:03   0:00 


/usr/sbin/smartd
root      2409  0.0  0.2  3176  540 ?        Ss   21:03   0:00 


/usr/sbin/acpid
root      2440  0.0  1.4 11192 3680 ?        Ss   21:03   0:00 cupsd
root      2497  0.0  0.6  5044 1712 ?        Ss   21:03   0:00 


/usr/sbin/sshd
root      2526  0.0  0.3  2760  876 ?        Ss   21:03   0:00 xinetd 


-stayalive -pidfile


/var/run/xinetd.pid
root      2536  0.0  0.2  1788  528 ?        Ss   21:03   0:00 gpm -m 


/dev/input/mice -t imps2
htt       2565  0.0  0.1  1960  316 ?        Ss   21:03   0:00 


/usr/sbin/htt -retryonerror 0
htt       2566  0.0  1.1  8256 3024 ?        S    21:03   0:00 


htt_server -nodaemon
canna     2578  0.0  6.8 19932 17628 ?       Ss   21:03   0:00 


/usr/sbin/cannaserver -syslog -u


canna
root      2590  0.0  0.4  7428 1204 ?        Ss   21:03   0:00 crond
xfs       2628  0.0  1.3  5692 3332 ?        Ss   21:03   0:00 xfs -


droppriv -daemon
root      2638  0.0  0.2  2092  640 ?        SNs  21:03   0:00 anacron 


-s
root      2647  0.0  0.2  3712  740 ?        Ss   21:03   0:00 


/usr/sbin/atd
dbus      2657  0.0  0.5 13296 1324 ?        Ssl  21:03   0:00 dbus-


daemon-1 --system
root      2668  0.0  0.4  3156 1040 ?        Ss   21:03   0:00 cups-


config-daemon
root      2679  0.0  1.7  6540 4424 ?        Ss   21:03   0:00 hald
root      2688  0.0  0.5  2916 1288 ?        Ss   21:03   0:00 login 


-- root    
root      2689  0.0  0.1  1528  404 tty2     Ss+  21:03   0:00 


/sbin/mingetty tty2
root      2690  0.0  0.1  2048  404 tty3     Ss+  21:03   0:00 


/sbin/mingetty tty3
root      2691  0.0  0.1  3488  404 tty4     Ss+  21:03   0:00 


/sbin/mingetty tty4
root      2692  0.0  0.1  2368  404 tty5     Ss+  21:03   0:00 


/sbin/mingetty tty5
root      2693  0.0  0.1  3296  404 tty6     Ss+  21:03   0:00 


/sbin/mingetty tty6
root      3136  0.0  0.5  5920 1396 tty1     Ss+  21:05   0:00 -bash
root      3574  0.0  0.8  8400 2276 ?        Ss   21:05   0:00 sshd: 


root@pts/0
root      3576  0.0  0.5  6896 1388 pts/0    Ss   21:05   0:00 -bash
root      3608  0.0  0.4  6584 1216 pts/0    S+   21:05   0:00 ntsysv
root      4019  0.0  0.8  8408 2276 ?        Rs   21:09   0:00 sshd: 


root@pts/1
root      4021  0.0  0.5  6912 1388 pts/1    Ss   21:09   0:00 -bash
root      4084  0.0  0.2  2852  748 pts/1    R+   21:17   0:00 ps -aux
这些进程,服务,都是开机自动加载的!我们可以用命令来看一下,
[root@tp ~]# ntsysv
 
那些前面有*号的就是开机自动启动的服务.也就是说我们开机的话就要同时开启


这么多的服务.(和我们windows


里的服务是一样的,没用的完全可以关了).
我们要掌握一个原则:就是运行的服务越少,肯定系统就越安全.
上面看的是系统开机都会开启那些服务.那么那些服务是正在运行的呢?
[root@tp ~]# netstat -an
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address               Foreign Address        


     State     
tcp        0      0 0.0.0.0:32768               0.0.0.0:*              


     LISTEN     
tcp        0      0 0.0.0.0:111                 0.0.0.0:*              


     LISTEN     
tcp        0      0 0.0.0.0:113                 0.0.0.0:*              


     LISTEN     
tcp        0      0 127.0.0.1:631               0.0.0.0:*              


     LISTEN     
tcp        0      0 :::80                       :::*                   


     LISTEN     
tcp        0      0 :::22                       :::*                   


     LISTEN     
tcp        0      0 :::443                      :::*                   


     LISTEN     
tcp        0    880 ::ffff:192.168.0.1:22       


::ffff:192.168.0.5:2683     ESTABLISHED
udp        0      0 0.0.0.0:32768               0.0.0.0:*              


                
udp        0      0 0.0.0.0:111                 0.0.0.0:*              


                
udp        0      0 0.0.0.0:631                 0.0.0.0:*              


                
udp        0      0 0.0.0.0:764                 0.0.0.0:*              


                
带有LISTEN的代表正在开启的端口,开启的服务.
如果你对linux系统的启动过程了解的话.(建议先去看看,我以后也会写的)
我们进入这个目录
[root@tp ~]# cd /etc/rc.d
[root@tp rc.d]# ls
init.d  rc  rc0.d  rc1.d  rc2.d  rc3.d  rc4.d  rc5.d  rc6.d  rc.local  


rc.sysinit
如果你的系统是X(图形化启动的话)运行级别是5,那就是rc5.d,我的是rc3.d,运


行级别是3.(多用户模式)
是哪个模式就进入哪个目录,看一下
[root@tp rc.d]# cd rc3.d/
[root@tp rc3.d]# ls
K01yum             K16rarpd           K35cyrus-imapd  K50snmptrapd  


K84bgpd        K96ipmi        


     S13irqbalance  S55sshd
K02NetworkManager  K20bootparamd      K35dhcpd        K50tux        


K84ospf6d      K99readahead   


     S13portmap     S56rawdevices
K03rhnsd           K20netdump-server  K35smb          K50vsftpd     


K84ospfd       


K99readahead_early  S14nfslock     S56xinetd
K05atd             K20nfs             K35vncserver    K54dovecot    


K84ripd        


S00microcode_ctl    S15mdmonitor   S85gpm
K05innd            K20rstatd          K35winbind      K61ldap       


K84ripngd      S01sysstat     


     S18rpcidmapd   S87iiim
K05saslauthd       K20rusersd         K36dhcp6s       K65kadmin     


K85mdmpd       S05kudzu       


     S19rpcgssd     S90canna
K10dc_server       K20rwhod           K36lisa         K65kprop      


K85zebra       S06cpuspeed    


     S25netfs       S90crond
K10psacct          K24irda            K36mysqld       K65krb524     


K87auditd      


S08arptables_jf     S26apmd        S95anacron
K10radiusd         K25squid           K36postgresql   K65krb5kdc    


K87multipathd  S08ip6tables   


     S26lm_sensors  S97messagebus
K10xfs             K28amd             K45arpwatch     K73ypbind     


K88opensm      S08iptables    


     S28autofs      S98cups-config-daemon
K12dc_client       K30sendmail        K45named        K74nscd       


K89iscsi       S09isdn        


     S40smartd      S98haldaemon
K12FreeWnn         K30spamassassin    K46radvd        K74ntpd       


K89netplugd    S09pcmcia      


     S44acpid       S99local
K12mailman         K34dhcrelay        K50netdump      K74ypserv     


K90bluetooth   S10network     


     S54hpoj
K15httpd           K34yppasswdd       K50snmpd        K74ypxfrd     


K94diskdump    S12syslog      


     S55cups
linux在开机时会读取/etc/rc.d/rcX.d(根据X的运行级别)
终止K开头的服务.
开启S开头的服务.
我们通过ntsysv命令所做的更改都会在这里体现出来.
好,现在应该到我们的重点了,就是要开启那些服务,关闭那些服务.
我把每一个服务都代表什么写出来,大家自己根据自己的需要来决定.
amd:自动安装NFS(网络文件系统)守侯进程
apmd:高级电源管理
Arpwatch:记录日志并构建一个在LAN接口上看到的以太网地址和IP地址对数据



atd 运行用户用At命令调度的任务。也在系统负荷比较低时 运行批处理任务。
Autofs:自动安装管理进程automount,与NFS相关,依赖于NIS
Bootparamd:引导参数服务器,为LAN上的无盘工作站提供引导所需的相关信息
crond:Linux下的计划任务
Dhcpd:启动一个DHCP(动态IP地址分配)服务器
Gated:网关路由守候进程,使用动态的OSPF路由选择协议
gpm gpm为文本模式下的Linux程序如mc(Midnight Commander)提供了
鼠标的支持。它也支持控制台鼠标的拷贝,粘贴操作以及弹出式菜单。
Httpd:WEB服务器
Inetd:支持多种网络服务的核心守候程序
Innd:Usenet新闻服务器
keytable 该程序的功能是转载您在/etc/sysconfig/keyboards里说明的键盘
映射表,该表可以通过kbdconfig工具进行选 择。您应该使该程序
处于激活状态。
ldap LDAP代表Lightweight Directory Access Protocol, 实现了目录
访问协议的行业标准。
Linuxconf:允许使用本地WEB服务器作为用户接口来配置机器
Lpd:打印服务器
Mars-nwe:mars-nwe文件和用于Novell的打印服务器
mcserv Midnight Commander服务进程允许远程机器上的用户通过Midnight
Commander文件管理器操作本机文件。服务进程用PAM来验证用户,
需要给出“用户名/口令”以通过验证
named:DNS服务器
netfs:安装NFS、Samba和NetWare网络文件系统
network:激活已配置网络接口的脚本程序
nfs:打开NFS服务
nscd:nscd(Name Switch Cache daemon)服务器,用于NIS的一个支持服务,它


高速缓存用户口令和组成成员关



Pcmcia pcmcia主要用于支持笔记本电脑。
portmap:RPC portmap管理器,与inetd类似,它管理基于RPC服务的连接
postgresql:一种SQL数据库服务器
random 保存和恢复系统的高质量随机数生成器,这些随机数是系统一些随
机行为提供的
routed:路由守候进程,使用动态RIP路由选择协议
rstatd:一个为LAN上的其它机器收集和提供系统信息的守候程序
ruserd:远程用户定位服务,这是一个基于RPC的服务,它提供关于当前记录到


LAN上一个机器日志中的用户信



rwalld:激活rpc.rwall服务进程,这是一项基于RPC的服务,允许用户给每个注


册到LAN机器上的其他终端写消



rwhod:激活rwhod服务进程,它支持LAN的rwho和ruptime服务
sendmail:邮件服务器sendmail
smb:Samba文件共享/打印服务
snmpd:本地简单网络管理候进程
squid:激活代理服务器squid
syslog:一个让系统引导时起动syslog和klogd系统日志守候进程的脚本
Webmin webmin是基于web的集系统管理与网络管理于一身的强大管理工具。
利用webmin的强大功能,用户可以通过web浏览器来方便地设置自
己的服务器、dns、samba、nfs、本地/远程文件系统以及许多其他的
系统配置。
xfs:X Window字型服务器,为本地和远程X服务器提供字型集
xntpd:网络时间服务器
ypbind:为NIS(网络信息系统)客户机激活ypbind服务进程
yppasswdd:NIS口令服务器
ypserv:NIS主服务器
gpm:管鼠标的
identd:AUTH服务,在提供用户信息方面与finger类似
可能还有不全的解释,希望大家能补上.
 

六,日志的安全.

我在这里只讲解日志的安全问题,也就是通过日志来查看那些可疑的用户登陆过


机器.不会详细介绍日志方面的


知识.(关于linux日志我认为是很重要的东西,作为一名系统维护人员,必须对


linux日志有一定了解.我也会马上


详细写这方面的文章.)
三个重要的日志文件
/var/log/wtmp 记录每个用户登陆和推出时间的永久记录.
/var/run/utmp 记录当前登陆到系统的每个用户信息.
/var/log/lastlog 每个用户最后一次登陆的信息(最新的信息)
wtmp和utmp都是二进制文件,它们要用命令来查看内容.
1,命令who,查看utmp文件当前的每个用户的信息,它默认输出包括用户名,终端类


型,登陆时间及远程主机.
如下:
[root@tp log]# who
root     pts/0        May  4 22:10 (192.168.0.5)
如果指明了文件,则回显示自wtmp创建以来所有登陆的用户信息.
[root@tp log]# who /var/log/wtmp
root     tty1         May  4 20:44
root     pts/0        May  4 20:52 (211.101.46.195)
root     tty1         May  4 21:05
root     pts/0        May  4 21:05 (211.101.46.195)
root     pts/1        May  4 21:09 (192.168.0.5)
root     pts/0        May  4 21:38 (192.168.0.5)
root     pts/0        May  4 22:10 (192.168.0.5)
2,命令w,查看utmp文件并显示当前系统中每个用户和它所运行的进程信息.
如:
[root@tp log]# w
 23:00:48 up 54 min,  1 user,  load average: 0.00, 0.00, 0.00
USER     TTY      FROM              LOGIN@   IDLE   JCPU   PCPU WHAT
root     pts/0    192.168.0.5      22:10    0.00s  0.03s  0.00s w
3,users,显示当前当前登陆的用户数量.
如,
[root@tp log]# users
root root
这表明两个root用户在同时登陆这台机器.
4,last命令,用来显示wtmp文件第一次 创建以来所有登陆过的用户.
如:
[root@tp log]# last
root     pts/1        192.168.0.5      Fri May  4 23:01 - 23:02  


(00:00)   
root     pts/0        192.168.0.5      Fri May  4 22:10   still logged 


in  
reboot   system boot  2.6.9-34.EL      Fri May  4 22:07          


(00:59)   
root     pts/0        192.168.0.5      Fri May  4 21:38 - down   


(00:27)   
reboot   system boot  2.6.9-34.EL      Fri May  4 21:36          


(00:29)   
root     pts/1        192.168.0.5      Fri May  4 21:09 - down   


(00:25)   
root     pts/0        211.101.46.195   Fri May  4 21:05 - down   


(00:29)   
root     tty1                          Fri May  4 21:05 - down   


(00:30)   
reboot   system boot  2.6.9-34.EL      Fri May  4 21:03          


(00:31)   
root     pts/0        211.101.46.195   Fri May  4 20:52 - crash  


(00:11)   
root     tty1                          Fri May  4 20:44 - crash  


(00:18)   
reboot   system boot  2.6.9-34.EL      Fri May  4 20:32          


(01:02)   
reboot   system boot  2.6.9-34.EL      Tue May  1 08:32         


(3+13:02)  
reboot   system boot  2.6.9-34.EL      Tue May  1 08:27         


(3+13:07)  
reboot   system boot  2.6.9-34.EL      Tue May  1 08:24         


(3+13:10)  
reboot   system boot  2.6.9-34.EL      Tue May  1 08:13         


(3+13:22)  
wtmp begins Tue May  1 08:13:04 2007
我们也可以指明用户,[root@tp log]# last root
root     pts/1        192.168.0.5      Fri May  4 23:01 - 23:02  


(00:00)   
root     pts/0        192.168.0.5      Fri May  4 22:10   still logged 


in  
root     pts/0        192.168.0.5      Fri May  4 21:38 - down   


(00:27)   
root     pts/1        192.168.0.5      Fri May  4 21:09 - down   


(00:25)   
root     pts/0        211.101.46.195   Fri May  4 21:05 - down   


(00:29)   
root     tty1                          Fri May  4 21:05 - down   


(00:30)   
root     pts/0        211.101.46.195   Fri May  4 20:52 - crash  


(00:11)   
root     tty1                          Fri May  4 20:44 - crash  


(00:18)   
wtmp begins Tue May  1 08:13:04 2007
5,命令ac,根据wtmp文件中每个用户进入和退出时间.(以小时计算),不用参数代


表全部
[root@tp log]# ac
        total        2.88
[root@tp log]# ac -d 代表每天总连接时间
Today   total        2.89
[root@tp log]# ac -p 代表每个用户总连接时间
        root                                 2.89
        total        2.89
我们要养成经常查看日志来观察有无可疑用户等问题的存在.
========

linux系统安全日志



我们主要讲一下Linux环境中的系统记帐和系统日志管理以及怎么用一些工具更


加方便有效的管理日志信息。
当我们用上面的方法进行了 Linux 服务器的安装和一些基本的设置后,我们的


服务器应该说来是比较安全的。但是总是还会有黑客可以通过各种方法利用系统


管理员的疏忽侵入我们的系统。他们的一举一动都会记录到系统的日志之中,尽


管他们可能可以改变这些日志信息,甚至用自己的程序替换掉我们系统本身的命


令程序,但是通过日志我们总还是能找到一些蛛丝马迹。下面我们主要讲一下 


Linux 环境中的系统记帐和系统日志管理以及怎么用一些工具更加方便有效的管


理日志信息。


1 系统记帐



最初开发的系统记帐用于跟踪用户资源消费情况,从用户帐号中提取费用为目地


的。现在我们可以把它用于安全目的,给我们提供有关在系统中发生的各种活动


的有价值信息。


系统记帐主要非为两类:


1) 连接记帐


连接记帐是跟踪当前用户当前对话、用户登录和退出的活动。在 Linux 系统中


使用 utmp (动态用户对话)和 wtmp (登录/退出日志记录)工具来完成这一记帐


过程。Wtmp 工具同时维护重新引导和系统状态变化信息。各种程序对这些工具


进行刷新和维护,因此无须进行特殊的后台进程或程序。然而,utmp 和 wtmp 


输出结果文件必须存在,如果这些文件不存在会关闭连接记帐。与 utmp 和 


wtmp 有关的所有数据将分别保存在 /var/run/utmp 和 /var/log/wtmp 中。这


些文件归根用户所有。这些文件中的数据是用户不可读的,但也有工具可以转换


成可读的形式。


dump-utmp 可以转换连接记帐数据为可读的 ASCII 格式数据。


ac 命令提供了有关用户连接的大概统计,我们可以使用带有标志 d 和 p 的 ac 


命令。标志 d 显示了一天的总连接统计,标志 p 显示了每一个用户的连接时间


。这种统计信息的方式对了解与探测入侵有关的用户情况及其他活动很有帮助。


Last 和 who 是出于安全角度定期使用的最常用命令。


last 命令提供每一个用户的登录时间,退出登录时间,登录位置,重新引导系


统及运行级别变化的信息。last -10 表示 last 的最多输出结果为最近的 10 


条信息。缺省时 last 将列出在 /var/log/wtmp 中记录的每一连接和运行级别


的变化。从安全角度考虑,last 命令提供了迅速查看特定系统连接活动的一种


方式。观察每天的输出结果是个好习惯,从中可以捕获异常输入项。Last 命令


的 -x 选项可以通知系统运行级别的变化。


who 命令主要作用是报告目前正在登录的用户、登录设备、远程登录主机名或使


用的 Xwindows 的 X 显示值、会话闲置时间以及会话是否接受 write 或 talk 


信息。


例如: who -iwH 的输出结果:


USER     MESG    LINE   LOGIN-TIME      IDLE    FROM
Denny      -     tty1   Feb 18 08:42    old
这就表示用户 Denny 不能接受 write 或 talk 信息,2月18日8:42 从 tty1 登


录。该命令的安全值提供了用户连接的大致情况,这也为监视可疑活动提供了条


件。 其他的有关命令有 lastlog 命令,该命令报告了有关 /var/log/lastlog 


中记录的最后一次登录的数据信息。


2) 进程记帐


进程记帐是对进程活动的记录。原数据保存在 /var/log/pacct 文件中,其许可


权限为 600。该文件的存在是进程记帐有效的保障。与连接记帐不同,进程记帐


必须处于打开状态,使用下面的命令设置打开状态.


#    accton  /var/log/pacct
可以使用自选文件代替 /var/log/pacct,但必须记住这一文件并且设置适当的


许可权限。必须在每次引导的时候执行该命令,可以在 /etc/rc.d/rc.local 中


输入以下脚本:


#  initiate  process account
if  [ -x  /sbin/accton  ]
then
/sbin/accton   /var/log/pacct
echo  "process  accounting  initiated"
fi
一旦在系统中配置进程记帐后,将使用 3 个命令解释在 /var/log/pacct 中的


非用户可读的原数据。这些命令分别为 dump-acct,该命令与 dump-utmp 完全


相似,sa 命令用于统计系统进程记帐的大致情况,最后一个是 lastcomm 命令


列出了系统执行的命令。


1 sa 命令


与 ac 命令一样,sa 是一个统计命令。该命令可以获得每个用户或每个命令的


进程使用的大致情况,并且提供了系统资源的消费信息。在很大程度上,sa 又


是一个记帐命令,对于识别特殊用户,特别是已知特殊用户使用的可疑命令十分


有用。另外,由于信息量很大,需要处理脚本或程序筛选这些信息。


可以用这样的命令单独限制用户:


#    sa -u |grep joe
joe     0.00   cpu   bash
joe     0.00   cpu   ls
joe     0.01   cpu   ls
joe     0.01   cpu   lastcomm
joe     0.01   cpu   tcpdump
joe     0.01   cpu   reboot
输出结果从左到右依次为:用户名、CPU 使用时间秒数、命令(最多为 16 个字


符)。


2 lastcomm 命令


与 sa 命令不同,lastcomm 命令提供每一个命令的输出结果,同时打印出与执


行每个命令有关的时间印戳。就这一点而说,lastcomm 比 sa 更有安全性。


lastcomm 命令使用命令名,用户名或终端名作为变量。该命令可以查询进程记


帐数据库。下面显示 lastcomm joe 的输出结果,每行表示命令的执行情况,从


左到右为:用户、设备、使用的 cpu 时间秒数、执行命令的日期和时间。


#   lastcomm joe
reboot     joe    ttyp1    0.01    secs  Fri  Feb 26  18:40
tcpdump   joe    ttyp1    0.01    secs  Fri  Feb 26  18:39
lastcomm  joe    ttyp1    0.01    secs  Fri  Feb 26  18:32
ls        joe    ttyp1    0.01    secs   Fri  Feb 26  18:30
ls        joe    ttyp1    0.00    secs   Fri  Feb 26  18:28
bash      joe    ttyp1    0.00    secs   Fri  Feb 26  18:25
如果系统被入侵,请不要相信在 lastlog、utmp、wtmp、pacct 中记录的信息,


但也不要忽略,因为这些信息可能被修改过了。另外有可能有人替换了who程序


来掩人耳目。


通常,在已经识别某些可疑活动后,进程记帐可以有效的发挥作用。使用 


lastcomm 可以隔绝用户活动或在特定时间执行命令。但是使用该命令必须设置


为打开状态。


基本上,/var/log/pacct,/var/run/utmp, /var/log/pacct是动态数据库文件。


其中/var/log/pacct和/var/log/wtmp文件随着输入项的增加和修改而增加。问


题在于这些文件处于动态增加状态,因此到一定程度就会变的很大。


我们可以通过一个叫 logrotate 的程序来解决上面这个问题,该程序读 


/etc/logrotate.conf 配置文件,该配置文件告诉 logrotate 所要读 


/etc/logrotate.d 目录中的文件。可以通过它来设定日志文件的循环时间。


2 系统日志



在 Linux 下使用各种日志文件,有些用于某些特殊用途,例


如:/var/log/xferlog 用于记录文件传输协议 FTP 的信息。其他日志文件,例


如 /var/log/messages 文件通常包含许多系统和内核工具的输入项。这些日志


文件为系统的安全状态提供了信息。


我们主要讲解两个日志守护程序---syslog和klogd------并且简要叙述了由


Linux操作系统生成的其他其他日志文件。目的是提供基本的配置情况。


2.1 syslog系统日志工具


大部分的 Linux 系统中都要使用 syslog 工具,它是相当灵活的,能使系统根


据不同的日志输入项采取不同的活动。下面将详细讨论syslog 的工作机制以及


在配置文件 /etc/syslog.conf 中的配置,还将论述利用 syslog 灵活性和功能


性进行工作的各种方法。


1) 概述


非常简单,syslog 工具由一个守护程序组成。它能接受访问系统的日志信息并


且根据 /etc/syslog.conf 配置文件中的指令处理这些信息。程序,守护进程和


内核提供了访问系统的日志信息。因此,任何希望生成日志信息的程序都可以向 


syslog 接口呼叫生成该信息。


通常,syslog 接受来自系统的各种功能的信息,每个信息都包括重要


级。/etc/syslog.conf 文件通知 syslogd 如何根据设备和信息重要级别来报告


信息。


2) etc/syslog.conf


/etc/syslog.conf 文件使用下面的形式


facility.level    action
空白行和以#开头的行可以忽略。Facility.level 字段也被称做 seletor。应该


使用一次或多次 tab 键分隔 facility 和 action。大部分 Linux 使用这些空


格为分隔符。现在分析一下 /etc/syslog.conf 中的三个要素。


facility 指定 syslog 功能,主要包括以下这些:


auth  由 pam_pwdb 报告的认证活动。
authpriv 包括特权信息如用户名在内的认证活动
cron  与 cron 和 at 有关的信息。
daemon 与 inetd 守护进程有关的信息。
kern  内核信息,首先通过 klogd 传递。
lpr   与打印服务有关的信息。
mail  与电子邮件有关的信息
mark  syslog 内部功能用于生成时间戳
news  来自新闻服务器的信息
syslog  由 syslog 生成的信息
user   由用户程序生成的信息
uucp   由 uucp 生成的信息
local0----local7   与自定义程序使用,例如使用 local5 做为 ssh 功能
*   通配符代表除了 mark 以外的所有功能
与每个功能对应的优先级是按一定顺序排列的,emerg 是最高级,其次是 alert


,依次类推。缺省时,在 /etc/syslog.conf 记录中指定的级别为该级别和更高


级别。如果希望使用确定的级别可以使用两个运算符号!(不等)和=。


user.=info


表示告知 syslog 接受所有在 info 级别上的 user 功能信息。


syslog 级别如下:


emerg 或 panic   该系统不可用
alert            需要立即被修改的条件
crit             阻止某些工具或子系统功能实现的错误条件
err             阻止工具或某些子系统部分功能实现的错误条件
warning         预警信息
notice           具有重要性的普通条件
info             提供信息的消息
debug           不包含函数条件或问题的其他信息
none            没有重要级,通常用于排错
*               所有级别,除了none
action字段所表示的活动具有许多灵活性,特别是,可以使用名称管道的作用是


可以使 syslogd 生成后处理信息。


syslog 主要支持以下活动


file     指定文件的绝对路径
terminal 或 print    完全的串行或并行设备标志符
@host   远程的日志服务器
username  发送信息到使用 write 的指定用户中
named pipe  指定使用 mkfifo 命令来创建的 FIFO 文件的绝对路径。




 
3) 调用 syslogd 守护程序


syslog 守护程序是由 /etc/rc.d/init.d/syslog 脚本在运行级2下被调用的,


缺省不使用选项。但有两个选项 -r 和 -h 很有用。


如果将要使用一个日志服务器,必须调用 syslogd -r。缺省情况下 syslog 不


接受来自远程系统的信息。当指定 -r 选项,syslogd 将会监听从 514 端口上


进来的 UDP 包。


如果还希望日志服务器能传送日志信息,可以使用 -h 标志。缺省时,syslogd 


将忽略使其从一个远程系统传送日志信息到另一个系统的/etc/syslog.conf 输


入项。


4) klogd 守护进程


klogd 守护进程获得并记录 Linux 内核信息。通常,syslogd 会记录 klogd 传


来的所有信息,然而,如果调用带有 -f filename 变量的 klogd 时,klogd 就


在 filename 中记录所有信息,而不是传给 syslogd。当指定另外一个文件进行


日志记录时,klogd 就向该文件中写入所有级别或优先权。Klogd 中没有和 


/etc/syslog.conf 类似的配置文件。使用 klogd 而避免使用 syslogd 的好处


在于可以查找大量错误。如果有人入侵了内核,使用 klogd 可以修改错误。


5) 其他日志


在 /var/log 和不同版本的系统中以及自己配置的应用程序中都可以找到其他日


志文件。当然,/etc/syslog.conf 列出了由 syslogd 管理的所有日志文件名和


位置。其他日志由其他应用程序管理。例如在 Redhat6.2 中,apache server 


生成 /var/log/htmlaccess.log 文件记录客户访问,生成 


/var/log/httpd/error.log 文件在 syslog 以外查找错误。


cron 工具维护的信息日志文件 /var/log/cron。当 Linuxconf 工具记录系统重


新配置信息时,将生成日志文件如 /var/log/nerconf.log。samba 在 


/var/log/samba 中维护其日志信息。


另外由于 syslogd 在系统非常繁忙时,可能会丢失信息,所以,可以用 cyclog 


替换 syslog。
========

Linux下常用安全策略设置的六个方法

 
   “安全第一”对于linux管理界乃至计算机也都是一个首要考虑的问题。加


密的安全性依赖于密码本身而非算法!而且,此处说到的安全是指数据的完整性


,由此,数据的认证安全和完整性高于数据的私密安全,也就是说数据发送者的


不确定性以及数据的完整性得不到保证的话,数据的私密性当无从谈起!


1. 禁止系统响应任何从外部/内部来的ping请求攻击者一般首先通过ping命令检


测此主机或者IP是否处于活动状态 ,如果能够ping通 某个主机或者IP,那么攻


击者就认为此系统处于活动状态,继而进行攻击或破坏。如果没有人能ping通机


器并收到响应,那么就可以大大增强服务器的安全性,linux下可以执行如下设


置,禁止ping请求:


  [root@localhost ~]#echo “1”> 


/proc/sys/net/ipv4/icmp_echo_ignore_all默认情况


下“icmp_echo_ignore_all”的值为“0”,表示响应ping操作。


  可以加上面的一行命令到/etc/rc.d/rc.local文件中,以使每次系统重启后


自动运行。


2.禁止Control-Alt-Delete组合键重启系统


  在linux的默认设置下,同时按下Control-Alt-Delete键,系统将自动重启


,这是很不安全的,因此要禁止Control-Alt-Delete组合键重启系统,只需修改


/etc/inittab文件:


  代码如下:


  [root@localhost ~]#vi /etc/inittab


  找到此行:ca::ctrlaltdel:/sbin/shutdown -t3 -r now在之前加上“#”


  然后执行:


  代码如下:


  [root@localhost ~]#telinit q


3.限制Shell记录历史命令大小


  默认情况下,bash shell会在文件$HOME/.bash_history中存放多达1000条


命令记录(根据系统不同,默认记录条数不同)。系统中每个用户的主目录下都有


一个这样的文件。


  这么多的历史命令记录,肯定是不安全的,因此必须限制该文件的大小。


  可以编辑/etc/profile文件,修改其中的选项如下:


  HISTSIZE=30


  表示在文件$HOME/.bash_history中记录最近的30条历史命令。如果


将“HISTSIZE”设置为0,则表示不记录历史命令,那么也就不能用键盘的上下


键查找历史命令了。


 4.删除系统默认的不必要用户和组


  Linux提供了各种系统账户,在系统安装完毕,如果不需要某些用户或者组


,就要立即删除它,因为账户越多,系统就越不安全,越容易受到攻击。


  删除系统不必要的用户用下面命令


  代码如下:


  [root@localhost ~]# userdel username


  删除系统不必要的组用如下命令:


  代码如下:


  [root@localhost ~]# groupdel groupname


  Linux系统中可以删除的默认用户和组有:


  删除的用户,如


adm,lp,sync,shutdown,halt,news,uucp,operator,games,gopher等。


  删除的组,如adm,lp,news,uucp,games,dip,pppusers,popusers,slipusers


等。


5. 关闭selinux


  SELinux是 Security-Enhanced Linux的简称,是一种内核强制访问控制安


全系统,目前SELinux已经集成到Linux 2.6内核的主线和大多数Linux发行版上


,由于SELinux与现有Linux应用程序和Linux内核模块兼容性还存在一些问题,


因此建议初学者先关闭selinux,等到对linux有了深入的认识后,再对selinux


深入研究不迟!


  查看linux系统selinux是否启用,可以使用getenforce命令:


  代码如下:


  [root@localhost ~]# getenforce


  Disabled


  关闭selinux,在redhat系列发行版中,可以直接修改如下文件:


  代码如下:


  [root@localhost ~]#vi /etc/sysconfig/selinux# 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


  # SELINUXTYPE= type of policy in use. Possible values are:


  # targeted - Only targeted network daemons are protected.


  # strict - Full SELinux protection.


  SELINUXTYPE=targeted


  将SELINUX=enforcing修改为SELINUX=disabled, 重启系统后将会停止


SElinux。


6.设定tcp_wrappers防火墙


  Tcp_Wrappers是一个用来分析TCP/IP封包的软件,类似的IP封包软件还有


iptables,linux默认都安装了此软件,作为一个安全的系统,Linux本身有两层


安全防火墙,通过IP过滤机制的iptables实现第一层防护,iptables防火墙通过


直观地监视系统的运行状况,阻挡网络中的一些恶意攻击,保护整个系统正常运


行,免遭攻击和破坏。关于iptables的实现,将在下个章节详细讲述。如果通过


了第一层防护,那么下一层防护就是tcp_wrappers了,通过Tcp_Wrappers可以实


现对系统中提供的某些服务的开放与关闭、允许和禁止,从而更有效地保证系统


安全运行。


  Tcp_Wrappers的使用很简单,仅仅两个配置文件:/etc/hosts.allow


和/etc/hosts.deny(1) 查看系统是否安装了Tcp_Wrappers


  [root@localhost ~]#rpm -q tcp_wrappers 或者[root@localhost ~]#rpm 


-qa | grep tcp


  tcp_wrappers-7.6-37.2


  tcpdump-3.8.2-10.RHEL4


  如果有上面的类似输出,表示系统已经安装了tcp_wrappers模块。如果没有


显示,可能是没有安装,可以从linux系统安装盘找到对应RPM包进行安装。


  (2)tcp_wrappers防火墙的局限性


  系统中的某个服务是否可以使用tcp_wrappers防火墙,取决于该服务是否应


用了libwrapped库文件,如果应用了就可以使用tcp_wrappers防火墙,系统中默


认的一些服务如:sshd、portmap、sendmail、xinetd、vsftpd、tcpd等都可以


使用tcp_wrappers防火墙。


  (3) tcp_wrappers设定的规则


  tcp_wrappers防火墙的实现是通过/etc/hosts.allow和/etc/hosts.deny两


个文件来完成的,首先看一下设定的格式:


  service:host(s) [:action]


  l service:代表服务名,例如sshd、vsftpd、sendmail等。


  l host(s):主机名或者IP地址,可以有多个,例如192.168.60.0、


www.ixdba.netl action:动作, 符合条件后所采取的动作。


  几个关键字:


  l ALL:所有服务或者所有IP。


  l ALL EXCEPT:所有的服务或者所有IP除去指定的。


  例如:ALL:ALL EXCEPT 192.168.60.132


  表示除了192.168.60.132这台机器,任何机器执行所有服务时或被允许或被


拒绝。


  了解了设定语法后,下面就可以对服务进行访问限定。


  例如互联网上一台linux服务器,实现的目标是:仅仅允许222.90.66.4、


61.185.224.66以及域名softpark.com通过SSH服务远程登录到系统,设置如下:


  首先设定允许登录的计算机,即配置/etc/hosts.allow文件,设置很简单,


只要修改/etc/hosts.allow(如果没有此文件,请自行建立)这个文件即可。


  只需将下面规则加入/etc/hosts.allow即可。


  sshd: 222.90.66.4 61.185.224.66 softpark.com接着设置不允许登录的机


器,也就是配置/etc/hosts.deny文件了。


  一般情况下,linux会首先判断/etc/hosts.allow这个文件,如果远程登录


的计算机满足文件/etc/hosts.allow设定的话,就不会去使用/etc/hosts.deny


文件了,相反,如果不满足hosts.allow文件设定的规则的话,就会去使用


hosts.deny文件了,如果满足hosts.deny的规则,此主机就被限制为不可访问


linux服务器,如果也不满足hosts.deny的设定,此主机默认是可以访问linux服


务器的,因此,当设定好/etc/hosts.allow文件访问规则之后,只需设


置/etc/hosts.deny为“所有计算机都不能登录状态”即可。


  sshd:ALL


  这样,一个简单的tcp_wrappers防火墙就设置完毕了。
========

LINUX安全加固


Redhat是目前企业中用的最多的一类Linux,而目前针对Redhat攻击的黑客也越


来越多了。我们要如何为这类服务器做好安全加固工作呢?

一. 账户安全

  1.1 锁定系统中多余的自建帐号
  检查方法:
  执行命令
  #cat /etc/passwd
  #cat /etc/shadow
  查看账户、口令文件,与系统管理员确认不必要的账号。对于一些保留的系


统伪帐户如:bin, sys,adm,uucp,lp, nuucp,hpdb, www, daemon等可根据


需要锁定登陆。
  备份方法:
  #cp -p /etc/passwd /etc/passwd_bak
  #cp -p /etc/shadow /etc/shadow_bak
  加固方法:
  使用命令passwd -l <用户名>锁定不必要的账号。
  使用命令passwd -u <用户名>解锁需要恢复的账号。
  


  图1
  风险:
  需要与管理员确认此项操作不会影响到业务系统的登录
  1.2设置系统口令策略
  检查方法:
  使用命令
  #cat /etc/login.defs|grep PASS查看密码策略设置
  备份方法:
  cp -p /etc/login.defs /etc/login.defs_bak
  加固方法:
  #vi /etc/login.defs修改配置文件
  PASS_MAX_DAYS 90 #新建用户的密码最长使用天数
  PASS_MIN_DAYS 0 #新建用户的密码最短使用天数
  PASS_WARN_AGE 7 #新建用户的密码到期提前提醒天数
  PASS_MIN_LEN 9 #最小密码长度9
  


  图2
  风险:无可见风险
  1.3禁用root之外的超级用户
  检查方法:
  #cat /etc/passwd 查看口令文件,口令文件格式如下:
  login_name:password:user_ID:group_ID:comment:home_dir:


command
  login_name:用户名
  password:加密后的用户密码
  user_ID:用户ID,(1 ~ 6000) 若用户ID=0,则该用户拥有超级用户的权限


。查看此处是否有多个ID=0。
  group_ID:用户组ID
  comment:用户全名或其它注释信息
  home_dir:用户根目录
  command:用户登录后的执行命令
  备份方法:
  #cp -p /etc/passwd /etc/passwd_bak
  加固方法:
  使用命令passwd -l <用户名>锁定不必要的超级账户。
  使用命令passwd -u <用户名>解锁需要恢复的超级账户。
  风险:需要与管理员确认此超级用户的用途。
  1.4 限制能够su为root的用户
  检查方法:
  #cat /etc/pam.d/su,查看是否有auth required 


/lib/security/pam_wheel.so这样的配置条目
  备份方法:#cp -p /etc/pam.d /etc/pam.d_bak
  加固方法:
  #vi /etc/pam.d/su
  在头部添加:
  auth required /lib/security/pam_wheel.so group=wheel
  这样,只有wheel组的用户可以su到root
  #usermod -G10 test 将test用户加入到wheel组
  


  图3
  风险:需要PAM包的支持;对pam文件的修改应仔细检查,一旦出现错误会导


致无法登陆;和管理员确认哪些用户需要su。
  当系统验证出现问题时,首先应当检查/var/log/messages或


者/var/log/secure中的输出信息,根据这些信息判断用户账号的有效
  性。如果是因为PAM验证故障,而引起root也无法登录,只能使用single 


user或者rescue模式进行排错。
  1.5 检查shadow中空口令帐号
  检查方法:
  #awk -F: '( == "") { print }' /etc/shadow
  备份方法:cp -p /etc/shadow /etc/shadow_bak
  加固方法:对空口令账号进行锁定,或要求增加密码
  


  图4
  风险:要确认空口令账户是否和应用关联,增加密码是否会引起应用无法连


接。

二、最小化服务

  2.1 停止或禁用与承载业务无关的服务
  检查方法:
  #who –r或runlevel 查看当前init级别
  #chkconfig --list 查看所有服务的状态
  备份方法:记录需要关闭服务的名称
  加固方法:
  #chkconfig --level <服务名> on|off|reset 设置服务在个init级别下开


机是否启动
  


  图5
  风险:某些应用需要特定服务,需要与管理员确认。

三、数据访问控制

  3.1 设置合理的初始文件权限
  检查方法:
  #cat /etc/profile 查看umask的值
  备份方法:
  #cp -p /etc/profile /etc/profile_bak
  加固方法:
  #vi /etc/profile
  umask=027
  风险:会修改新建文件的默认权限,如果该服务器是WEB应用,则此项谨慎


修改。

四、网络访问控制

  4.1 使用SSH进行管理
  检查方法:
  #ps –aef | grep sshd 查看有无此服务
  备份方法:
  加固方法:
  使用命令开启ssh服务
  #service sshd start
  风险:改变管理员的使用习惯
  4.2 设置访问控制策略限制能够管理本机的IP地址
  检查方法:
  #cat /etc/ssh/sshd_config 查看有无AllowUsers的语句
  备份方法:
  #cp -p /etc/ssh/sshd_config /etc/ssh/sshd_config_bak
  加固方法:
  #vi /etc/ssh/sshd_config,添加以下语句
  AllowUsers *@10.138.*.* 此句意为:仅允许10.138.0.0/16网段所有用户


通过ssh访问
  保存后重启ssh服务
  #service sshd restart
  风险:需要和管理员确认能够管理的IP段
  4.3 禁止root用户远程登陆
  检查方法:
  #cat /etc/ssh/sshd_config 查看PermitRootLogin是否为no
  备份方法:
  #cp -p /etc/ssh/sshd_config /etc/ssh/sshd_config_bak
  加固方法:
  #vi /etc/ssh/sshd_config
  PermitRootLogin no
  保存后重启ssh服务
  service sshd restart
  


  图6
  风险:root用户无法直接远程登录,需要用普通账号登陆后su
  4.4 限定信任主机
  检查方法:
  #cat /etc/hosts.equiv 查看其中的主机
  #cat /$HOME/.rhosts 查看其中的主机
  备份方法:
  #cp -p /etc/hosts.equiv /etc/hosts.equiv_bak
  #cp -p /$HOME/.rhosts /$HOME/.rhosts_bak
  加固方法:
  #vi /etc/hosts.equiv 删除其中不必要的主机
  #vi /$HOME/.rhosts 删除其中不必要的主机
  风险:在多机互备的环境中,需要保留其他主机的IP可信任。
  4.5 屏蔽登录banner信息
  检查方法:
  #cat /etc/ssh/sshd_config 查看文件中是否存在Banner字段,或banner字


段为NONE
  #cat /etc/motd 查看文件内容,该处内容将作为banner信息显示给登录用


户。
  备份方法:
  #cp -p /etc/ssh/sshd_config /etc/ssh/sshd_config_bak
  #cp -p /etc/motd /etc/motd_bak
  加固方法:
  #vi /etc/ssh/sshd_config
  banner NONE
  #vi /etc/motd
  删除全部内容或更新成自己想要添加的内容
  风险:无可见风险
  4.6 防止误使用Ctrl+Alt+Del重启系统
  检查方法:
  #cat /etc/inittab|grep ctrlaltdel 查看输入行是否被注释
  备份方法:
  #cp -p /etc/inittab /etc/inittab_bak
  加固方法:
  #vi /etc/inittab
  在行开头添加注释符号“#”
  #ca::ctrlaltdel:/sbin/shutdown -t3 -r now
  


  图7
  风险:无可见风险

五、用户鉴别

  5.1 设置帐户锁定登录失败锁定次数、锁定时间
  检查方法:
  #cat /etc/pam.d/system-auth 查看有无auth required pam_tally.so条目


的设置
  备份方法:
  #cp -p /etc/pam.d/system-auth /etc/pam.d/system-auth_bak
  加固方法:
  #vi /etc/pam.d/system-auth
  auth required pam_tally.so onerr=fail deny=6 unlock_time=300 设置


为密码连续错误6次锁定,锁定时间300秒
  解锁用户 faillog -u <用户名> -r
  风险:需要PAM包的支持;对pam文件的修改应仔细检查,一旦出现错误会导


致无法登陆;
  当系统验证出现问题时,首先应当检查/var/log/messages或


者/var/log/secure中的输出信息,根据这些信息判断用户账号的有效
  性。
  5.2 修改帐户TMOUT值,设置自动注销时间
  检查方法:
  #cat /etc/profile 查看有无TMOUT的设置
  备份方法:
  #cp -p /etc/profile /etc/profile_bak
  加固方法:
  #vi /etc/profile
  增加
  TMOUT=600 无操作600秒后自动退出
  风险:无可见风险
  5.3 Grub/Lilo密码
  检查方法:
  #cat /etc/grub.conf|grep password 查看grub是否设置密码
  #cat /etc/lilo.conf|grep password 查看lilo是否设置密码
  备份方法:
  #cp -p /etc/grub.conf /etc/grub.conf_bak
  #cp -p /etc/lilo.conf /etc/lilo.conf_bak
  加固方法:为grub或lilo设置密码
  风险:etc/grub.conf通常会链接到/boot/grub/grub.conf
  5.4 限制FTP登录
  检查方法:
  #cat /etc/ftpusers 确认是否包含用户名,这些用户名不允许登录FTP服务
  备份方法:
  #cp -p /etc/ftpusers /etc/ftpusers_bak
  加固方法:
  #vi /etc/ftpusers 添加行,每行包含一个用户名,添加的用户将被禁止登


录FTP服务
  风险:无可见风险
  5.5 设置Bash保留历史命令的条数
  检查方法:
  #cat /etc/profile|grep HISTSIZE=
  #cat /etc/profile|grep HISTFILESIZE= 查看保留历史命令的条数
  备份方法:
  #cp -p /etc/profile /etc/profile_bak
  加固方法:
  #vi /etc/profile
  修改HISTSIZE=5和HISTFILESIZE=5即保留最新执行的5条命令
  


  图8
  风险:无可见风险

六、审计策略

  6.1 配置系统日志策略配置文件
  检查方法:
  #ps –aef | grep syslog 确认syslog是否启用
  #cat /etc/syslog.conf 查看syslogd的配置,并确认日志文件是否存在
  系统日志(默认)/var/log/messages
  cron日志(默认)/var/log/cron
  安全日志(默认)/var/log/secure
  备份方法:
  #cp -p /etc/syslog.conf
  


  图9
  6.2 为审计产生的数据分配合理的存储空间和存储时间
  检查方法:
  #cat /etc/logrotate.conf 查看系统轮询配置,有无
  # rotate log files weekly
  weekly
  # keep 4 weeks worth of backlogs
  rotate 4 的配置
  备份方法:
  #cp -p /etc/logrotate.conf /etc/logrotate.conf_bak
  加固方法:
  #vi /etc/logrotate.d/syslog
  增加
  rotate 4 日志文件保存个数为4,当第5个产生后,删除最早的日志
  size 100k 每个日志的大小
  加固后应类似如下内容:
  /var/log/syslog/*_log {
  missingok
  notifempty
  size 100k # log files will be rotated when they grow bigger that 


100k.
  rotate 5 # will keep the logs for 5 weeks.
  compress # log files will be compressed.
  sharedscripts
  postrotate
  /etc/init.d/syslog condrestart >/dev/null 2>1 || true
  endscript
  }
  
========

你可能感兴趣的:(linux,安全,Linux安全)