Selinux 安全上下文与端口控制

Selinux

Selinux 的全称是Security Enhance Linux,就是安全加强的Linux。在Selinux之前root账号能够任意的访问所有文档和服务在selinux中,访问控制属性叫做安全上下文,所有客体(文件、进程间通讯通道、套接字、网络主机等)都有与其关联的安全上下文,安全上下文分为以下4个部分:
user(身份识别):role(角色):type(类型):sensitivity(限制访问的需要)其中type(类型)最重要:指定数据类型,规则中定义何种进程类型访问何种文件,基本上,一个主进程能不能读取到这个文件资源与类型字段有关

设置安全上下文

semanage 是 SELinux的一个管理工具,可用来查询和修改目录的安全上下文,semanage命令不仅能够像传统chcon命令那样—设置文件、目录的策略,还可以管理网络端口、消息接口

经常用到的几个参数及其功能如下所示:

-l 参数用于查询
-a 参数用于添加
-m 参数用于修改
-d 参数用于删除​​​​​​
-t 安全上下文类型

下载安装semanage工具

$ yum list | grep policycoreutils-python-utils
policycoreutils-python-utils.noarch                    2.9-16.el8                                             @base 
$ yum -y install policycoreutils-python-utils

查看安全上下文
查看某个目录的安全上下文 

$ semanage fcontext -l | grep "/var/www"
/var/www(/.*)?               all files          system_u:object_r:httpd_sys_content_t:s0   # 安全上下文类型为 httpd_sys_content_t
/var/www(/.*)?/logs(/.*)?    all files          system_u:object_r:httpd_log_t:s0           # 安全上下文类型为 httpd_log_t

在该目录下创建文件,并查看其安全上下文与上面查看的目录的上下文类型一样

$ cd /var/www
$ touch test 
$ ls -lZ
-rw-r--r--. 1 root root unconfined_u:object_r:httpd_sys_content_t:s0  0 5月  23 23:06 test
$ mkdir logs
$ ls -lZ
drwxr-xr-x. 2 root root unconfined_u:object_r:httpd_sys_content_t:s0  6 5月  23 23:33 logs
$ restorecon logs/   # 恢复SELinux文件属性即恢复文件的安全上下文
$ ls -lZ
drwxr-xr-x. 2 root root unconfined_u:object_r:httpd_log_t:s0          6 5月  23 23:33 logs

创建一个新目录并为其设置安全上下文

$ mkdir wb1
$ ls -Zl |grep wb1 
drwxr-xr-x.   2 root root unconfined_u:object_r:default_t:s0    6 5月  23 23:51 wb1  # 安全上下文类型为缺省的
$ semanage fcontext -l | grep /we1  # 此时也查看不到安全上下文
$ semanage fcontext -a -t httpd_sys_content_t '/wb1(/.*)?' # 给目录添加安全上下文类型(永久生效)
$ restorecon -Rv wb1/
$ cd /wb1/
$ touch test
$ ls -lZ
-rw-r--r--. 1 root root unconfined_u:object_r:httpd_sys_content_t:s0 0 5月  23 23:59 test

示例: 修改 httpd 默认服务目录时 、需要设置新目录的安全上下文 

创建存放网页的新目录,并修改httpd配置文件

$ mkdir -p  /web4/www/html
$ echo 'httpd test' > web4/www/html/index1.html

$ vim /etc/httpd/conf/httpd.conf 

DocumentRoot "/web4/www/html"


    AllowOverride None
    # Allow open access:
    Require all granted


$ ls -Zl
drwxr-xr-x.   3 root root system_u:object_r:default_t:s0                 17 5月  24 23:08 web4

$ systemctl restart httpd

访问 http 页面时,没有显示网页内容

Selinux 安全上下文与端口控制_第1张图片

 修改目录的安全上下文类型

$ semanage fcontext -a -t httpd_sys_content_t '/web4(/.*)?'
$ restorecon -Rv web4/

成功访问到网页内容

Selinux 安全上下文与端口控制_第2张图片

 临时修改安全上下文  chcon -t 

$ chcon -t samba_share_t a
$ ls -lZ
-rw-r--r--. 1 root root unconfined_u:object_r:samba_share_t:s0        0 5月  24 00:21 a

服务端口控制

示例:将 httpd 的 端口更改为 83

修改端口后无法启动 httpd 如下

$ vim /etc/httpd/conf/httpd.conf
Listen 83
$ systemctl restart httpd
Job for httpd.service failed because the control process exited with error code.
See "systemctl status httpd.service" and "journalctl -xe" for details.

配置selinux允许开放83端口

$ semanage port -a -t http_port_t -p tcp 83
$ semanage port -l | grep http_port_t    # 查看当前放行的端口
http_port_t                    tcp      83, 82, 80, 81, 443, 488, 8008, 8009, 8443, 9000
$ systemctl restart httpd
重启成功,httpd已监听在83端口
$ netstat -ntlp
tcp6       0      0 :::83              :::*           LISTEN     81601/httpd   

selinux 开启与关闭

selinux 的三种状态:

enforcing  是强制模式系统——它受selinux保护,就是违反了策略你就无法继续操作下去。
permissive 是提示模式系统不会受到selinux保护,只是收到警告信息——permissive就是selinux有效,但是即使你违反了策略的话它让你继续操作,但是把你违反的内容记录下来(警告信息)
disabled   禁用selinux——关闭selinux

临时开启 selinux:

$ setenforce 0
$ getenforce 
Permissive
$ setenforce 1
$ getenforce 
Enforcing

$ tail /var/log/audit/audit.log 查看日志

永久开启:

$ vim /etc/selinux/config  # 下次重启前生效
SELINUX=permissive

关闭selinux 需要修改配置文件:

$ ls -l   # 开启selinux时
-rw-------. 1 root root 1328 5月   6 23:38 anaconda-ks.cfg
关闭selinux
$ vim /etc/selinux/config
SELINUX=disabled
$ getenforce 
Disabled
$ setenforce 1
setenforce: SELinux is disabled

selinux 布尔值

$ semanage boolean -l  # 查看
$ setsebool -P samba_create_home_dirs on   # 打开
$ setsebool -P samba_create_home_dirs off  # 关闭

你可能感兴趣的:(Linux,linux,网络,运维)