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-1023、30000-60000等的使用方式 Hosts地址与范围: 192.168.1.100:直接写入HOST IP而已,仅检查一台 192.168.1.0/24:为C Class的形态 192.168.*.*:扫描B类地址 192.168.1.0-50,60-100,103,200:这种变形是的主机范围
使用默认参数扫描本机所启用的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,再次测试网络服务。