• Linux--NiaoGe-Service-07网络安全与主机基本防护


     Linux系统内自带的防火墙有两层:

    第一层:数据包过滤防火墙:IP Filtering和Net Filter

    要进入Linux本机的数据包都会先通过Linux预先内置的防火墙(Net Filter),Net Filter是由iptables这个软件提供的,主要针对TCP/IP的数据包头部来进行过滤的机制,主要分析的是OSI的第2、3、4层,主要控制的是MAC、IP、ICMP、TCP与UDP等。

    第二层:TCP Wrappers

    通过NetFilter之后,网络数据包会开始接受Super Daemons及TCP Wrappers的检验。通俗的说,就是/etc/host.allow与/etc/host.deny的配置文件功能,这个功能也是针对TCP的Header进行再次分析,同理,用户也可以自定义一些机制来过滤某些IP或port,来来源端的数据包被丢弃或通过检验。

    除此之外,减少信息暴露的机会、建立严格的密码设置规则、完善权限设置、关闭不需要的网络服务、及时更新系统、关闭不需要的软件功能等。

    不要安装不明来源的软件,不要下载不明网站的文件数据等;不要让系统有过多的危险命令,如SUID/SGID等;定时使用RKHunter等类似的软件检查系统;

    CentOS的yum软件更新过程

    yum的功能

    [root@www ~]# yum [option] [查询的工作项目] [相关参数]
    选项与参数:
    -y:默认yes
    查询的工作项目:、
    install:指定安装软件的名称,所以后面需接软件名称
    update:进行整体升级行为;当然也可以借某个软件的名称,仅升级一个软件
    remove:删除某个软件,remove后接要删除的软件名称
    search:搜寻某个软件或是重要关键字
    list:列出目前yum所管理的所有软件名称与版本,有点类似rpm -qa
    info:类似rpm -qai的执行结果
    clean :下载文件爱你被放到/var/cache/yum,可使用clean将它移除,可清除的项目有package|headers|metadata|cache等
    grouplist:列出所有可使用的软件组,如Development Tools之类的
    groupinfo:后接group_name则可了解该group内含的所有软件名
    groupinstall:安装某个软件组,也常与--installroot=/some/path共享来安装系统更新
    groupremove:删除某个软件组

    实例1 搜寻CentOS官网提供的软件名称与raid相关

    [root@www ~]# yum search raid
    已加载插件:fastestmirror, security
    Loading mirror speeds from cached hostfile
     * base: mirrors.shu.edu.cn
     * extras: mirrors.cqu.edu.cn
     * updates: mirrors.shu.edu.cn
    base                                                        | 3.7 kB     00:00     
    c6-media                                                    | 4.0 kB     00:00 ... 
    extras                                                      | 3.4 kB     00:00     
    updates                                                     | 3.4 kB     00:00     
    ================================ N/S Matched: raid ================================
    dmraid.i686 : dmraid (Device-mapper RAID tool and library)
    dmraid.x86_64 : dmraid (Device-mapper RAID tool and library)
    dmraid-devel.x86_64 : Development libraries and headers for dmraid.
    dmraid-events-logwatch.x86_64 : dmraid logwatch-based email reporting
    dmraid-events.x86_64 : dmevent_tool (Device-mapper event tool) and DSO
    firstaidkit-plugin-mdadm-conf.noarch : Firstaidkit plugin to diagnose software raid
                                         : configuration file
    mdadm.x86_64 : The mdadm program controls Linux md devices (software RAID arrays)
    
      Name and summary matches only, use "search all" for everything.
    [root@www ~]# yum search all raid
    已加载插件:fastestmirror, security
    Loading mirror speeds from cached hostfile
     * base: mirrors.shu.edu.cn
     * extras: mirrors.cqu.edu.cn
     * updates: mirrors.shu.edu.cn
    ================================== Matched: raid ==================================
    dmraid.i686 : dmraid (Device-mapper RAID tool and library)
    dmraid.x86_64 : dmraid (Device-mapper RAID tool and library)
    dmraid-devel.x86_64 : Development libraries and headers for dmraid.
    dmraid-events-logwatch.x86_64 : dmraid logwatch-based email reporting
    dmraid-events.x86_64 : dmevent_tool (Device-mapper event tool) and DSO
    mdadm.x86_64 : The mdadm program controls Linux md devices (software RAID arrays)
    firstaidkit-plugin-mdadm-conf.noarch : Firstaidkit plugin to diagnose software raid
                                         : configuration file
    gnome-disk-utility.x86_64 : Disk management application
    lvm2.x86_64 : Userland logical volume management tools
    sgpio.x86_64 : SGPIO captive backplane tool

    实例2 根据实例1中的结果,如果想查询mdadm的功能是什么

    [root@www ~]# yum info mdadm
    已加载插件:fastestmirror, security
    Loading mirror speeds from cached hostfile
     * base: mirrors.shu.edu.cn
     * extras: mirrors.cqu.edu.cn
     * updates: mirrors.shu.edu.cn
    已安装的软件包
    Name        : mdadm
    Arch        : x86_64
    Version     : 3.3.4
    Release     : 8.el6
    Size        : 805 k
    Repo        : installed
    From repo   : anaconda-CentOS-201703281317.x86_64
    Summary     : The mdadm program controls Linux md devices (software RAID arrays)
    URL         : http://www.kernel.org/pub/linux/utils/raid/mdadm/
    License     : GPLv2+
    Description : The mdadm program is used to create, manage, and monitor Linux MD
                : (software RAID) devices.  As such, it provides similar functionality
                : to the raidtools package.  However, mdadm is a single program, and it
                : can perform almost all functions without a configuration file, though
                : a configuration file can be used to help with some common tasks.

    实例3 假如记不起某个软件的全程

    [root@www ~]# yum list javacc*
    已加载插件:fastestmirror, security
    Loading mirror speeds from cached hostfile
     * base: mirrors.shu.edu.cn
     * extras: mirrors.cqu.edu.cn
     * updates: mirrors.shu.edu.cn
    可安装的软件包
    javacc.x86_64                               4.1-0.5.el6                        base
    javacc-demo.x86_64                          4.1-0.5.el6                        base
    javacc-manual.x86_64                        4.1-0.5.el6                        base
    安装试试
    [root@www ~]# yum install -y javacc
    已加载插件:fastestmirror, security
    设置安装进程
    Loading mirror speeds from cached hostfile
     * base: mirrors.shu.edu.cn
     * extras: mirrors.cqu.edu.cn
     * updates: mirrors.shu.edu.cn
    解决依赖关系
    --> 执行事务检查
    ---> Package javacc.x86_64 0:4.1-0.5.el6 will be 安装
    --> 处理依赖关系 java-gcj-compat >= 1.0.31,它被软件包 javacc-4.1-0.5.el6.x86_64 需要
    --> 处理依赖关系 java-gcj-compat >= 1.0.31,它被软件包 javacc-4.1-0.5.el6.x86_64 需要
    --> 处理依赖关系 libgcj_bc.so.1()(64bit),它被软件包 javacc-4.1-0.5.el6.x86_64 需要
    --> 执行事务检查
    ---> Package java-1.5.0-gcj.x86_64 0:1.5.0.0-29.1.el6 will be 安装
    --> 处理依赖关系 sinjdoc,它被软件包 java-1.5.0-gcj-1.5.0.0-29.1.el6.x86_64 需要
    ---> Package libgcj.x86_64 0:4.4.7-23.el6 will be 安装
    --> 执行事务检查
    ---> Package sinjdoc.x86_64 0:0.5-9.1.el6 will be 安装
    --> 处理依赖关系 java_cup >= 0.10,它被软件包 sinjdoc-0.5-9.1.el6.x86_64 需要
    --> 执行事务检查
    ---> Package java_cup.x86_64 1:0.10k-5.el6 will be 安装
    --> 完成依赖关系计算
    
    依赖关系解决
    
    ===================================================================================
     软件包                 架构           版本                     仓库          大小
    ===================================================================================
    正在安装:
     javacc                 x86_64         4.1-0.5.el6              base         895 k
    为依赖而安装:
     java-1.5.0-gcj         x86_64         1.5.0.0-29.1.el6         base         139 k
     java_cup               x86_64         1:0.10k-5.el6            base         197 k
     libgcj                 x86_64         4.4.7-23.el6             base          19 M
     sinjdoc                x86_64         0.5-9.1.el6              base         705 k
    
    事务概要
    ===================================================================================
    Install       5 Package(s)
    
    总下载量:20 M
    Installed size: 68 M
    下载软件包:
    (1/5): java-1.5.0-gcj-1.5.0.0-29.1.el6.x86_64.rpm           | 139 kB     00:00     
    (2/5): java_cup-0.10k-5.el6.x86_64.rpm                      | 197 kB     00:00     
    (3/5): javacc-4.1-0.5.el6.x86_64.rpm                        | 895 kB     00:00     
    (4/5): libgcj-4.4.7-23.el6.x86_64.rpm                       |  19 MB     00:09     
    (5/5): sinjdoc-0.5-9.1.el6.x86_64.rpm                       | 705 kB     00:00     
    -----------------------------------------------------------------------------------
    总计                                               2.0 MB/s |  20 MB     00:10     
    运行 rpm_check_debug 
    执行事务测试
    事务测试成功
    执行事务
      正在安装   : libgcj-4.4.7-23.el6.x86_64                                      1/5 
      正在安装   : java-1.5.0-gcj-1.5.0.0-29.1.el6.x86_64                          2/5 
      正在安装   : 1:java_cup-0.10k-5.el6.x86_64                                   3/5 
      正在安装   : sinjdoc-0.5-9.1.el6.x86_64                                      4/5 
      正在安装   : javacc-4.1-0.5.el6.x86_64                                       5/5 
      Verifying  : javacc-4.1-0.5.el6.x86_64                                       1/5 
      Verifying  : sinjdoc-0.5-9.1.el6.x86_64                                      2/5 
      Verifying  : libgcj-4.4.7-23.el6.x86_64                                      3/5 
      Verifying  : 1:java_cup-0.10k-5.el6.x86_64                                   4/5 
      Verifying  : java-1.5.0-gcj-1.5.0.0-29.1.el6.x86_64                          5/5 
    
    已安装:
      javacc.x86_64 0:4.1-0.5.el6                                                      
    
    作为依赖被安装:
      java-1.5.0-gcj.x86_64 0:1.5.0.0-29.1.el6      java_cup.x86_64 1:0.10k-5.el6     
      libgcj.x86_64 0:4.4.7-23.el6                  sinjdoc.x86_64 0:0.5-9.1.el6      
    
    完毕!

    实例4 查看系统的软件组有多少个

    [root@www ~]# LANG=C yum grouplist
    Loaded plugins: fastestmirror, security
    Setting up Group Process
    Loading mirror speeds from cached hostfile
     * base: mirrors.shu.edu.cn
     * extras: mirrors.cqu.edu.cn
     * updates: mirrors.shu.edu.cn
    base/group_gz                                               | 242 kB     00:00     
    c6-media/group_gz                                           | 226 kB     00:00 ... 
    Installed Groups: 已安装的软件组
       Additional Development
       Base
       CIFS file server
       Compatibility libraries
       ......省略.......  
       Security Tools
       Server Platform
    Installed Language Groups: 已安装的语言
       Arabic Support [ar]
       Armenian Support [hy]
       Chinese Support [zh]
       ....省略.....
       Tajik Support [tg]
    Available Groups:尚未安装的软件组
       Backup Client
       .....省略.....
       Upper Sorbian Support [hsb]
       Urdu Support [ur]
       Uzbek Support [uz]
       Venda Support [ve]
       Vietnamese Support [vi]
       Walloon Support [wa]
       Welsh Support [cy]
       Xhosa Support [xh]
       Zulu Support [zu]
    Done

    实例 5 Desktop Platform内含多少个rpm软件

    [root@www ~]# yum groupinfo "Desktop Platform"
    已加载插件:fastestmirror, security
    设置组进程
    Loading mirror speeds from cached hostfile
     * base: mirrors.shu.edu.cn
     * extras: mirrors.cqu.edu.cn
     * updates: mirrors.shu.edu.cn
    
    组:桌面平台
     描述:支持的用于红帽企业版 Linux 桌面平台的程序库。
     必要的软件包:
       atk
       cairo
       dbus
       dbus-libs
       fontconfig
       ....省略.....
       qt
       qt3
       redhat-lsb-graphics
       redhat-lsb-printing
     可选的软件包:
       qt-mysql
       qt-odbc
       qt-postgresql
       qt3-MySQL
       qt3-ODBC
       qt3-PostgreSQL

    安装的话直接使用yum groupinstall "Desktop Platform"来安装。

    设置系统自动更新

    [root@www ~]# crontab -e
    
    30 4 * * * root yum -y update && yum clean packages

    自定义镜像站点

    对于自定义的景象站点,比较重要的一个目录是repodata,该目录是分析rpm软件后所产生的软件属性相依数据放置处。
    国内可以使用的镜像站点:
    http://mirrors.ustc.edu.cn/centos/  科大
    https://mirrors.tuna.tsinghua.edu.cn/centos/   清华
    https://mirrors.aliyun.com/centos/  阿里云
    http://mirrors.163.com/centos/ 网易
    其他自己可以搜索。
    [root@www ~]# ls /etc/yum.repos.d/
    CentOS-Base.repo       CentOS-fasttrack.repo  CentOS-Vault.repo
    CentOS-Debuginfo.repo  CentOS-Media.repo
    [root@www ~]# vim  /etc/yum.repos.d/CentOS-Base.repo  //自定义的话,只需将这个文件内的原来的连接替换成上面的连接即可。
    查看当前系统版本号
    [root@www ~]# cat /etc/redhat-release 
    CentOS release 6.10 (Final)
    以USTC为例,USTC提供了文件模板
    连接http://mirrors.ustc.edu.cn/help/centos.html
    [root@www ~]# yum repolist all | grep repolist
    repolist: 13,572
    当本地缓存里的数据与yum服务器的列表不同步的时候,可以使用以下方法
    [root@www ~]# yum clean [packages | headers | all]
    选项与参数
    packages:将已经下载的软件文件删除
    headers:将下载的软件头删除
    all:将所有的容器数据都删除
    范例:删除已下载过的所有容器的相关数据(含软件本身列表)
    [root@www ~]# yum clean all

    限制连接端口(port)

    服务器端启动的监听端口所对应的服务是固定的,如www的port80、FTP的port21、Email的port25.

    一般主机会有65536个port,这些port以1024为界,只有root才能启动保留的port,在小于1024的端口,都是以root身份才能启动的,这些port主要是用于一些常见的通信服务,在Linux系统中,常见的协议与port对应关系记录在/etc/services文件里面。

    大于1024用户Client端的Port:大于1024以上的Port主要是作为Client端的软件激活端口。

    是否需要三次握手

    建立可靠的连接服务需要使用到TCP协议,也就是需要所谓的三次握手,如果是非面向连接的服务,如DNS与视频系统,则只需UDP协议即可。

    通信协议可以启用在非正规的Port

    比如说:通常情况下WWW的默认启动的port是80,那么我们也可以通过修改配置文件,使之启动在其他port上,如8088,8008等,更改过端口口,客户端访问时只需在IP后面加port即可。

    端口查看命令:netstat、nmap

    列出正在监听的网络服务

    [root@www ~]# netstat -lntu
    Active Internet connections (only servers)
    Proto Recv-Q Send-Q Local Address               Foreign Address             State      
    tcp        0      0 127.0.0.1:631               0.0.0.0:*                   LISTEN      
    tcp        0      0 127.0.0.1:25                0.0.0.0:*                   LISTEN      
    tcp        0      0 0.0.0.0:445                 0.0.0.0:*                   LISTEN
    ......省略.....

    列出已经连接的网络状态

    [root@www ~]# netstat -tun
    Active Internet connections (w/o servers)
    Proto Recv-Q Send-Q Local Address               Foreign Address             State      
    tcp        0     64 192.168.30.12:22            192.168.30.1:5009           ESTABLISHED

    删除已建立或正在监听当中的连接

    [root@www ~]# netstat -tunp 
    Active Internet connections (w/o servers)
    Proto Recv-Q Send-Q Local Address               Foreign Address             State       PID/Program name   
    tcp        0     64 192.168.30.12:22            192.168.30.1:5009           ESTABLISHED 2147/sshd           
    [root@www ~]# kill -9 port

    nmap的安装和使用

    [root@www ~]# yum install -y nmap
    [root@www ~]# nmap [扫描类型] [扫描参数] [hosts 地址与范围]
    选项与参数:
    扫描类型:
    -sT:扫描TCP数据包已建立的连接connect()
    -sS:扫面TCP数据包带有SYN卷标的数据
    -sP:以ping的方式进行扫描
    -sU:以UDP的数据包格式进行扫描
    -sO:以IP的协议(protocol)进行主机的扫描
    扫描参数:
    -PT:使用TCP里头的ping的方式进行扫描,可以获知目前有几台计算机存在(较常用)
    -PI:使用实际的ping(带有ICMP数据包的)来进行扫描
    -p:这个port range,如1024-、80-102330000-60000等的使用方式
    Hosts地址与范围:
    192.168.1.100:直接写入HOST IP而已,仅检查一台
    192.168.1.0/24:为C Class的形态
    192.168.*.*:扫描B类地址
    192.168.1.0-5060-100103200:这种变形是的主机范围

    使用默认参数扫描本机所启用的port(只会扫描TCP)

    [root@www ~]# nmap localhost
    
    Starting Nmap 5.51 ( http://nmap.org ) at 2018-09-10 19:18 CST
    Nmap scan report for localhost (127.0.0.1)
    Host is up (0.0000050s latency).
    Other addresses for localhost (not scanned): 127.0.0.1
    Not shown: 994 closed ports
    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
    
    Nmap done: 1 IP address (1 host up) scanned in 0.09 seconds

    扫描本机的TCP/UDP端口

    [root@www ~]# nmap -sTU localhost
    
    Starting Nmap 5.51 ( http://nmap.org ) at 2018-09-10 19:20 CST
    Nmap scan report for localhost (127.0.0.1)
    Host is up (0.00083s latency).
    Other addresses for localhost (not scanned): 127.0.0.1
    Not shown: 1989 closed ports
    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
    68/udp  open|filtered dhcpc
    111/udp open          rpcbind
    137/udp open          netbios-ns
    138/udp open|filtered netbios-dgm
    631/udp open|filtered ipp
    
    Nmap done: 1 IP address (1 host up) scanned in 1.34 seconds

    通过ICMP数据包的检测,分析局域网内有几台主机是启动的

    [root@www ~]# nmap -sP 192.168.30.0/24
    
    Starting Nmap 5.51 ( http://nmap.org ) at 2018-09-10 19:23 CST
    Nmap scan report for 192.168.30.1
    Host is up (0.00013s latency).
    MAC Address: 00:50:56:C0:00:08 (VMware)
    Nmap scan report for 192.168.30.2
    Host is up (0.00014s latency).
    MAC Address: 00:50:56:F8:1A:6B (VMware)
    Nmap scan report for 192.168.30.9
    Host is up (0.000076s latency).
    MAC Address: 00:0C:29:CF:02:BA (VMware)
    Nmap scan report for 192.168.30.11
    Host is up (0.00020s latency).
    MAC Address: 00:0C:29:C6:12:12 (VMware)
    Nmap scan report for www.xueji.com (192.168.30.12)
    Host is up.
    Nmap scan report for 192.168.30.13
    Host is up (0.000064s latency).
    MAC Address: 00:0C:29:C6:12:12 (VMware)
    Nmap scan report for 192.168.30.254
    Host is up (0.000038s latency).
    MAC Address: 00:50:56:FA:92:FA (VMware)
    Nmap done: 256 IP addresses (7 hosts up) scanned in 7.48 seconds

    如果是想要将各个主机的启动Port做一番检测的话,使用如下命令:

    [root@www ~]# nmap 192.168.30.0/24

    stand alone与super daemon

    stand alone:是直接执行该服务的可执行文件,让该文件直接加载到内存当中运行,用这种方式来启动的优点是可以让服务具有较快速的相应。一般来说,这种哦哦那个服务的启动script都会放置到/etc/init.d/这个目录下,所以通常可以使用/etc/init.d/service name restart来重启service name。

    super daemon:用一个超级服务作为总管来统一管理某些特殊的服务,在CentOS 6.x系列中使用的是xinetd这个super daemon,这种方式启动的网络服务虽然在响应速度上会比较慢,但是,可以动过super daemon额外提供一些管理,如控制何时启动、何时可以进行连接、哪个IP可以连进来、是否允许同时连接的等。通常个别服务的配置文件放置在/etc/xinetd.d/这个目录下,配置完成后需要/etc/init.d/xinetd restart来重新启动是配置生效。

    实例 想知道系统中的port 111是否关闭了

    root@www ~]# netstat -tnlp | grep 111
    tcp        0      0 0.0.0.0:111                 0.0.0.0:*                   LISTEN      1581/rpcbind        
    tcp        0      0 :::111                      :::*                        LISTEN      1581/rpcbind        
    [root@www ~]# which rpcbind
    /sbin/rpcbind
    [root@www ~]# rpm -qf /sbin/rpcbind 
    rpcbind-0.2.0-16.el6.x86_64
    [root@www ~]# rpm -qc rpcbind | grep init
    /etc/rc.d/init.d/rpcbind
    [root@www ~]# /etc/init.d/rpcbind stop
    停止 rpcbind:                                             [确定]
    [root@www ~]# 

    实例 启动系统中的Telnet服务

    [root@www ~]# rpm -qa | grep telnet-server 首先查看系统中是否安装的了telenet服务
    [root@www ~]# yum install -y telnet-server 
    [root@www ~]# vim /etc/xinetd.d/telnet
    # default: on
    # description: The telnet server serves telnet sessions; it uses 
    #       unencrypted username/password pairs for authentication.
    service telnet
    {
            flags           = REUSE
            socket_type     = stream
            wait            = no
            user            = root
            server          = /usr/sbin/in.telnetd
            log_on_failure  += USERID
            disable         = no  原值yes,改为no
    }
    [root@www ~]# /etc/init.d/xinetd restart
    停止 xinetd:                                              [失败]
    正在启动 xinetd:                                          [确定]
    [root@www ~]# netstat -tnlp | grep 23
    tcp        0      0 :::23                       :::*                        LISTEN      3168/xinetd

    常见的必须存在的系统服务

    服务名称 服务内容
    acpid 新版的电源管理模块,通常建议开启,某些笔记本电脑不支持,那就得关闭了。
    atd 管理单一计划命令执行的服务,可以启动
    crond 管理计划任务的重要服务,必须启动
    haldaemon 用于检测系统硬件变更的服务,与USB设备关系很大
    iptables Linux内建的防火墙,可以启动
    network Linux的网络服务,如果不需要网络的话,那就不需要启动
    postfix 系统内部的邮件传递服务,建议启动
    rsyslog 系统的登录文件记录,建议启动
    sshd 默认启动,远程连接用到
    xinetd super Daemon,建议启动

    SELinux相关

    [root@www ~]# ls -Z 
    -rw-------. root root system_u:object_r:admin_home_t:s0 anaconda-ks.cfg
    drwxr-xr-x. root root unconfined_u:object_r:admin_home_t:s0 bin
    -rw-r--r--. root root unconfined_u:object_r:admin_home_t:s0 e1000e-3.4.2.1.tar.gz
    -rw-r--r--. root root system_u:object_r:admin_home_t:s0 install.log
    -rw-r--r--. root root system_u:object_r:admin_home_t:s0 install.log.syslog
    说明
    中间用冒号隔开的分别表示
    Identify:role:type即身份识别:角色:类型
    身份识别(identify):账号方面的身份识别,主要有
        root:表示root的账号身份
        system_u:表示系统程序方面的识别,通常就是程序
        user_u:一般用户帐号相关的身份
    角色(role):通过角色字段,我们可以知道这个数据是不是代表程序,文件资源还是用户
        object_r:代表的是文件或目录等文件资源,这是最常见的
        system_r:代表程序,不过,一般用户也会被指定为system_r.
    类型(type):在默认的target策略中,identifiy与role字段基本上是不重要的,重要的在于这个类型(Type)字段,基本上,一个主体程序能不能呢个读取到这个文件资源,与类型字段有关,而类型字段在文件与程序中的定义不太相同,分别是:
        type:在文件资源(object)中成为类型(type)
        domain:在主体程序(subject)中则称为域(domain)
    domain需要与type搭配,该程序才能够顺利地读取文件资源

    程序与文件SELinux Type字段的相关性

    身份识别 角色 该对应在target的意义
    root system_r 代表供root账号登录时所取得的权限
    system-u system_r 由于未系统账号,因此是非交互的系统运行程序
    user_u system_r 一般可登录用户的程序

    如上所述,最重要的自大unshi类型字段,主题与目标之间是否具有可以读写的权限,与程序的domain及文件的type有关,这两者的关系我们可以使用实现www服务功能的http程序与/var/www/html/网页存储目录来说明,首先,看看两者的安全性环境内容:

    [root@www ~]# yum install -y httpd 
    [root@www ~]# ls -Zd /usr/sbin/httpd  /var/www/html/
    -rwxr-xr-x. root root system_u:object_r:httpd_exec_t:s0 /usr/sbin/httpd
    drwxr-xr-x. root root system_u:object_r:httpd_sys_content_t:s0 /var/www/html/
    注意两者的角色都是object_r,代表都是文件,而httpd属于httpd-exec_t类型,/var/www/html则属于httpd_sys_content_t这个类型
    由以上信息克制,httpd属于httpd_exec_t这个可执行的类型,而/var/www/html/属于httpd_sys_content_t这个可以让httpd域(domain)读取的类型。

    SELinux的启动、关闭与查看

    值得注意的是,不是所有的Linux distribution都支持SELinux;

    SELinux的三种模式:

    enforcing:强制模式,代表SELinux已经启动,且已经开始限制domain/type了。

    permissive:宽容模式,代表SELinux已经启动,但是只会发出警告并不会实际限制。

    disabled:禁用,代表SELinux已经不再运行。

    SELinux的状态的查看、更改

    [root@www ~]# getenforce 
    Enforcing
    [root@www ~]# setenforce 0
    [root@www ~]# getenforce 
    Permissive
    [root@www ~]# setenforce 1
    [root@www ~]# getenforce 
    Enforcing
    [root@www ~]# vim /etc/selinux/config
    ......
    SELINUX=disabled   //永久关闭
    .......

    如果在更改了SELinux的状态后,某些服务在启动的时候抛出没有权限读取/lib/xxx里面的数据时,解决办法:将SELinux重新设为Permissive的状态,使用”restorecon -Rv /“重新还原所有的SELinux的类型即可。

    SELinux Type的修改

    chcon命令

    [root@www ~]# chcon [-R] [-t type] [-u user] [-r role] 文件
    [root@www ~]# chcon [-R] --reference=范例文件 文件
    选项与参数
    -R:连同该目录下的子目录也同时修改
    -t:后面接安全性环境的类型字段,如httpd_sys_content_t
    -u:后面接身份识别,如system_u
    -r:后面接角色,如system_r
    --reference=范例文件:以某个文件为范例修改后续接的文件的文件类型

    将/etc/hosts复制到/root/目录下,查看相关SELinux类型变化

    [root@www ~]# cp /etc/hosts /root/
    [root@www ~]# ls -dZ /etc/hosts /root/hosts  /root/
    -rw-r--r--. root root system_u:object_r:net_conf_t:s0  /etc/hosts
    dr-xr-x---. root root system_u:object_r:admin_home_t:s0 /root/
    -rw-r--r--. root root unconfined_u:object_r:admin_home_t:s0 /root/hosts
    [root@www ~]# mv /root/hosts /tmp/ [root@www
    ~]# ls -dZ /tmp/ /tmp/hosts drwxrwxrwt. root root system_u:object_r:tmp_t:s0 /tmp/ -rw-r--r--. root root unconfined_u:object_r:admin_home_t:s0 /tmp/hosts 如何将/tmp/hosts变更为最原始的net_conf_t,就要用到chcon命令 [root@www ~]# chcon -t net_conf_t /tmp/hosts [root@www ~]# ls -lZ /tmp/hosts -rw-r--r--. root root unconfined_u:object_r:net_conf_t:s0 /tmp/hosts #以/var/spool/mail为依据,将/tmp/hosts修改成该类型 [root@www ~]# ls -lZ /var/spool/mail/ -rw-------. root mail system_u:object_r:mail_spool_t:s0 root -rw-rw----. rpc mail system_u:object_r:mail_spool_t:s0 rpc -rw-rw----. student mail unconfined_u:object_r:mail_spool_t:s0 student -rw-rw----. test mail unconfined_u:object_r:mail_spool_t:s0 test -rw-rw----. xueji01 mail unconfined_u:object_r:mail_spool_t:s0 xueji01 -rw-rw----. xueji02 mail unconfined_u:object_r:mail_spool_t:s0 xueji02 -rw-rw----. xueji03 mail unconfined_u:object_r:mail_spool_t:s0 xueji03 -rw-rw----. xueji04 mail unconfined_u:object_r:mail_spool_t:s0 xueji04 -rw-rw----. xueji05 mail unconfined_u:object_r:mail_spool_t:s0 xueji05 [root@www ~]# chcon --reference=/var/spool/mail/ /tmp/hosts [root@www ~]# ls -lZ /tmp/hosts -rw-r--r--. root root system_u:object_r:mail_spool_t:s0 /tmp/hosts

    恢复原有的SELinux Type命令:restorecon

    [root@www ~]# restorecon [-Rv] 文件或目录
    选项与参数
    -R:连同子目录一起修改
    -v :将过程显示到屏幕上

    实例 将/tmp/hosts移动至/root并以默认的安全性环境修正过来

    [root@www ~]# mv /tmp/hosts /root/
    [root@www ~]# ls -lZ /root/hosts 
    -rw-r--r--. root root system_u:object_r:mail_spool_t:s0 /root/hosts
    [root@www ~]# restorecon -Rv /root/
    restorecon reset /root/hosts context system_u:object_r:mail_spool_t:s0->system_u:object_r:admin_home_t:s0

    通过semanage查询与修改默认的SELinux Type类型

    [root@www ~]# yum provides */semanage
    已加载插件:fastestmirror, security
    Loading mirror speeds from cached hostfile
    base/filelists_db                                           | 6.4 MB     00:03     
    c6-media/filelists_db                                       | 6.3 MB     00:00 ... 
    extras/filelists_db                                         |  24 kB     00:00     
    updates/filelists_db                                        | 852 kB     00:00     
    libsemanage-devel-2.0.43-5.1.el6.x86_64 : Header files and libraries used to build
                                            : policy manipulation tools
    Repo        : base
    匹配来自于:
    Filename    : /usr/include/semanage
    libsemanage-devel-2.0.43-5.1.el6.i686 : Header files and libraries used to build
                                          : policy manipulation tools
    Repo        : base
    匹配来自于:
    Filename    : /usr/include/semanage
    policycoreutils-python-2.0.83-30.1.el6_8.x86_64 : SELinux policy core python
                                                    : utilities
    Repo        : base
    匹配来自于:
    Filename    : /usr/sbin/semanage
    policycoreutils-python-2.0.83-30.1.el6_8.x86_64 : SELinux policy core python
                                                    : utilities
    Repo        : c6-media
    匹配来自于:
    Filename    : /usr/sbin/semanage
    libsemanage-devel-2.0.43-5.1.el6.i686 : Header files and libraries used to build
                                          : policy manipulation tools
    Repo        : c6-media
    匹配来自于:
    Filename    : /usr/include/semanage
    libsemanage-devel-2.0.43-5.1.el6.x86_64 : Header files and libraries used to build
                                            : policy manipulation tools
    Repo        : c6-media
    匹配来自于:
    Filename    : /usr/include/semanage
    [root@www ~]# yum install -y policycoreutils-python

    semanage命令

    [root@www ~]# semanage {login | user | port | interface | fcontext | translation} -l
    [root@www ~]# semanage fcontext -{a|d|m} -[frst] file_spec
    选项与参数:
    fcontext:主要用在安全性环境方面,-l为查询的意思
    -a:增加,用户可以增加一些目录的默认安全性环境类型设置
    -m:修改
    -d:删除

    实例 查询/var/www的默认安全性环境的设置

    [root@www ~]# semanage fcontext -l | grep '/var/www'
    /var/www(/.*)?                                     all files          system_u:object_r:httpd_sys_content_t:s0 
    /var/www/[^/]*/cgi-bin(/.*)?                       all files          system_u:object_r:httpd_sys_script_exec_t:s0 
    ........省略........

    实例 利用semanage设置/srv/xueji/目录的默认安全性环境为public_content_t

    [root@www ~]# mkdir /srv/xueji
    [root@www ~]# ls -lZd /srv/xueji/
    drwxr-xr-x. root root unconfined_u:object_r:var_t:s0   /srv/xueji/
    [root@www ~]# semanage fcontext -l | grep '/srv/'
    /srv/.*                                            all files          system_u:object_r:var_t:s0 
    /srv/([^/]*/)?ftp(/.*)?                            all files          system_u:object_r:public_content_t:s0 
    ..........省略.........
    [root@www ~]# semanage fcontext -a -t public_content_t "/srv/xueji(/.*)?"
    [root@www ~]# semanage fcontext -l | grep '/srv/xueji'
    /srv/xueji(/.*)?                                   all files          system_u:object_r:public_content_t:s0
    [root@www ~]# cat /etc/selinux/targeted/contexts/files/file_contexts.local 
    # This file is auto-generated by libsemanage
    # Do not edit directly.
    
    /srv/xueji(/.*)?    system_u:object_r:public_content_t:s0
    恢复默认值
    [root@www ~]# restorecon -Rv /srv/xueji*
    restorecon reset /srv/xueji context unconfined_u:object_r:var_t:s0->unconfined_u:object_r:public_content_t:s0
    [root@www ~]# ls -lZd /srv/xueji/
    drwxr-xr-x. root root unconfined_u:object_r:public_content_t:s0 /srv/xueji/

    SELinux策略内的规则与布尔值

    [root@www ~]# yum provides */seinfo
    已加载插件:fastestmirror, security
    Loading mirror speeds from cached hostfile
    setools-console-3.3.7-4.el6.x86_64 : Policy analysis command-line tools for SELinux
    Repo        : base
    匹配来自于:
    Filename    : /usr/bin/seinfo
    setools-console-3.3.7-4.el6.x86_64 : Policy analysis command-line tools for SELinux
    Repo        : c6-media
    匹配来自于:
    Filename    : /usr/bin/seinfo
    [root@www ~]# yum install -y setools-console

    seinfo命令用来查阅targetd策略

    [root@www ~]# seinfo [-Atrub]
    选项与参数
    -A:列出SELinux的状态、规则布尔值、身份识别、角色、类别等所有信息
    -t:列出SELinux的所有类别(type)种类
    -r:列出SELinux的所有角色(role)种类
    -u:列出SELinux的所有身份识别(user)种类
    -b:列出所有规则的种类(布尔值)

    实例 列出SELinux在此策略下统计状态

    [root@www ~]# seinfo 
    
    Statistics for policy file: /etc/selinux/targeted/policy/policy.24
    Policy Version & Type: v.24 (binary, mls)
    
       Classes:            81    Permissions:       238
       Sensitivities:       1    Categories:       1024
       Types:            3920    Attributes:        295
       Users:               9    Roles:              12
       Booleans:          237    Cond. Expr.:       277
       Allow:          323336    Neverallow:          0
       Auditallow:        141    Dontaudit:      274738
       Type_trans:      42431    Type_change:        38
       Type_member:        48    Role allow:         19
       Role_trans:        386    Range_trans:      6258
       Constraints:        90    Validatetrans:       0
       Initial SIDs:       27    Fs_use:             23
       Genfscon:           84    Portcon:           474
       Netifcon:            0    Nodecon:             0
       Permissives:        90    Polcap:              2

    实例 列出与httpd有关的规则(Booleans)

    [root@www ~]# seinfo -b | grep httpd
       httpd_manage_ipa
       httpd_run_stickshift
       httpd_use_fusefs
       httpd_use_openstack
       allow_httpd_mod_auth_pam
       ......省略......

    查询详细规则适用sesearch

    经过查询,sesearch也是由setool-console提供的
    [root@www ~]# sesearch [--all] [-s 主体类别] [-t 目标类别] [-b 布尔值]
    选项与参数
    --all:列出该类别或布尔值的所有相关信息
    -t:后接类别,如-t httpd_t
    -b:后接布尔值的规则,如-b httpd_enable_ftp_server

    实例 找出目标文件资源类别为httpd_sys_content_t的相关信息

    [root@www ~]# sesearch --all -t httpd_sys_content_t
    Found 802 semantic av rules:
       allow ntop_t httpd_sys_content_t : file { ioctl read getattr lock open } ;
       allow antivirus_domain httpd_sys_content_t : file { ioctl read getattr lock open } ;
       allow httpd_suexec_t httpd_sys_content_t : dir { getattr search open } ;
       allow ntop_t httpd_sys_content_t : dir { ioctl read getattr lock search open } ;
    .........省略........

    实例 查询布尔值httpd_enable_homedirs的规范

    [root@www ~]# sesearch -b httpd_enable_homedirs --all > out2.txt
    Found 46 semantic av rules:
       allow httpd_suexec_t home_root_t : dir { ioctl read getattr lock search open } ; 
       allow httpd_suexec_t home_root_t : lnk_file { read getattr } ;
    .......省略.......

    实例 布尔值的查询与修改

    [root@www ~]# getsebool [-a] [布尔值条款]
    选项与参数
    -a:列出目前系统上面的所有布尔值条款设置为开启或关闭值
    实例 查询当前系统内所有的布尔值设置状况
    [root@www ~]# getsebool -a
    abrt_anon_write --> off
    abrt_handle_event --> off
    allow_console_login --> on
    allow_cvs_read_shadow --> off
    allow_daemons_dump_core --> on
    allow_daemons_use_tcp_wrapper --> off
    .......省略.........
    [root@www ~]# setsebool -[P] 布尔值=[0|1]
    选项与参数
    -P:直接将设置值写入配置文件,该设置数据未来会生效的
    实例 查询httpd_enable_homedirs是否为on,若不为on,将其设为on,
    [root@www ~]# getsebool httpd_enable_homedirs
    httpd_enable_homedirs --> off
    [root@www ~]# setsebool -P httpd_enable_homedirs=1
    [root@www ~]# getsebool httpd_enable_homedirs
    httpd_enable_homedirs --> on

    SELinux日志文件记录所需的服务

    1.setroubleshoot:将错误信息写入/var/log/messages

    几乎所有SELinux相关的程序都是以se开头,setroubleshoot服务会将错误信息和解决办法记录到/var/log/messages和/var/log/setroubleshoot/*中,setroubleshoot的安装与启动如下

    [root@www ~]# yum install -y setroubleshoot
    [root@www ~]# /etc/init.d/auditd start
    正在启动 auditd:
    [root@www ~]# /etc/init.d/httpd start 
    正在启动 httpd:                                           [确定]
    [root@www ~]# netstat -tlnp | grep http
    tcp        0      0 :::80                       :::*                        LISTEN      2337/httpd 
    [root@www ~]# echo "My First SELinux Check " > index.html
    [root@www ~]# ls -l index.html 
    -rw-r--r--. 1 root root 24 9月  10 22:00 index.html
    [root@www ~]# mv index.html /var/www/html/
    [root@www ~]# links http://localhost/index.html --dump
                                       Forbidden
    
       You don't have permission to access /index.html on this server.
    
       --------------------------------------------------------------------------
    
        Apache/2.2.15 (CentOS) Server at localhost Port 80
    
    [root@www ~]# cat /var/log/messages | grep setroubleshoot
    Sep 10 21:47:05 www yum[2238]: Installed: setroubleshoot-plugins-3.0.40-4.1.el6.noarch
    Sep 10 21:47:06 www yum[2238]: Installed: setroubleshoot-server-3.0.47-14.el6.x86_64
    Sep 10 21:47:06 www yum[2238]: Installed: setroubleshoot-3.0.47-14.el6.x86_64
    Sep 10 22:01:07 www setroubleshoot: SELinux is preventing /usr/sbin/httpd from getattr access on the file /var/www/html/index.html. For complete SELinux messages. run sealert -l 62c087fe-77ee-46f1-94b3-f78bff0cbf0b
    Sep 10 22:01:07 www setroubleshoot: SELinux is preventing /usr/sbin/httpd from getattr access on the file /var/www/html/index.html. For complete SELinux messages. run sealert -l 62c087fe-77ee-46f1-94b3-f78bff0cbf0b
    根据提示,解决问题
    [root@www ~]# sealert -l 62c087fe-77ee-46f1-94b3-f78bff0cbf0b
    SELinux is preventing /usr/sbin/httpd from getattr access on the 文件 /var/www/html/index.html.
    
    *****  插件 restorecon (99.5 置信度) 建议  ******************************************
    
    If 您想要修复标签。 
    /var/www/html/index.html 默认标签应为 httpd_sys_content_t。
    Then 您可以运行 restorecon。
    Do
    # /sbin/restorecon -v /var/www/html/index.html
    
    *****  插件 catchall (1.49 置信度) 建议  ********************************************
    
    If 您确定应默认允许 httpd getattr 访问 index.html file。
    Then 您应该将这个情况作为 bug 报告。
    您可以生成本地策略模块允许这个访问。
    Do
    请执行以下命令此时允许这个访问:
    # grep httpd /var/log/audit/audit.log | audit2allow -M mypol
    # semodule -i mypol.pp
    
    
    更多信息:
    源上下文                          unconfined_u:system_r:httpd_t:s0
    目标上下文                         unconfined_u:object_r:admin_home_t:s0
    目标对象                          /var/www/html/index.html [ file ]
    源                             httpd
    源路径                           /usr/sbin/httpd
    端口                            <未知>
    主机                            www.xueji.com
    源 RPM 软件包                     httpd-2.2.15-69.el6.centos.x86_64
    目标 RPM 软件包                    file /var/www/html/index.html is not owned by any
                                  package
    策略 RPM                        selinux-policy-3.7.19-312.el6.noarch
    Selinux 已经激活                  True
    策略类型                          targeted
    强制模式                          Enforcing
    主机名                           www.xueji.com
    平台                            Linux www.xueji.com 2.6.32-754.3.5.el6.x86_64 #1
                                  SMP Tue Aug 14 20:46:41 UTC 2018 x86_64 x86_64
    警报计数                          2
    第一个                           2018年09月10日 星期一 22时01分04秒
    最后一个                          2018年09月10日 星期一 22时01分04秒
    本地 ID                         62c087fe-77ee-46f1-94b3-f78bff0cbf0b
    
    原始核查信息
    type=AVC msg=audit(1536588064.275:77): avc:  denied  { getattr } for  pid=2341 comm="httpd" path="/var/www/html/index.html" dev=sda6 ino=2478 scontext=unconfined_u:system_r:httpd_t:s0 tcontext=unconfined_u:object_r:admin_home_t:s0 tclass=file
    
    
    type=SYSCALL msg=audit(1536588064.275:77): arch=x86_64 syscall=lstat success=no exit=EACCES a0=5604518a6488 a1=7ffe904c5470 a2=7ffe904c5470 a3=1 items=0 ppid=2337 pid=2341 auid=0 uid=48 gid=48 euid=48 suid=48 fsuid=48 egid=48 sgid=48 fsgid=48 tty=(none) ses=1 comm=httpd exe=/usr/sbin/httpd subj=unconfined_u:system_r:httpd_t:s0 key=(null)
    
    Hash: httpd,httpd_t,admin_home_t,file,getattr
    
    audit2allow
    
    #============= httpd_t ==============
    allow httpd_t admin_home_t:file getattr;
    
    audit2allow -R
    
    #============= httpd_t ==============
    allow httpd_t admin_home_t:file getattr;
    [root@www ~]# restorecon -Rv '/var/www/html/index.html'
    restorecon reset /var/www/html/index.html context unconfined_u:object_r:admin_home_t:s0->unconfined_u:object_r:httpd_sys_content_t:s0
    [root@www ~]# /etc/init.d/httpd restart 
    停止 httpd:                                               [确定]
    正在启动 httpd:                                           [确定]
    [root@www ~]# links http://localhost/index.html --dump
       My First SELinux Check

    用E-mail或在命令列上直接提供setroubleshoot错误信息

    [root@www ~]# cp /etc/setroubleshoot/setroubleshoot.conf{,.bak}
    [root@www ~]# vim /etc/setroubleshoot/setroubleshoot.conf
    .....
    recipients_filepath = /var/lib/setroubleshoot/email_alert_recipients //确保此行存在
    ..........
    console = True //原值false改为True
    [root@www ~]# cp /var/lib/setroubleshoot/email_alert_recipients{,.bak}
    [root@www ~]# vim /var/lib/setroubleshoot/email_alert_recipient
    root@localhost
    xueji@163.com
    [root@www ~]# /etc/init.d/auditd restart
    停止 auditd:                                              [确定]
    正在启动 auditd:                                          [确定]

    一些特殊情况处理,如果因为一些原因,CentOS没有规范到setroubleshoot信息,可能还是无法了解到问题到底是出在哪里,此时建按如下处理:

    1)在服务于rwx权限都没有问题,却无法正常使用网络服务时,先使用setenforce 0设置为宽容模式

    2)再次使用该网络服务,如果正常,表明是SELinux出现问题,接着向下处理问题;如果仍不可用,则表明不是SELinux的问题,需要考虑其他方面。

    3)分析/var/log/messages内的信息,找到sealert -l相关的信息并执行。

    4)过滤Allow Access关键词,按照其中的动作来执行SELinux的错误解决办法

    5)处理完成后,setenfoce 1,再次测试网络服务。

  • 相关阅读:
    塔吊滑车移动
    csv合并某几列
    合并两个csv
    QFile
    python alphashape
    pip install econml
    csv增加一列
    连接redis数据库日志
    yolov5训练识别钢筋模型
    redis查看某个key的类型
  • 原文地址:https://www.cnblogs.com/zd520pyx1314/p/9610388.html
Copyright © 2020-2023  润新知