SELinux安全子系统 SELinux安全子系统SELinux到底是什么MAC安全模型DAC安全模型RBAC安全模型查看状态,启动和关闭SELinux服务查看SELinux的当前状态查看SELinux当前运行模式SELinux的三种运行模式临时切换SELinux运行模式永久修改SELinux模式sed修改SELinux配置SELinux访问日志SELinux域SELinux安全上下文查看安全上下文安装semanagesemanage查看永久安全上下文查看进程的SELinux安全上下文的值查看目录对应的SELinux安全上下文的值查看文件的安全上下文重新给系统打selinux标签semanage永久配置SELinux的条目永久修改某个目录的安全上下文永久修改目录安全上下文示例2刷新(重新恢复)文件/目录的安全上下文刷新(重新恢复)logs目录的安全上下文chcon修改文件/目录的安全上下文示例:chcon -t 修改文件的安全上下文修改httpd的安全上下文fixfiles修复安全上下文SELinux安全端口查看安全端口修改安全端口SeLinux的布尔值查看所有的SELinux布尔值getsebool查看SELinux规则(Centos7)setsebool修改Selinux的布尔值SElinux对于文件的约束常见问题SELinux到底是什么系统版本声明: RHEL8参考 https://www.linuxprobe.com/basic-learning-10.html#102“SELinux域”和“SELinux安全上下文”称为是Linux系统中的双保险例如用root用户启动一个httpd进程,那这个httpd进程就拥有root的权限,可以做一切root可以做的事情.假定黑客控制了这个httpd进程,他就拿到了服务器的root权限.SELinux会给进程打上标记,标记这个进程只能访问哪些数据,即使是root用户运行的进程,也只能在SELinux标记的范围运行.MAC安全模型MAC就是SELinux方式DAC安全模型DAC常见的就是ACL权限控制RBAC安全模型RBAC通常适用于域控环境下,比如将对应的用户添加到对应权限的组k8s用的就是RBAC。查看状态,启动和关闭SELinux服务查看SELinux的当前状态# 查看SELinux的当前状态sestatus查看SELinux当前运行模式# 查看SELinux当前运行模式[rocky root ~]# getenforceEnforcing# 开启SELinux的三种运行模式SELinux模式解释enforcing强制启用安全策略模式将拦截服务的不合法请求。permissive遇到服务越权访问时只发出警告而不强制拦截。disabled对于越权的行为不警告也不拦截。临时切换SELinux运行模式0为只警告1为强制模式# 将SELinux临时切换为只警告模式setenforce0# 临时关闭SELinux后查看SELinux状态[rocky root ~]# getenforcePermissive# 只警告# 将SELinux临时切换为强制模式setenforce1# 查看开启后的SELinux状态[rocky root ~]# getenforceEnforcing# 强制模式永久修改SELinux模式修改/etc/selinux/config配置不会立即生效,会在重启后生效,如果想要立即生效,还需要执行setenforce设置永久关闭SELinux,必须重启后才真实生效从disabled改为其他模式,也是需要重启后才能生效,setenforce 1没有作用将 SELINUXenforcing 改为 SELINUXdisabled# 临时关闭SELinuxsetenforce0修改SELinux的配置为disabledvi /etc/selinux/config## 设置永久强制模式SELINUXenforcing## 强制永久只警告模式SELINUXpermissivesed修改SELinux配置# sed替换配置sed-ris#(SELINUX).*#\1disabled#/etc/selinux/config# 方法2:修改SELinux的状态为disabled## sed s/原字符串/替换字符串/ filenamesed-is/^SELINUX.*/SELINUXdisabled//etc/selinux/configSELinux访问日志SELinux的所有访问日志都在/var/log/audit/audit.log文件中记录.# 查看SELinux访问日志tail-f/var/log/audit/audit.logSELinux域限制服务的行为(功能)SELinux安全上下文安全上下文就是SELinux对进程和文件上打的标记限制服务只能访问指定目录的指定文件# 查看目录下的 SELinux 安全上下文ls-Z查看安全上下文安装semanage# yum安装semanage命令行yuminstall-ypolicycoreutils-python-utilssemanage查看永久安全上下文# 使用semanage查看所有的安全上下文semanage fcontext -l|less# 查看root相关的安全上下文semanage fcontext -l|greproot查看进程的SELinux安全上下文的值## a显示所有进程包括其他用户的进程。## u以用户为基础显示进程信息包括进程的所有者、CPU 使用率、内存占用等。## x显示没有控制终端的进程。## Z按安全上下文标记进行分组显示进程信息。[rocky root ~]# ps auxZ|grep httpdsystem_u:system_r:httpd_t:s0 root17620.00.528290011724? Ss21:070:00 /usr/sbin/httpd-DFOREGROUNDsystem_u:system_r:httpd_t:s0 apache18060.00.42967808412? S21:070:00 /usr/sbin/httpd-DFOREGROUNDsystem_u:system_r:httpd_t:s0 apache18070.00.7148570014164? Sl21:070:00 /usr/sbin/httpd-DFOREGROUNDsystem_u:system_r:httpd_t:s0 apache18080.00.6135457212116? Sl21:070:00 /usr/sbin/httpd-DFOREGROUNDsystem_u:system_r:httpd_t:s0 apache18090.00.6135457212116? Sl21:070:00 /usr/sbin/httpd-DFOREGROUNDunconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 root20670.00.02219281148pts/0 R21:080:00grep--colorauto httpd查看目录对应的SELinux安全上下文的值# 查看/var/www/html目录对应的SELinux安全上下文的值## l使用详细列表格式显示目录信息。## d仅显示目录本身的信息而不是目录下的文件和子目录信息。## z显示安全上下文标记用于控制目录的访问权限。ls-ldz/var/www/html查看文件的安全上下文cd/var/www/html# 创建临时文件touchqwe# 查看SELinux上下文[rocky root /var/www/html]# ls -Z qweunconfined_u:object_r:httpd_sys_content_t:s0 qwe# 回到root的家目录cd~touchqwe# 查看/root目录下的qew文件的安全上下文[rocky root ~]# ls -Z qweunconfined_u:object_r:admin_home_t:s0 qwe# 在普通用户的家目录创建文件cd/home/omaidbtouchqew# 查看omaidb的家目录下的文件安全上下文[rocky root /home/omaidb]# ls -Z qweunconfined_u:object_r:user_home_t:s0 qwe重新给系统打selinux标签# 重新SELinux重新打安全标记touch/.autorelabelsemanage永久配置SELinux的条目semanage可以针对用户,端口,模块,接口,登录等进行配置。# 管理 SELinux 用户和角色semanage login# 管理 SELinux 端口策略semanage port# 管理文件上下文策略semanage fcontext# 管理 SELinux 布尔值semanage boolean# 查看semanage支持的参数[rocky root /web]# semanagebooleanexportimportloginnodeport dontaudit fcontext interface module permissive user永久修改某个目录的安全上下文# 永久修改目录的安全上下文的值## -a 是添加新的文件上下文## -t 是要修改安全上下文的值为 httpd_sys_content_t## httpd_sys_content_t Apache 可读的文件类型## /home/www/html 要修改哪个目录## SELinux 中不可以加目录后的/semanage fcontext-a-thttpd_sys_content_t /home/www/html# 永久修改目录下所有文件的安全上下文semanage fcontext-a-thttpd_sys_content_t /home/www/html/*# 使规则生效## -R 立即递归生效目录的SELinux规则restorecon-RvF/home/www/html# 这时候再打开http://ip 就可以正常访问了永久修改目录安全上下文示例2创建自定义目录# 在/目录下创建web目录并配置安全上下文cd/mkdirweb# 查看/web的安全上下文## l使用详细列表格式显示文件信息。## d仅显示目录本身的信息而不是目录下的文件和子目录信息。## Z显示安全上下文标记用于控制文件的访问权限。## 安全上下文default_t表示缺省的安全上下文[rocky root /]# ls -ldZ webdrwxr-xr-x.2root root unconfined_u:object_r:default_t:s0610月2822:15 web# 查看SELinux内置规则中是否有匹配/web目录的规则## -l列出当前系统中所有的文件上下文规则[rocky root /]# semanage fcontext -l|grep ^/web## 结果为空永久设置/web目录的安全上下文为httpd_sys_content_t# 设置/web目录及目录下的文件的安全上下文为httpd_sys_content_t## -a 是添加新的文件上下文## -t 是要修改安全上下文的值为 httpd_sys_content_t[rocky root /]# semanage fcontext -a -t httpd_sys_content_t /web(/.*)?# 查看SELinux内置规则中已经有匹配/web目录的规则## -l列出当前系统中所有的文件上下文规则[rocky root /]# semanage fcontext -l|grep ^/web/web(/.*)? all files system_u:object_r:httpd_sys_content_t:s0# 查看web目录的安全上下文并没有生效## l使用详细列表格式显示文件信息。## d仅显示目录本身的信息而不是目录下的文件和子目录信息。## Z显示安全上下文标记用于控制文件的访问权限。[rocky root /]# ls -ldZ web/drwxr-xr-x.2root root unconfined_u:object_r:default_t:s0610月2822:15 web/# 刷新(重新恢复)web目录的安全上下文restorecon-Rv/web# 查看web目录的安全上下文已经生效## l使用详细列表格式显示文件信息。## Z显示安全上下文标记用于控制文件的访问权限。[rocky root /web]# ls -lZ /web总用量0-rw-r--r--.1root root unconfined_u:object_r:httpd_sys_content_t:s0010月2822:27 qwe# 在web目录下创建test1和test2文件touch/web/test1 /web/test2# 查看test1的默认安全上下文已经是httpd_sys_content_t## l使用详细列表格式显示文件信息。## Z显示安全上下文标记用于控制文件的访问权限。[rocky root /web]# ls -lZ /web总用量0-rw-r--r--.1root root unconfined_u:object_r:httpd_sys_content_t:s0010月2822:27 qwe -rw-r--r--.1root root unconfined_u:object_r:httpd_sys_content_t:s0010月2822:31 test1修改test2的安全上下文为samba_share_t,然后重启查看test2的上下文# 修改test2的安全上下文为samba_share_t## chcon修改文件或目录的 SELinux 安全上下文标记。## -t 指定新的 SELinux 安全上下文标记为 samba_share_t[rocky root /web]# chcon -t samba_share_t test2# 查看test2的安全上下文## l使用详细列表格式显示文件信息。## Z显示安全上下文标记用于控制文件的访问权限。[rocky root /web]# ls -lZ test2-rw-r--r--.1root root unconfined_u:object_r:samba_share_t:s0010月2822:39 test2# 重新SELinux重新打安全标记touch/.autorelabel# 重启,本次重新会比以往时间慢很多reboot# 重启后再查看test2的安全上下文[rocky root /web]# ls -lZ test2-rw-r--r--.1root root unconfined_u:object_r:httpd_sys_content_t:s0010月2822:31 test2刷新(重新恢复)文件/目录的安全上下文在/var/www/下创建logs目录# 创建logs目录cd/var/www/mkdirlogs# 查看logs的安全上下文[rocky root /var/www]# ls -ldZ logsdrwxr-xr-x.2root root unconfined_u:object_r:httpd_sys_content_t:s0610月2822:08 logs新建的logs的安全上下文与SELinux预制的安全上下文不符,这时候需要刷新(重新恢复)安全上下文刷新(重新恢复)logs目录的安全上下文# 刷新(重新恢复)logs目录的安全上下文[rocky root /var/www]# restorecon logs/# 然后再查看logs目录的安全上下文[rocky root /var/www]# ls -ldZ logsdrwxr-xr-x.2root root unconfined_u:object_r:httpd_log_t:s0610月2822:08 logschcon修改文件/目录的安全上下文修改安全上下文示例: chcon -t 安全上下文标签 文件# 修改test2的安全上下文为samba_share_t[rocky root /web]# chcon -t samba_share_t test2# 查看test2的安全上下文[rocky root /web]# ls -lZ test2-rw-r--r--.1root root unconfined_u:object_r:samba_share_t:s0010月2822:39 test2示例:chcon -t 修改文件的安全上下文# 安装httpdyuminstallhttpd-y# 添加内容到index.htmlechoSELinux test/var/www/html/index.html# 关闭欢迎页cd/etc/httpd/conf.dmvwelcome.conf welcome.conf.bak# 访问网页测试[rocky root /var/www/html]# curl localhostSELinuxtest修改httpd的安全上下文# 查看 index.html的默认安全上下文[rocky root /var/www/html]# ls -lZ总用量4-rw-r--r--.1root root unconfined_u:object_r:httpd_sys_content_t:s01310月2821:13 index.html# 修改index.html安全上下文为samba_share_t[rocky root /var/www/html]# ls -lZ总用量4-rw-r--r--.1root root unconfined_u:object_r:samba_share_t:s01310月2821:13 index.html# 修改index.html的安全上下文后无法访问到index.html[rocky root /etc/httpd/conf.d]# curl localhost!DOCTYPE HTML PUBLIC-//IETF//DTD HTML 2.0//ENhtmlheadtitle403Forbidden/title/headbodyh1Forbidden/h1pYou dont have permission to access this resource./p/body/html# 将index.html的安全上下文修改回默认[rocky root /var/www/html]# chcon -t httpd_sys_content_t index.html# 再访问web[rocky root /var/www/html]# curl localhostSELinuxtestfixfiles修复安全上下文https://www.linuxcool.com/fixfiles在重启时重新标记文件系统# 在重启时重新标记文件系统## -F 强制重置上下文为匹配file_context的自定义文件fixfiles-FonbootSELinux安全端口查看安全端口# 查看所有安全端口## -l 查看安全上下文semanage port -l|less# 查看指定服务的安全端口[rocky root /web]# semanage port -l|grep httphttp_cache_port_t tcp8080,8118,8123,10001-10010 http_cache_port_t udp3130http_port_t tcp80,81,443,488,8008,8009,8443,9000pegasus_http_port_t tcp5988pegasus_https_port_t tcp5989修改安全端口# 先修改httpd的监听端口为12345vim/etc/httpd/conf/httpd.conf# 重启httpd服务会失败[rocky root /web]# systemctl restart httpdJobforhttpd.service failed because the control process exited with error code. Seesystemctl status httpd.serviceandjournalctl -xefordetails.# 查看SELinux的安全端口12345规则,发现没有匹配的规则## -l 查看安全上下文[rocky root ~]# semanage port -l|grep 12345将12345端口标记为http_port_t# 标记12345端口为http_port_t[rocky root ~]# semanage port -a -t http_port_t -p tcp 12345# 查看12345的端口规则,是http_port_t[rocky root ~]# semanage port -l|grep 12345http_port_t tcp12345,80,81,443,488,8008,8009,8443,9000# 重启httpd服务成功[rocky root ~]# systemctl restart httpd# 立即就可以访问http了SeLinux的布尔值SELinux的布尔值,就是SELinux对已经适配SELinux开发好的服务的策略控制.查看所有的SELinux布尔值# 查看所有的SELinux布尔值[rocky root ~]# semanage boolean -l|less# 查看samba的布尔值[rocky root ~]# semanage boolean -l|grep sambasamba_create_home_dirs(关 , 关)Allow samba to create homedirssamba_domain_controller(关 , 关)Allow samba to domain controller samba_enable_home_dirs(关 , 关)Allow samba toenablehomedirssamba_export_all_ro(关 , 关)Allow samba toexportall ro samba_export_all_rw(关 , 关)Allow samba toexportall rw samba_load_libgfapi(关 , 关)Allow samba to load libgfapi samba_portmapper(关 , 关)Allow samba to portmapper samba_run_unconfined(关 , 关)Allow samba to run unconfined samba_share_fusefs(关 , 关)Allow samba to share fusefs samba_share_nfs(关 , 关)Allow samba to share nfs sanlock_use_samba(关 , 关)Allow sanlock to use samba tmpreaper_use_samba(关 , 关)Allow tmpreaper to use samba use_samba_home_dirs(关 , 关)Allow use to samba homedirsvirt_use_samba(关 , 关)Allow virt to use sambagetsebool查看SELinux规则(Centos7)getsebool查看ftpd相关的SELinux规则# 查看SElinux的布尔值getsebool-a# 查看SELinux中ftpd_anon关键字的布尔值getsebool-a|egrepftpd_anonftpd_anon_write --offsetsebool修改Selinux的布尔值# 将布尔值 ftpd_anon_write 的状态开启临时生效重启后恢复默认setsebool ftpd_anon_write on# 将布尔值 ftpd_anon_write 的状态开启并永久生效## -P 参数永久生效setsebool-Pftpd_anon_write on# 可以看到再次查看时ftpd_anon_write 已开启[rocky root ~]# semanage boolean -l|grep ftpd_anon_writeftpd_anon_write(开 , 开)Allow ftpd to anonwriteSElinux对于文件的约束SELinux对于home目录为目录。其他目录是不管的常见问题Centos无法启动,错误提示 Failed to start Login Service原因分析一般是selinux没关解决办法:https://blog.csdn.net/qijkkwcw/article/details/108979451