selinux的上下文

一:了解selinux的信息

selinux和防火墙和文件和目录的权限三种限制

要开启一个服务,这三个东西都要调试一下,才能正确的使用这个服务

selinux的介绍:

他是一个安全访问策略,用来确定进程可以访问哪些文件,服务对应的文件或者目录, 服务对应的端口,服务对应的进程 这三种

列子:

服务的实列(就是进程),所以也受selinux的保护,可以看成是文件和目录并行的权限系统:
如果selinux开启,以root身份运行进程,访问文件不光要受用户对文件访问的权限限定,还要受进程对文件selinux上下文的限定,否则,就算是root用户运行的进程,也不一定能访问某个文件

二:selinux的三种模式

1)三种模式

enforcing:强制模式--拒绝非法访问并录入日志

permissive:警告模式---暂时允许访问并录入日志

disabled:禁用模式---允许访问--不录入日志

2)修改三种模式

[root@controller samba-share]# setenforce 0
[root@controller samba-share]# getenforce 
Permissive
[root@controller samba-share]# 

这种只是临时修改,重启后,会回复原样

#永久的修改,修改配置文件
SELINUX=disabled

 reboot重启selinux

selinux的状态发生改变才叫重启,否则不叫重启

 

三:seliniux的上下文

就是在linux系统里面,每个文件,进程,端口号都有安全标签,这个标签就是selinux安全策略

某个进程是否能访问文件,目录或者端口的工具

1:上下文的内容

使用ll -Z 就可以查看上下文的类型

[root@controller ~]#  ll -Z
total 23088
-rw-------. 1 root root system_u:object_r:admin_home_t:s0         1636 Nov 13 04:29 anaconda-ks.cfg
-rw-r--r--. 1 root root unconfined_u:object_r:admin_home_t:s0 23633920 Nov 13 04:48 ansible2.9.iso
drwxr-xr-x. 2 root root unconfined_u:object_r:admin_home_t:s0        6 Nov 13 04:31 Desktopd 

第一个字段:用户

系统用户(system_u),未指定用户(unconfined_u)

第二个字段:角色

系统角色(system_u),未指定角色(unconfined_u),对象角色(object_u)

第三个字段:类型(最重要的)

以t结尾,三种类型的,进程的类型,端口的类型,文件的类型

都是一一对应的,否则,进程不能加载文件 

第四个字段:敏感度

0,1,2数值越大,敏感的程度就越高,有的进程就无法访问

 

2:上下文的操作

1:文件的上下文的操作

1)查看文件的上下文的2种方法

ll -Z

[root@controller ~]# ll -Z
total 23088
-rw-------. 1 root root system_u:object_r:admin_home_t:s0         1636 Nov 13 04:29 anaconda-ks.cfg
-rw-r--r--. 1 root root unconfined_u:object_r:admin_home_t:s0 23633920 Nov 13 04:48 ansible2.9.iso
drwxr-xr-x. 2 root root unconfined_u:object_r:admin_home_t:s0        6 Nov 13 04:31 Desktops 

semanage fcontext -l |grep 刷选条件

[root@controller ~]# semanage fcontext -l |grep vsftpd
/etc/rc\.d/init\.d/vsftpd                          regular file       system_u:object_r:ftpd_initrc_exec_t:s0 
/usr/lib/systemd/system/vsftpd.*                   regular file       system_u:object_r:iptables_unit_file_t:s0 

2)修改文件的上下文操作

临时修改

chcon -t  文件的类型 文件

[root@controller ~]# ll -Z | grep 11
-rw-r--r--. 1 root root unconfined_u:object_r:admin_home_t:s0        0 Nov 16 06:32 11
[root@controller ~]# chcon -t admin_home_t 11
[root@controller ~]# ll -Z |grep 11
-rw-r--r--. 1 root root unconfined_u:object_r:admin_home_t:s0        0 Nov 16 06:32 11
[root@controller ~]#  

就是selinux的状态发生改变的话,就会恢复原样

永久修改

格式:

semanage fcontext -a  -t  类型 ‘路径(/.*)?’ 这个路径必须是绝对路径

[root@controller mnt]# semanage  fcontext -a -t admin_home_t "/mnt/11(/.*)?"
[root@controller mnt]# 

#刷新一下
[root@controller mnt]# restorecon -RFv /mnt/11
Relabeled /mnt/11 from unconfined_u:object_r:mnt_t:s0 to system_u:object_r:admin_home_t:s0

这样就改变了

 

就是先要-a 可以修改,使用了这个之后,就能使用-m这个选项(修改)

首次更改文件的上下文,需要使用-a的选项,再次更改时,不需要这个-a的选项了,使用-m的选项来更改

 

2:端口的上下文的操作

使用查看帮助的命令

[root@controller mnt]# semanage port --help  

1)查看端口的上下文

semanage port -l 

[root@controller mnt]# semanage port -l | grep 21
ftp_port_t                     tcp      21, 989, 990
gatekeeper_port_t              tcp      1721, 7000
giftd_port_t                   tcp      1213
hplip_port_t                   tcp      1782, 2207, 2208, 8290, 8292, 9100, 9101, 9102, 9220, 9221, 9222, 9280, 9281, 9282, 9290, 9291, 50000, 50002
memcache_port_t                tcp      11211
memcache_port_t                udp      11211

 

2:修改端口的上下文类型

1)添加一个端口号,使其具有ftp的21号端口的能力

[root@controller mnt]# semanage port -a -t ftp_port_t -p tcp 22022
[root@controller mnt]# semanage port -l | grep 22022
ftp_port_t                     tcp      22022, 21, 989, 990
[root@controller mnt]# 

  

2:修改这个端口和删除这个端口号

#修改
[root@controller mnt]# semanage port  -m -t tftp_port_t -p tcp 22022
[root@controller mnt]# semanage port -l | grep 22022
tftp_port_t                    tcp      22022
[root@controller mnt]# 
#删除
[root@controller mnt]# semanage port -d -t tftp_port_t -p tcp 22022
[root@controller mnt]# semanage port -l |grep 22022
[root@controller mnt]# 

  

3:进程的上下文类型不能被修改,应为进程是瞬息的

 

 

四:selinux的布尔值的使用

1:查看selinux的布尔值

[root@controller mnt]# getsebool -a |grep ftp
ftpd_anon_write --> off
ftpd_connect_all_unreserved --> off
ftpd_connect_db --> off
ftpd_full_access --> off
ftpd_use_cifs --> off 

第二种查看的方法

[root@controller mnt]# semanage boolean -l |grep ftp
ftpd_anon_write                (off  ,  off)  Allow ftpd to anon write
ftpd_connect_all_unreserved    (off  ,  off)  Allow ftpd to connect all unreserved

 

使用semanage boolean -l |grep 筛选条件

左边是临时修改的,右边是永久生效的

2:修改布尔值

临时修改

[root@controller mnt]# setsebool ftpd_use_nfs on 
[root@controller mnt]# getsebool -a |grep ftpd_use_nfs
ftpd_use_nfs --> on
[root@controller mnt]# 

 

当下次开机的话,就是回复的原样

  

五:总结

就是3点

1:就是在一个目录下创建了一个文件的话,那么这个文件会自动的继承这个目录的selinux的上下文类型

2:就是关于cp和mv的情况,如果是cp的话,文件的上下文类型会继承上一个目录的文件的上下文类型,但是是mv的话,不会继承,不会改变

3:就是如果一个服务的配置文件被移动了位置的话,那么就要修改这个配置文件的上下文类型,否则的话,进程无法访问该服务的配置文件

 

就是进程(服务)服务对应配置文件,对应端口号,对应进程的上下文类型的应该保持一致,或者类型,这样进程才能访问这写文件

 

 

 

 

  

 

  

 

 

  

 

  

 

 

 

 

 

 

 

 

 

posted @ 2023-11-15 22:54  q_7  阅读(117)  评论(0编辑  收藏  举报