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:就是如果一个服务的配置文件被移动了位置的话,那么就要修改这个配置文件的上下文类型,否则的话,进程无法访问该服务的配置文件
就是进程(服务)服务对应配置文件,对应端口号,对应进程的上下文类型的应该保持一致,或者类型,这样进程才能访问这写文件