说明: Linux主机安全笔记部分内容参考网络上各位大神所整理的资料,部分内容不断增加、修改。当然本人对Linux系统不是很专业,大家将计看看。


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

  • 最基本最简单的安全配置,保障计算机硬件配置等不被别人更改.给BIOS设置密码,防止改变启动顺序从软盘或 光盘启动.防止特殊的启动盘启动用户的系统,进入rescue或其他模式.改变或删除当前配置等.每一个细心的网 管每个细节都不应该忽视!

  • 禁止使用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@host01 ~]# vi /etc/login.defs

...

PASS_MAX_DAYS  9999  密码被用最多天数

PASS_MIN_DAYS  0     密码被用最少天数

PASS_MIN_LEN   5     系统默认密码长度5,我们可以该成8或更多.

PASS_WARN_AGE  7     密码有效期警告,超过7天将提示用户更换新的密码.

...

    Linux主机安全笔记_Linux

  1. /etc/profile文件是环境变量设置文件.在此文件设置环境变量将对所有用户生效.我们要在此文件设置自动 注销帐户的时间.及命令的历史记录数.

[root@host01~]# vi /etc/profile

...

HOSTNAME=`/bin/hostname`

HISTSIZE=1000这里1000代表用户操作命令的历史记录.应尽量小一些.设置成0也可以,呵呵.

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

...

  Linux主机安全笔记_Linux  _02 

  1. /etc/passwd文件存放系统用户名,用户标识(UID),组标识(GID)等的地方.我们要在这里找到并清除没有设置 口令的用户.同时还要清除一些特别帐号(因为可能会存在潜在的危险).

[root@host01 ~]# 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. 这表 明此用户没有密码.要不添加上,要不删掉.

Linux主机安全笔记_Linux  _03

  1. 特别帐号的处理 如果不启动用sendmail,删除如下用户

[root@host01]# userdel adm

[root@host01]# userdel lp

[root@host01]# userdel sync

[root@host01]# userdel shudown

[root@host01]# userdel halt

[root@host01]# userdel mail

如果不用Xwindows服务器.可有删除

[root@host01]# userdel news

[root@host01]# userdel uucp

[root@host01]# userdel operator

[root@host01]# userdel games

如果不允许匿名FTP帐号登陆,可删除

[root@hosts01]# userdel gopher

[root@host01]# userdel ftp

  1. 不使用root用户登录系统

  • # useradd arcky.li

  • # vim /etc/passwd

  • # 改 :arcky.li:x:500:500::/home/arcky.li:/bin/bash

         # 为: arcky.li:x:0:0::/home/arcky.li:/bin/bash    -->给arcky.li增加root权限,0:0为root的uid以及gid即用户组id与管理组id

  • # vim /etc/passed

  • # 改:root:x:0:0:root:/root:/bin/bash

         # 为:root:x:0:0:root:/root:/sbin/nologin -->修改root不能登录系统

  1. 利用lastb查看最后登录系统的主机,检查是否有非法用户登录并且检查/var/log/btmp是否过大,如果过大说明有非法用户登录系统

  Linux主机安全笔记_Linux  _04

  1. fail2ban可以监视系统日志,然后匹配日志的错误信息执行相应的屏蔽的作用 yum install     fail2ban -y安装


三  重要文件的安全设置.

首先要了解两个命令

1.  chmod:改变文件的属主

2.  chattr:改变文件属性

我们要做的是把重要文件的属主改成root并给相应的权限,还有就是改变文件的属性让它禁止被修改

我们来统计一下重要文件:(其实,只要你不想让其他用户更改的文件都可以这么做,我这里只是为安全而选择了

下面的文件.)

  • /etc/passwd,passwd-,passwd.OLD,group,group- 用户,组的ID等信息文件.

  • /etc/shadow,shadow-,gshadow,gshadow- 用户,组密码加密文件.

  • /etc/xinetd.conf 网络守护进程主配置文件

  • /etc/inittab  系统在启动是会读取这个文件里的内容.

  • /etc/services 防止未经许可的删除或添加服务

  • /etc/rc.d/rc.sysinit 系统启动是需要读取的文件,

  • /etc/rc.d/init.d/* 

以一个文件为例,其它都一样

[root@manager]# chmod 700 passwd

[root@manager]# chattr +i passwd

当chattr+i时就是禁止对文件进行修改,当我们要添加用户时,就会有麻烦,因为passwd文件禁止修改写入.所以我们还要该掉它的属性.chattr -i.

 

四  防止攻击系统安全设置

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

需要编辑文件

[root@manager /]# vi /etc/security/limits.conf

...

(这三行是添加的) 

*hard core 0    禁止创建core文件

*hard rss 5000  其他用户(除root)最多使用5M内存

*hard nproc 20  最多进程数限制在20

  Linux主机安全笔记_Linux  _05

 

注:*表示所有登陆到linux的用户.

#End of file

[root@manager /]# vi /etc/pam.d/login

...

在文件末尾加入下面一行

sessionrequired /lib/security/pam_limits.so

  1. 限制控制台的访问

[root@manager /]# vi /etc/securetty

...

我们注释掉

tty1

#tty2

#tty3

只留下tty1,这时,root仅可在tty1终端登录

  1. 禁止外来ping请求.

[root@manager /]# vi /etc/rc.d/rc.local

...

在最后加入一行

echo1 > /proc/sys/net/ipv4/icmp_echo_ignore_all 

  Linux主机安全笔记_Linux  _06

  1. 防止IP地址欺骗

[root@manger /]# vi /etc/host.conf

加入如下几行

orderbind,hosts

multioff

nospoofon

  Linux主机安全笔记_Linux  _07

 5.  使用TCP_WRAPPER

在默认情况下linux系统允许所有请求,可用TCP_WRAPPER增强安全性,

在/etc/hosts.deny写入"ALL:ALL"禁止所有请求

[root@manager /]# vi /etc/hosts.deny

#

#hosts.deny    This file describes the names of the hosts which are

#              *not* allowed to use the localINET 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"

  Linux主机安全笔记_Linux  _08 

把允许访问的客户,或服务添加到/etc/hosts.allow,冒号左边为服务,冒号右边为授权的机器

[root@manager /]# vi /etc/hosts.allow

#

#hosts.allow   This file describes the names of the hosts which are

#              allowed to use the local INETservices, as decided

#              by the '/usr/sbin/tcpd' server.

#

vsftp:211.101.46.253   注:仅如许IP地址为211.101.46.253的机器访问FIP服务器

6.  删减登录信息

 [root@manager ~]# rm -f /etc/issue

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

[root@manager ~]# touch /etc/issue

 [root@manager ~]# touch /etc/issue.net

 

五  确保开启服务的安全性

我们先来看一下自己系统开启了多少服务.

[root@manager~]# ps -eaf | wc -l

Linux主机安全笔记_Linux  _09

我们可以通过当前的进程里在来看一下都是什么服务

[root@manager ~]# ps -aux

Warning: bad syntax, perhaps a bogus '-'? See /usr/share/doc/procps-3.2.8/FAQ

USER        PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND

root          1  0.0  0.0  19232  1504 ?        Ss   Sep20   0:01 /sbin/init

root          2  0.0  0.0      0     0 ?        S    Sep20   0:00 [kthreadd]

root          3  0.0  0.0      0     0 ?        S    Sep20   0:00 [migration/0]

root          4  0.0  0.0      0     0 ?        S    Sep20   0:00 [ksoftirqd/0]

root          5  0.0  0.0      0     0 ?        S    Sep20   0:00 [stopper/0]

root          6  0.0  0.0      0     0 ?        S    Sep20   0:40 [watchdog/0]

root          7  0.0  0.0      0     0 ?        S    Sep20   0:00 [migration/1]

Linux主机安全笔记_Linux  _10

  • 查看连接状态,带有LISTEN的代表正在开启的端口,开启的服务.  [root@manager~]# netstat -an 

Linux主机安全笔记_Linux  _11                         


 

  • 查看启动服务

[root@manager~]# cd /etc/rc.d

[root@manager.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@manager.d]# cd rc3.d/

linux在开机时会读取/etc/rc.d/rcX.d(根据X的运行级别)


服务进程说明,可以根据此列表来确认那些服务器是可关闭的进程:

  • amd: 自动安装NFS(网络文件系统)守侯进程

  • apmd:  高级电源管理

  • Arpwatch:记录日志并构建一个在LAN接口上看到的以太网地址和IP地址对数据库

  • atd 运行用户用At命令调度的任务。也在系统负荷比较低时     运行处理任务。

  • Autofs:自动安装管理进程automount,与NFS相关,依赖于NISBootparamd:引导参数服务器,为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服务进程允许远程机器上的用户通过MidnightCommander文件管理器操作本机文件。服务进程用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类似

  •  

六  日志的安全.

日志的安全问题,也就是通过日志来查看那些可疑的用户登陆过机器。目前比较流行的ELK日志分析系统,建议大家有空可以研究研究。Linux系统三个重要的日志文件如下:

  • /var/log/wtmp 记录每个用户登陆和推出时间的永久记录.

  • /var/run/utmp 记录当前登陆到系统的每个用户信息.

  • /var/log/lastlog 每个用户最后一次登陆的信息(最新的信息)

wtmp和utmp都是二进制文件,它们要用命令来查看内容.

1.  命令who,查看utmp文件当前的每个用户的信息,它默认输出包括用户名,终端类型,登陆时间及远程主机.如下:

[root@manager]# who

root    pts/0        May  4 22:10 (192.168.0.5)

如果指明了文件,则回显示自wtmp创建以来所有登陆的用户信息.

[root@manager]# who /var/log/wtmp

root    tty1         May  4 20:44

root    pts/0        May  4 20:52(211.101.46.195)

2.  命令w,查看utmp文件并显示当前系统中每个用户和它所运行的进程信息.如:

[root@manager]# 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@manager]# users

root root

这表明两个root用户在同时登陆这台机器.

4.  last命令,用来显示wtmp文件第一次 创建以来所有登陆过的用户.如:

[root@manager]# 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  422: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  421:36          (00:29)   

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

 

我们也可以指明用户,[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 

wtmpbegins Tue May  1 08:13:04 2007

5.  命令ac,根据wtmp文件中每个用户进入和退出时间.(以小时计算),不用参数代表全部

[root@manager]# ac

       total        2.88

[root@manager]# ac -d 代表每天总连接时间

Today  total        2.89

[root@manager]# ac -p 代表每个用户总连接时间

       root                                2.89

       total        2.89

我们要养成经常查看日志来观察有无可疑用户等问题的存在.


七、常见安全隐患以及解决方法

  • 窃听:利用对数据加密方法

  • 篡改:利用哈西算法检验数据的完整性(MD5 SHA1)

 opensslenc -e -des3 -a -in /etc/passwd -out /home/passwd.des3    #加密

   openssl enc -d -des3 -a -in/home/passwd.des3 -out /home/passwd  #解密

   diff /home/passwd /etc/passwd  #对比两个文件是否一致

 -e  encrypt 加密;后面可以加很多加密的算法,如-des3加密算法

     -d  decrypt解码

     -a/-base64 base64 encode/decode, dependingon encryptyion flag。#base64编码/解码,这取决于加密的标志。 

     -in    inputfile

     -out  outputfile

          MD5: Message-Digest Algorithm 5(信息摘要算法)。MD5算法的哈希值大小为128。是一种不可逆的算法。不管输入法数据长短,最终哈西出来的数据长度是一样的。

          Linux主机安全笔记_Linux  _12

   MD5字符加密  

          SHA1: Secure Hash Algorithm(安全哈希算法)。SHA1算法哈希值大小为160。是一种不可逆的算法。

   Linux主机安全笔记_Linux  _13

  • 伪装(伪装WIF):     利用身份认证确保是否被授权(用户密码、数据证书、CA证书)

  • 网络中断-->DDOS攻击:加大带宽,加多服务器