CentOS下SELinux安全设置
一、SELinux配置文件
在CentOS 7系统中部署SELinux非常简单,由于SELinux已经作为模块集成到内核中,默认SELinux已经处于激活状态。对管理员来说,更多的是需要配置与管理SELinux,CentOS 7系统中SELinux全局配置文件为/etc/sysconfig/selinux,内容如下:
[root@centos7 ~] # vim /etc/sysconfig/selinux # This file controls the state of SELinux on the system. # SELINUX= can take one of these three values: # enforcing - SELinux security policy is enforced. # permissive - SELinux prints warnings instead of enforcing. # disabled - No SELinux policy is loaded. SELINUX=enforcing # SELINUXTYPE= can take one of these two values: # targeted - Targeted processes are protected, # mls - Multi Level Security protection. SELINUXTYPE=targeted |
SELinux=enforcing为SELinux总开关,有效值可以是enforcing、permissive或disabled。
其中,disabled代表禁用SELinux功能,由于SELinux是内核模块功能,所以如果设置禁用,需要重启计算机。permissive代表仅警告模式,处于此状态下时,当主题程序试图访问无权限的资源时,SELinux会记录日志但不会拦截该访问,也就是最终访问是成功的,只是在SELinux日志中记录而已。enforcing模式代表强制开启,SELinux会拦截非法的资源访问并记录相关日志。
使用setenforce可以临时在enforcing模式与permissive模式之间切换,切换会被立刻应用于当前系统,计算机重启后无效,永久修改模式需要修改配置文件。
[root@centos7 ~] # setenforce 0 #设置SELinux为permissive模式 [root@centos7 ~] # setenforce 1 #设置SELinux为enforcing模式 |
二、SELinux安全上下文
SELinux会为进程与文件添加安全信息标签,如:SELinux用户、角色、类型以及可选的级别。当运行SELinux后所有这些信息都是访问控制的依据。下面通过一个实例文件查看SELinux安全上下文,使用ls -Z命令就可以看到文件或目录的这些上下文信息,而ps aux –Z则可以查看进程的安全上下文信息:
[root@centos7 ~] # ls -Z anaconda-ks.cfg -rw-------. root root system_u:object_r:admin_home_t:s0 anaconda-ks.cfg [root@centos7 ~] # ps aux -Z |
SELinux的安全上下文包括
用户:角色:类型:级别
三、SELinux排错
不管SELinux策略是允许还是拒绝资源的访问请求行为,都会记录日志,也就是AVC(Access Vector Cache)。所有SELinux拒绝的消息都会被记录进日志,根据系统中安装运行的服务进程不同,拒绝日志消息会被记录到不同的文件中,表6-2列出了进程与日志文件的关系。
表6-2
日志文件 进程
/var/log/audit/audit.log auditd服务开启
/var/log/messages auditd服务关闭,rsyslogd服务开启
/var/log/audit/audit.log,/var/log/messages安装setroubleshoot相关软件包
autitd与rsyslogd同时开启
对于大多数生产环境中的服务器而言,更多的是没有部署安装图形界面的Linux系统,我们需要手动查看日志文件。在此建议管理员安装setroubleshoot相关的软件包,这样可以将原本生涩的AVC拒绝日志转换为可读性比较高的setroubleshoot日志。查看日志可以使用如下两种方法:
[root@centos7 ~] # grep setroubleshoot /var/log/messages [root@centos7 ~] # grep denied /var/log/audit/audit.log |
查看messages日志会提示,根据黑体字提示运行sealert命令才可以看到人性化报错信息。
setroubleshoot: SELinux is preventing /usr/sbin/httpd from read access on the file index.html. For complete SELinux messages. run sealert -l 7082b8b4-70f4-42fb-92ea-08a51299d080
[root@centos7 ~] # sealert -l 7082b8b4-70f4-42fb-92ea-08a51299d080 |
四、修改安全上下文
有多种方式可以修改与管理SELinux安全上下文,如:chcon、semanage、fcontext以及restorecon命令。
1. chcon命令
描述:修改文件SELinux安全上下文。
用法:chcon [选项] [-u SELinux用户] [-r 角色] [-l 范围] [-t 类型] 文件
chcon [选项] --reference=参考文件 文件
选项:-u 修改用户属性
-r 修改角色属性
-l 修改范围属性
-t 修改类型属性
示例:
(1)修改文件安全上下文。
[root@centos7 ~] # cp --preserve=all /etc/passwd /root/ #复制文件(保留上下文信息) [root@centos7 ~] # ls -Z /root/passwd #查看文件SELinux安全上下文 [root@centos7 ~] # chcon -t admin_home_t /root/passwd #修改文件安全上下文中的类型 [root@centos7 ~] # ls -Z /root/passwd |
(2)修改目录安全上下文。
[root@centos7 ~] # chcon -R -t admin_home_t /root/ #递归修改目录安全上下文 |
(3)根据参考文件修改目标文件安全上下文。
[root@centos7 ~] # chcon --reference=/etc/passwd /root/passwd |
通过chcon修改的安全上下文并不是SELinux预设的安全上下文,当文件系统重置SELinux安全标签或使用restorecon命令重置指定目录的安全标签后,所有文件与目录的安全标签会被还原为系统预设值,如果需要修改SELinux默认的预设安全上下文,需要使用semanage命令添加或修改。
五、semanage命令
描述:SELinux策略管理工具。
用法:semanage fcontext [-S store] -{a|d|m|l|n|D} [-frst] file_spec
选项:-a,--add添加预设安全上下文
-d,--delete删除指定的预设安全上下文
-D,--deleteall 删除所有的预设自定义上下文
-m,--modify修改指定的预设安全上下文
-l,--list 显示预设安全上下文
-n,--noheading 不显示头部信息
示例:
(1)查看SELinux策略默认的预设安全上下文信息,系统将列出策略中定义的所有目录与安全上下文信息。
[root@centos7 ~] #semanage fcontext -l |
(2)修改策略,添加一条新的预设安全上下文信息。
[root@centos7 ~] # semanage fcontext -a -t samba_share_t /test/test.txt [root@centos7 ~] # mkdir /test; touch /test/test.txt [root@centos7 ~] # ls -Z /test/test.txt |
(3)使用restorecon命令,还原test.txt文件的安全上下文为预设值。
[root@centos7 ~] # restorecon /test/test.txt [root@centos7 ~] # ls -Z /test/test.txt |
(4)递归设置目录的预设安全上下文。
[root@centos7 ~] # semanage fcontext -a -t httpd_sys_content_t "/site/www(/.*)?" [root@centos7 ~] # mkdir -p /site/www/{web1,web2} [root@centos7 ~] # touch /site/www/{web1,web2}/index.html [root@centos7 ~] # ls -RZ /site/www [root@centos7 ~] # restorecon -R /site/ |
(5)删除预设安全上下文。
[root@centos7 ~] # semanage fcontext -d /test/ test.txt |
(6)检查预设SELinux安全上下文。
[root@centos7 ~] # matchpathcon /site/www/ |
6.2.6 查看与修改布尔值
SELinux布尔值可以实时被修改。如,你可以在不重新加载或编译SELinux策略的情况下允许服务访问NFS文件系统。getsebool是用来查看SELinux布尔值的命令,用法比较简单,-a选项用来查看所有的布尔值。一般建议管理员通过管道过滤自己需要的布尔值参数,如getsebool -a |grep ftp过滤与FTP相关的布尔值信息,显示效果中左侧为关键词,右侧为开关,on代表开,off代表关,具体命令如下。
[root@centos7 ~] # getsebool -a abrt_anon_write off abrt_handle_event off allow_console_login on allow_cvs_read_shadow off allow_daemons_dump_core on allow_daemons_use_tcp_wrapper off allow_daemons_use_tty on allow_domain_fd_use on … …部分内容省略… … |
修改SELinux布尔值状态也非常简单,使用setsebool name X即可实现。其中,name是布尔值名称,X代表on或off。默认setsebool命令修改的布尔值参数会立即生效,但计算机重启后会被还原,如果希望永久修改,需要使用-p参数。
[root@centos7 ~] # setsebool ftp_home_dir on [root@centos7 ~] # setsebool -p ftp_home_dir on |

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
Linux的10个最危险的命令
Linux命令行佷有用、很高效,也很有趣,但有时候也很危险,尤其是在你不确定你自己在正在做什么时候。 这篇文章将会向你介绍十条命令,但你最好不要尝试着去使用。 当然,以下命令通常都是在root权限下才能将愚蠢发挥到无可救药;在普通用户身份下,破坏的只是自己的一亩三分地。 1. rm -rf 命令 rm -rf命令是删除文件夹及其内容最快的方式之一。 仅仅一丁点的敲错或无知都可能导致不可恢复的系统崩坏。 下列是一些rm 命令的选项: rm 命令在Linux下通常用来删除文件。 rm -r命令递归的删除文件夹,甚至是空的文件夹。 rm -f命令能不经过询问直接删除‘只读文件’。Linux下删除文件并不在乎该文件是否是只读的,而只是在意其父目录是否有写权限。所以,-f这个参数只是表示不必一个个删除确认,而是一律悄悄删除。另外,原始的rm命令其实也是没有删除提示的,只是一般的发行版都会将rm通过别名的方式增加-i参数来要求删除确认,而-f则抑制了这个提示。 rm -rf /: 强制删除根目录下所有东东。 rm -rf *: 强制删除当前目录的所有文件。 rm -rf .: 强制删除当前文件夹...
- 下一篇
CentOS下iptables官方手册整理
目录: 1. 简介 2. 首先,什么是包过滤? 3. 快速入门指南 4. 数据包过滤流程 5. 具体如何使用Iptables命令实现过滤功能 6. 地址转换(NAT) 7. 排除建议 1. 简介 ———————————————————————————————————————————————— 读者们,大家好: 在这里我们假设你已经有一定的IP地址、网络地址、子网掩码、路由、DNS基础知识。如果没有建议你先阅读一下官网的networking-concepts-HOWTO文档。官网地址为:www.netfilter.org 当前我们的网络是不安全的。但问题是我们做网络限制,同时还需要提供快速、便利的网络通讯环境,而不是处于邪恶的目的。网络限制是一把双刃刀,但本文章并非解决这个问题。 所以刀在手如何使用完全取决于你。我相信你会把这些工具用到合理的地方,并能很好地使用这些工具。而不是用于其他目的。 ---------------------------------------------------------------------------------------------...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- 设置Eclipse缩进为4个空格,增强代码规范
- CentOS8编译安装MySQL8.0.19
- Windows10,CentOS7,CentOS8安装MongoDB4.0.16
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- CentOS关闭SELinux安全模块
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- SpringBoot2整合Redis,开启缓存,提高访问速度
- CentOS7安装Docker,走上虚拟化容器引擎之路
- Docker使用Oracle官方镜像安装(12C,18C,19C)