欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

基于Linux之selinux中安全上下文、布尔值、监控冲突的管理及服务端口的设定

程序员文章站 2022-06-10 23:41:40
...

一、SELINUX

 

 1.基本 SELINUX 安全性概念

      SELINUX ( 安全增强型 Linux ) 是可保护你系统安全性的额外机制, 在某种程度上 , 它可以被看作是与标准权限系统并行的权限系统。在常规模式中 , 以用户身份运行进程 , 并且系统上的文件和其他资源都设置了权限 ( 控制哪些用户对哪些文件具有哪些访问权 SELINUX 的另一个不同之处在于 , 若要访问文件 ,你必须具有普通访问权限和 SELINUX 访问权限。因此 , 即使以超级用户身份root 运行进程 , 根据进程以及文件或资源的 SELinux 安全性上下文可能拒绝访问文件或资源限 ) 标签。

2.selinux 安全上下文访问规则

     WEB 服务器HTTPD 进程设置了 SELINUX 上下文system_u:system_r:httpd_t 标签。该上下文的重要部分是第三个用冒号分隔的字段 SELINUX 类型 : httpd_t系统上的文件和资源也设置了 SELINUX 上下文标签 , 并且重要的部分是 SELINUX 类型。例如 , /var/www/html 中的文件具有类型 httpd_sys_content_t 。 /tmp 和 /var/tmp 中的文件通常具有类型 tmp_t。
     Seliux 策略具有允许以 httpd_t 身份运行的进程访问标记为httpd_sys_content_t 的文件的规则。没有规则允许这些进程访问标记有 tmp_t 的文件 , 因此将拒绝这些访问 , 即使常规文件权限指出应该允许这些访问SELINUX 模式。

3.显示及更改 SELINUX 模式

  getenforce

 setenforce 0|1

 0 表示 permissive      # 警告

 1 表示 enforcing        # 强制

 

4.显示 SELinux 文件上下文

    什么确定文件的初始 SELinux 上下文 ? 通常是父目录。将父目录的上下文指定给新创建的文件。这对 vimcp 和 touch等命令起作用 , 但是 , 如果文件是在其他位置创建的并且保留了权限 ( 与 mv 或 cp -a 一样 ) 则还将保留 SELinux上下文许多处理文件的命令具有一个用于显示或设置 SELinux 上下文的选项 ( 通常是 -Z ) 。例如 , ps 、 ls 、 cp 和mkdir 都使用 -Z 选项显示或设置 SELinux 上下文。

                        实验一:修改 selinux 安全上下文     

chcon -t”   ————   一次性定制安全上下文 。


实验前提
[aaa@qq.com ftp]# vim /etc/sysconfig/selinux
SELINUX=enforcing

[aaa@qq.com ~]# lftp 172.25.254.126
lftp 172.25.254.126:~> ls
-rw-r--r--    1 0        0               0 May 05 07:22 file
drwxr-xr-x    2 0        0              30 Mar 07  2014 pub
lftp 172.25.254.126:/> quit
[aaa@qq.com ~]# cd /mnt
[aaa@qq.com mnt]# touch westos3
[aaa@qq.com mnt]# cd /var/ftp
[aaa@qq.com ftp]# ls
file  pub  westos3
[aaa@qq.com ftp]# mv /mnt/westos3 /var/ftp/  ##移动是重命名的过程,不改变安全上下文。复制是新建的过程,改变安全上下文。

[aaa@qq.com ftp]# ls
file  pub  westos3
[aaa@qq.com ftp]# lftp 172.25.254.126       ##此时看不见新移动过来的文件
lftp 172.25.254.126:~> ls
-rw-r--r--    1 0        0               0 May 05 07:22 file
drwxr-xr-x    2 0        0              30 Mar 07  2014 pub
lftp 172.25.254.126:/> quit
[aaa@qq.com ftp]# ls -Z westos3            ##查看安区上下文
-rw-r--r--. root root unconfined_u:object_r:mnt_t:s0   westos3
[aaa@qq.com ftp]# ls -Z file
-rw-r--r--. root root system_u:object_r:public_content_t:s0 file   ##比对不同
[aaa@qq.com ftp]# chcon -t public_content_t westos3   ##将westos3的安区上下文修改为public_content_t。
[aaa@qq.com ftp]# ls -Z westos3
-rw-r--r--. root root unconfined_u:object_r:public_content_t:s0 westos3  ##修改成功。
[aaa@qq.com ftp]# lftp 172.25.254.126
lftp 172.25.254.126:~> ls
-rw-r--r--    1 0        0               0 May 05 07:22 file
drwxr-xr-x    2 0        0              30 Mar 07  2014 pub
-rw-r--r--    1 0        0               0 May 06 08:51 westos3   ##此时查看则可以看到。
lftp 172.25.254.126:/> quit
[aaa@qq.com ftp]# semanage fcontext -l |grep /var/ftp     ##查看看/var/ftp目录中许可的安区上下文。
/var/ftp(/.*)?                                     all files          system_u:object_r:public_content_t:s0 
/var/ftp/bin(/.*)?                                 all files          system_u:object_r:bin_t:s0 
/var/ftp/etc(/.*)?                                 all files          system_u:object_r:etc_t:s0 
/var/ftp/lib(/.*)?                                 all files          system_u:object_r:lib_t:s0 
/var/ftp/lib/ld[^/]*\.so(\.[^/]*)*                 regular file     

截图展示:

基于Linux之selinux中安全上下文、布尔值、监控冲突的管理及服务端口的设定

基于Linux之selinux中安全上下文、布尔值、监控冲突的管理及服务端口的设定

以上的修改是临时的,在selinux重启后配置会还原!!!!

[aaa@qq.com ~]# mkdir /westos               #新建一个目录。用来将此目录指定为用户默认家目录。

[aaa@qq.com ~]# touch /westos/westosfile

[aaa@qq.com ~]# vim /etc/vsftpd/vsftpd.conf    #添加家目录

 anon_root=/westos       #添加内容

 
[aaa@qq.com ~]# systemctl restart vsftpd.service   #重启服务

[aaa@qq.com ~]# ls -Z /var/ftp

-rw-r--r--. root root system_u:object_r:public_content_t:s0 file

-rw-r--r--. root root unconfined_u:object_r:mnt_t:s0   file2

drwxr-xr-x. root root system_u:object_r:public_content_t:s0 pub

drwxrwxrwt. root root system_u:object_r:mnt_t:s0       westos

-rw-r--r--. root root unconfined_u:object_r:public_content_t:s0 westos3

[aaa@qq.com ~]# chcon -t public_content_t /westos -R     #将家目录安全上下文修改为public_content_t,-R表示目录本身及目录内所有。

[aaa@qq.com ~]# lftp 172.25.254.126

lftp 172.25.254.126:~> ls

-rw-r--r--    1 0        0               0 May 12 02:02 westosfile    #此时可以查看

lftp 172.25.254.126:/> quit

[aaa@qq.com ~]# touch /.autorelabel         #新建一个文件,此文件在重起后会自动重启selinux服务。

[aaa@qq.com ~]# reboot                    #重启

Connection to 172.25.254.126 closed by remote host.

Connection to 172.25.254.126 closed.

[aaa@qq.com ~]$ ssh aaa@qq.com  #重新连接

aaa@qq.com's password:

Last login: Fri May 11 21:19:24 2018 from 172.25.254.26

[aaa@qq.com ~]# lftp 172.25.254.126       

lftp 172.25.254.126:~> ls

lftp 172.25.254.126:/> quit                          

#此时无法看到文件,证明了chcon的修改是临时的                                                                                              [aaa@qq.com ~]# ls -Z /westos
-rw-r--r--. root root unconfined_u:object_r:default_t:s0 westosfile   #安全上下文回到之前默认值
[aaa@qq.com ~]# semanage fcontext -l | grep /westos
[aaa@qq.com ~]#             #默认selinux重启后westos目录没有安全上下文

基于Linux之selinux中安全上下文、布尔值、监控冲突的管理及服务端口的设定

基于Linux之selinux中安全上下文、布尔值、监控冲突的管理及服务端口的设定

基于Linux之selinux中安全上下文、布尔值、监控冲突的管理及服务端口的设定

#此时无法看到文件,证明了chcon的修改是临时的

               实验二:semanage 命令    ————   永久性定制安全上下文 

[aaa@qq.com ~]# semanage fcontext -a -t public_content_t '/westos(/.*)?' 
#永久修改wetos目录的安区上下文,-a,新建、-t,指定类型、'/westos(/.*)?‘,目录本身及其内所有内容和隐藏文件。/westos(/.*)?=/westos/*
[aaa@qq.com ~]# restorecon -FvvR /westos/   #刷新配置
restorecon reset /westos context unconfined_u:object_r:default_t:s0->system_u:object_r:public_content_t:s0
restorecon reset /westos/westosfile context unconfined_u:object_r:default_t:s0->system_u:object_r:public_content_t:s0
[aaa@qq.com ~]# lftp 172.25.254.126
lftp 172.25.254.126:~> ls
-rw-r--r--    1 0        0               0 May 12 02:02 westosfile   #此时可以查看
lftp 172.25.254.126:/> quit
[aaa@qq.com ~]# reboot   #重启,.autorelabel文件和会默认在重启时重启selinux服务。
Connection to 172.25.254.126 closed by remote host.
Connection to 172.25.254.126 closed.
[aaa@qq.com ~]$ rht-vmctl view desktop 
[aaa@qq.com ~]$ ssh aaa@qq.com
aaa@qq.com's password: 
Last login: Fri May 11 22:10:13 2018 from 172.25.254.26
[aaa@qq.com ~]# lftp 172.25.254.126
lftp 172.25.254.126:~> ls
-rw-r--r--    1 0        0               0 May 12 02:02 westosfile
lftp 172.25.254.126:/> quit           #此时可以查看,则永久修改成功。

基于Linux之selinux中安全上下文、布尔值、监控冲突的管理及服务端口的设定


                             实验三:管理 SELinux 布尔值

        SELinux 布尔值是更改 SELinux 策略行为的开关。 SELinux 布尔值是可以启用或禁用的规则。安全管理员可以使 SELinux 布尔值来调整策略 , 以有选择地进行调整许多软件包都具有 man page *_selinux(8), 其中详细说明了所使用的一些布尔值 ; man -k ‘_selinux’ 可以轻松地找到这些手册getsebool 用于显示布尔值 , setsebool 用于修改布尔值setsebool -P 修改 SELinux 策略 , 以永久保留修改。

semanage boolean -l 将显示布尔值是否永久。

[aaa@qq.com ~]# ll -d /home/student     
drwxrwxr-x. 6 student student 1024 May 11 23:49 /home/student
#查看student用户的目录权限,此时是可写的,因此可以利用lftp上传文件。
[aaa@qq.com ~]# lftp 172.25.254.126 -u student
Password: 
lftp aaa@qq.com:~> ls
lftp aaa@qq.com:~> put /etc/passwd
put: Access failed: 553 Could not create file. (passwd)
lftp aaa@qq.com:~> quit     ##无法上传
[aaa@qq.com ~]# setenforce 0        ##修改为警告模式
[aaa@qq.com ~]# lftp 172.25.254.126 -u student
Password: 
lftp aaa@qq.com:~> ls      
lftp aaa@qq.com:~> put /etc/passwd
2186 bytes transferred                         
lftp aaa@qq.com:~> quit   ##上传成功,则说明是selinux服务阻止了上传。
[aaa@qq.com ~]# setenforce 1       ##修改为强制模式

[aaa@qq.com ~]# getsebool -a |grep ftp  ##查看selinux的开启和禁用规则
ftp_home_dir --> off           ##关闭
ftpd_anon_write --> off
ftpd_connect_all_unreserved --> off
ftpd_connect_db --> off
ftpd_full_access --> off
ftpd_use_cifs --> off
ftpd_use_fusefs --> off
ftpd_use_nfs --> off
ftpd_use_passive_mode --> off
httpd_can_connect_ftp --> off
httpd_enable_ftp_server --> off
sftpd_anon_write --> off
sftpd_enable_homedirs --> off
sftpd_full_access --> off
sftpd_write_ssh_home --> off
tftp_anon_write --> off
tftp_home_dir --> off
[aaa@qq.com ~]# setsebool -P ftp_home_dir on    #打开
[aaa@qq.com ~]# getsebool -a |grep ftp
ftp_home_dir --> on
ftpd_anon_write --> off
ftpd_connect_all_unreserved --> off
ftpd_connect_db --> off
ftpd_full_access --> off
ftpd_use_cifs --> off
ftpd_use_fusefs --> off
ftpd_use_nfs --> off
ftpd_use_passive_mode --> off
httpd_can_connect_ftp --> off
httpd_enable_ftp_server --> off
sftpd_anon_write --> off
sftpd_enable_homedirs --> off
sftpd_full_access --> off
sftpd_write_ssh_home --> off
tftp_anon_write --> off
tftp_home_dir --> off
[aaa@qq.com ~]# lftp 172.25.254.126 -u student
Password: 
lftp aaa@qq.com:~> put /etc/group
905 bytes transferred             ##此时即可上传成功。

基于Linux之selinux中安全上下文、布尔值、监控冲突的管理及服务端口的设定

基于Linux之selinux中安全上下文、布尔值、监控冲突的管理及服务端口的设定

基于Linux之selinux中安全上下文、布尔值、监控冲突的管理及服务端口的设定

基于Linux之selinux中安全上下文、布尔值、监控冲突的管理及服务端口的设定

                   

                        实验四:监控 SELinux 冲突    

     必须安装 setroubleshoot-server 软件包 , 才能将 SELinux消息发送至 /var/log/messages , setroubleshoot-server 侦听 /var/log/audit/audit.log 中的审核信息并将简短摘要发送至 /var/log/messages,摘要包括 SELinux 冲突的唯一标识符 ( UUIDs ), 可用于收集更多信息。 Sealert -l UUID 用于生成特定事件的报告。 Sealert -a /var/log/audit/audit.log 用于在该文件中生成所有事件的报告。

[aaa@qq.com ~]# rpm -qa |grep setrouble    #查看是否有setrouble软件setroubleshoot-server-3.2.17-2.el7.x86_64
setroubleshoot-3.2.17-2.el7.x86_64
setroubleshoot-plugins-3.0.59-1.el7.noarch
[aaa@qq.com~]#yum remove setroubleshoot-server-3.2.17-2.el7.x86_64
Loaded plugins: langpacks                       #卸载setrouble软件
Resolving Dependencies
--> Running transaction check
[aaa@qq.com ~]# > /var/log/messages         #清空日志
[aaa@qq.com ~]# > /var/log/audit/audit.log  #清空系统审核信息日志
[aaa@qq.com ~]# touch /mnt/file
[aaa@qq.com ~]# mv /mnt/file /var/ftp/                                                                                              使用浏览器访问ftp服务
[aaa@qq.com ~]# cat /var/log/audit/audit.log   #查看系统审核信息日志
type=AVC msg=audit(1526104058.698:272): avc:  denied  { getattr } for  pid=3145 comm="vsftpd" path="/yifan" dev="vda1" ino=33572719 scontext=system_u:system_r:ftpd_t:s0-s0:c0.c1023 tcontext=unconfined_u:object_r:mnt_t:s0 tclass=file
type=SYSCALL msg=audit(1526104058.698:272): arch=c000003e syscall=6 success=no exit=-13 a0=7fa1ac280620 a1=7fa1ac2887a0 a2=7fa1ac2887a0 a3=2020202020203020 items=0 ppid=3143 pid=3145 auid=4294967295 uid=14 gid=50 euid=14 suid=14 fsuid=14 egid=50 sgid=50 fsgid=50 tty=(none) ses=4294967295 comm="vsftpd" exe="/usr/sbin/vsftpd" subj=system_u:system_r:ftpd_t:s0-s0:c0.c1023 key=(null)                           [aaa@qq.com ~]# cat /var/log/messages          #查看日志,无报错
[aaa@qq.com ~]# yum install setroubleshoot-server-3.2.17-2.el7.x86_64 -y   #重新安装etroubleshoot-server-3.2.17-2.el7.x86_64软件。   浏览器访问ftp服务。
[aaa@qq.com ~]# cat /var/log/messages   #查看日志
May 12 01:50:01 localhost systemd: Starting Session 19 of user root.
May 12 01:50:01 localhost systemd: Started Session 19 of user root.
May 12 01:50:27 localhost dbus-daemon: dbus[545]: [system] Reloaded configuration
May 12 01:50:27 localhost dbus[545]: [system] Reloaded configuration
May 12 01:50:27 localhost dbus-daemon: dbus[545]: [system] Reloaded configuration
May 12 01:50:27 localhost dbus[545]: [system] Reloaded configuration
May 12 01:50:28 localhost systemd: Reloading.
May 12 01:50:28 localhost systemd: [/usr/lib/systemd/system/rtkit-daemon.service:
restorecon -v '$FIX_TARGET_PATH'  #报错提醒建议
[aaa@qq.com ~]# restorecon -v /var/ftp/*  #修复
restorecon reset /var/ftp/yifan context unconfined_u:object_r:mnt_t:s0->unconfined_u:object_r:public_content_t:s0

基于Linux之selinux中安全上下文、布尔值、监控冲突的管理及服务端口的设定

基于Linux之selinux中安全上下文、布尔值、监控冲突的管理及服务端口的设定

基于Linux之selinux中安全上下文、布尔值、监控冲突的管理及服务端口的设定

基于Linux之selinux中安全上下文、布尔值、监控冲突的管理及服务端口的设定

基于Linux之selinux中安全上下文、布尔值、监控冲突的管理及服务端口的设定

基于Linux之selinux中安全上下文、布尔值、监控冲突的管理及服务端口的设定

基于Linux之selinux中安全上下文、布尔值、监控冲突的管理及服务端口的设定

基于Linux之selinux中安全上下文、布尔值、监控冲突的管理及服务端口的设定

基于Linux之selinux中安全上下文、布尔值、监控冲突的管理及服务端口的设定


二、 服务默认端口的添加

以httpd服务为例

[aaa@qq.com ~]# systemctl start httpd       ##打开httpd服务

[aaa@qq.com ~]# vim /etc/httpd/conf/httpd.conf     ##http的配置文件

>---编辑内容 ---<

 41 #Listen 12.34.56.78:80

 42 Listen 80      ---->改为---->        42 Listen 6666   #修改端口值

 43 #

 
[aaa@qq.com ~]# systemctl restart httpd

Job for httpd.service failed. See 'systemctl status httpd.service' and 'journalctl -xn' for details.              ##重启失败

[aaa@qq.com ~]# semanage port -l | grep http   #列出http服务允许端口

http_cache_port_t              tcp      8080, 8118, 8123, 10001-10010

http_cache_port_t              udp      3130

http_port_t                    tcp      80, 81, 443, 488, 8008, 8009, 8443, 9000

pegasus_http_port_t            tcp      5988

pegasus_https_port_t           tcp      5989

 

##”semanage port -l | grep http”与“ cat /etc/services | grep http”命令作用相同,“/etc/services”为系统中存放端口的文件。##

 

[aaa@qq.com ~]# semanage port -a -t http_port_t -p tcp 6666

 libsemanage.semanage_reload_policy: load_policy returned error code -1. (Interrupted system call).  ##添加6666为其允许端口

[aaa@qq.com ~]# semanage port -l | grep http

http_cache_port_t              tcp      8080, 8118, 8123, 10001-10010

http_cache_port_t              udp      3130

http_port_t                    tcp      6666, 80, 81, 443, 488, 8008, 8009, 8443, 9000

pegasus_http_port_t            tcp      5988

pegasus_https_port_t           tcp      5989    ##添加成功

[aaa@qq.com ~]# systemctl restart httpd   ##重启服务,成功

 

基于Linux之selinux中安全上下文、布尔值、监控冲突的管理及服务端口的设定

基于Linux之selinux中安全上下文、布尔值、监控冲突的管理及服务端口的设定

基于Linux之selinux中安全上下文、布尔值、监控冲突的管理及服务端口的设定

基于Linux之selinux中安全上下文、布尔值、监控冲突的管理及服务端口的设定


上一篇: 学数学的

下一篇: 出家去当和尚吧