RHCSA 认证:SELinux 精要和控制文件系统的访问

尽管作为第一级别的权限和访问控制机制是必要的,但它们同样有一些局限,而这些局限则可以由安全增强 Linux(Security Enhanced Linux,简称为 SELinux)来处理。

这些局限的一种情形是:某个用户可能通过一个泛泛的 chmod 命令将文件或目录暴露出现了安全违例,从而引起访问权限的意外传播。结果,由该用户开启的任意进程可以对属于该用户的文件进行任意的操作,最终一个恶意的或有其它缺陷的软件可能会取得整个系统的 root 级别的访问权限。

考虑到这些局限性,美国国家安全局(NSA) 率先设计出了 SELinux,一种强制的访问控制方法,它根据最小权限模型去限制进程在系统对象(如文件,目录,网络接口等)上的访问或执行其他的操作的能力,而这些限制可以在之后根据需要进行修改。简单来说,系统的每一个元素只给某个功能所需要的那些权限。

在 RHEL 7 中,SELinux 被并入了内核中,且默认情况下以强制模式(Enforcing)开启。在这篇文章中,我们将简要地介绍有关 SELinux 及其相关操作的基本概念。

SELinux 的模式

SELinux 可以以三种不同的模式运行:

强制模式(Enforcing):SELinux 基于其策略规则来拒绝访问,这些规则是用以控制安全引擎的一系列准则;

宽容模式(Permissive):SELinux 不会拒绝访问,但对于那些如果运行在强制模式下会被拒绝访问的行为进行记录;

关闭(Disabled) (不言自明,即 SELinux 没有实际运行).

使用 getenforce 命令可以展示 SELinux 当前所处的模式,而 setenforce 命令(后面跟上一个 1 或 0) 则被用来将当前模式切换到强制模式(Enforcing)或宽容模式(Permissive),但只对当前的会话有效。

为了使得在登出和重启后上面的设置还能保持作用,你需要编辑 /etc/selinux/config 文件并将 SELINUX 变量的值设为 enforcing,permissive,disabled 中之一:

# getenforce

# setenforce 0

# getenforce

# setenforce 1

# getenforce

# cat /etc/selinux/config

设置 SELinux 模式

通常情况下,你应该使用 setenforce 来在 SELinux 模式间进行切换(从强制模式到宽容模式,或反之),以此来作为你排错的第一步。假如 SELinux 当前被设置为强制模式,而你遇到了某些问题,但当你把 SELinux 切换为宽容模式后问题不再出现了,则你可以确信你遇到了一个 SELinux 权限方面的问题。

SELinux 上下文

一个 SELinux 上下文(Context)由一个访问控制环境所组成,在这个环境中,决定的做出将基于 SELinux 的用户,角色和类型(和可选的级别):

一个 SELinux 用户是通过将一个常规的 Linux 用户账户映射到一个 SELinux 用户账户来实现的,反过来,在一个会话中,这个 SELinux 用户账户在 SELinux 上下文中被进程所使用,以便能够明确定义它们所允许的角色和级别。

角色的概念是作为域和处于该域中的 SELinux 用户之间的媒介,它定义了 SELinux 可以访问到哪个进程域和哪些文件类型。这将保护您的系统免受提权漏洞的攻击。

类型则定义了一个 SELinux 文件类型或一个 SELinux 进程域。在正常情况下,进程将会被禁止访问其他进程正使用的文件,并禁止对其他进程进行访问。这样只有当一个特定的 SELinux 策略规则允许它访问时,才能够进行访问。

下面就让我们看看这些概念是如何在下面的例子中起作用的。

例 1:改变 sshd 守护进程的默认端口

在 RHCSA 系列(八): 加固 SSH,设定主机名及启用网络服务 中,我们解释了更改 sshd 所监听的默认端口是加固你的服务器免受外部攻击的首要安全措施。下面,就让我们编辑 /etc/ssh/sshd_config 文件并将端口设置为 9999:

Port 9999

保存更改并重启 sshd:

# systemctl restart sshd

# systemctl status sshd

重启 SSH 服务

正如你看到的那样, sshd 启动失败,但为什么会这样呢?

快速检查 /var/log/audit/audit.log 文件会发现 sshd 已经被拒绝在端口 9999 上开启(SELinux 的日志信息包含单词 "AVC",所以这类信息可以被轻易地与其他信息相区分),因为这个端口是 JBoss 管理服务的保留端口:

# cat /var/log/audit/audit.log | grep AVC | tail -1

查看 SSH 日志

在这种情况下,你可以像先前解释的那样禁用 SELinux(但请不要这样做!),并尝试重启 sshd,且这种方法能够起效。但是, semanage 应用可以告诉我们在哪些端口上可以开启 sshd 而不会出现任何问题。

运行:

# semanage port -l | grep ssh

便可以得到一个 SELinux 允许 sshd 在哪些端口上监听的列表:

Semanage 工具

所以让我们在 /etc/ssh/sshd_config 中将端口更改为 9998 端口,增加这个端口到 sshportt 的上下文,然后重启 sshd 服务:

# semanage port -a -t ssh_port_t -p tcp 9998

# systemctl restart sshd

# systemctl is-active sshd

semanage 添加端口

如你所见,这次 sshd 服务被成功地开启了。这个例子告诉我们一个事实:SELinux 用它自己的端口类型的内部定义来控制 TCP 端口号。

例 2:允许 httpd 访问 sendmail

这是一个 SELinux 管理一个进程来访问另一个进程的例子。假如在你的 RHEL 7 服务器上,你要为 Apache 配置 mod_security 和 mod_evasive,你需要允许 httpd 访问 sendmail,以便在遭受到 (D)DoS 攻击时能够用邮件来提醒你。在下面的命令中,如果你不想使得更改在重启后仍然生效,请去掉 -P 选项。

# semanage boolean -1 | grep httpd_can_sendmail

# setsebool -P httpd_can_sendmail 1

# semanage boolean -1 | grep httpd_can_sendmail

允许 Apache 发送邮件

从上面的例子中,你可以知道 SELinux 布尔设定(或者只是布尔值)分别对应于 true 或 false,被嵌入到了 SELinux 策略中。你可以使用 semanage boolean -l 来列出所有的布尔值,也可以管道至 grep 命令以便筛选输出的结果。

例 3:在一个特定目录而非默认目录下提供一个静态站点服务

假设你正使用一个不同于默认目录(/var/www/html)的目录来提供一个静态站点服务,例如 /websites 目录(这种情形会出现在当你把你的网络文件存储在一个共享网络设备上,并需要将它挂载在 /websites 目录时)。

a). 在 /websites 下创建一个 index.html 文件并包含如下的内容:

SELinux test

假如你执行

# ls -lZ /websites/index.html

你将会看到这个 index.html 已经被标记上了 default_t SELinux 类型,而 Apache 不能访问这类文件:

检查 SELinux 文件的权限

b). 将 /etc/httpd/conf/httpd.conf 中的 DocumentRoot 改为 /websites,并不要忘了 更新相应的 Directory 块。然后重启 Apache。

c). 浏览 http://,则你应该会得到一个 503 Forbidden 的 HTTP 响应。

d). 接下来,递归地改变 /websites 的标志,将它的标志变为 httpd_sys_content_t 类型,以便赋予 Apache 对这些目录和其内容的只读访问权限:

# semanage fcontext -a -t httpd_sys_content_t "/websites(/.*)?"

e). 最后,应用在 d) 中创建的 SELinux 策略:

# restorecon -R -v /websites

现在重启 Apache 并再次浏览到 http://,则你可以看到被正确展现出来的 html 文件:

确认 Apache 页面

总结

在本文中,我们详细地介绍了 SELinux 的基础知识。请注意,由于这个主题的广泛性,在单篇文章中做出一个完全详尽的解释是不可能的,但我们相信,在这个指南中列出的基本原则将会对你进一步了解更高级的话题有所帮助,假如你想了解的话。

假如你有任何的问题或评论,请不要犹豫,让我们知晓吧。

本文由 LCTT 原创翻译,Linux中国 荣誉推出

linux 7 没有权限访问,技术|RHCSA 系列(十三): 在 RHEL 7 中使用 SELinux 进行强制访问控制...相关推荐

  1. Linux桌面需要强制访问控制,RHCSA 系列(十三): 在 RHEL 7 中使用 SELinux 进行强制访问控制...

    RHCSA 认证:SELinux 精要和控制文件系统的访问 尽管作为第一级别的权限和访问控制机制是必要的,但它们同样有一些局限,而这些局限则可以由安全增强 Linux(Security Enhance ...

  2. linux nfs acl 特定ip,技术|RHCSA 系列(七): 使用 ACL(访问控制列表) 和挂载 Samba/NFS 共享...

    在上一篇文章(RHCSA 系列(六))中,我们解释了如何使用 parted 和 ssm 来设置和配置本地系统存储. RHCSA 系列: 配置 ACL 及挂载 NFS/Samba 共享 – Part 7 ...

  3. linux 7 没有权限访问,[CentOS 7系列]文件或目录的权限与属性

    在开始今天的话题之前,我们首先来回顾下ls命令.在ls命令中参数"-l"会显示出来目标的详细信息,如下所示: [root@server02~]#ls-l/tmp/ 总用量4 -rw ...

  4. linux的资源管理器关进程,RHCSA 系列(五): RHEL7 中的进程管理:开机,关机

    我们将概括和简要地复习从你按开机按钮来打开你的 RHEL 7 服务器到呈现出命令行界面的登录屏幕之间所发生的所有事情,以此来作为这篇文章的开始. Linux 开机过程 请注意: 相同的基本原则也可以应 ...

  5. linux文件夹加密访问,技术|Linux系统上用encfs创建和管理加密文件夹

    如果你想使你计算机上的某些信息免于被窥视的话,可以看看这篇文字.保护信息的一种方法就是加密你的home目录,但是一旦你登录系统后,你的home目录下的信息将暴露于外.过去,我已经写过关于怎样在你的系统 ...

  6. 技术文章系列汇总(持续更新中)并附博客上树状列表源代码

    系统架构系列 在多台服务器上简单实现Redis的数据主从复制 利用Nginx做负载均衡 软件设计系列 项目分析 [项目分析]ASP.NET MVC路由匹配检测组件的代码分析 [项目分析]保持你的网站激 ...

  7. 隐私计算加密技术基础系列(中)-RSA加密解析

    1 隐私计算基座-密码学 1.1 隐私计算背景 隐私计算(Privacy-preserving computation)是指在保证数据提供方不泄露原始数据的前提下,对数据进行分析计算的一系列信息技术, ...

  8. linux之selinux强制访问控制

    selinux selinux是强制访问控制的一种策略,可以指明某一个进程访问哪些资源,在传统的linux中,一切皆文件,由用户.组和权限来控制访问,在selinux中,一切皆对象,由存放在扩展属性领 ...

  9. linux文件的权限模式,Linux文件权限和访问模式

    为了更加安全的存储文件,Linux为不同的文件赋予了不同的权限,每个文件都拥有下面三种权限: 所有者权限:文件所有者能够进行的操作 组权限:文件所属用户组能够进行的操作 外部权限(其他权限):其他用户 ...

最新文章

  1. 17.1 MySQL主从介绍 17.2 准备工作 17.3 配置主 17.4 配置从 17.5 测试主从同步
  2. Mysql: SQL JOIN 子句详解
  3. c语言glut打正方形,OpenGL绘制正方形并用键盘移动
  4. 一个很详细的web.xml讲解(转)
  5. js事件流 事件捕获 及时间冒泡详解
  6. mysql 格式化_在线SQL代码格式化
  7. 熊猫烧香病毒是计算机病毒,“熊猫烧香”计算机病毒大案告破
  8. 氚云 表单前端代码-提交机制
  9. 写给小白的Python之006:数据类型之列表
  10. 计世资讯:大数据将使用户采购存储解决方案呈现两大新特征
  11. 邓俊辉《数据结构》-列表学习笔记
  12. 风之谷mobi-宫崎骏漫画kindle7本
  13. 【自存代码】划分数据集为训练集和测试集
  14. 怎么将pdf转换成word?
  15. C语言的运算符和表达式
  16. Redis的一些知识
  17. linux - realpath_ex
  18. SAP中采购订单收货和发票收据选项的控制逻辑分析
  19. 活字格低代码开发平台怎么样?靠谱吗?
  20. 蜘蛛型小四足机器人运动分析

热门文章

  1. 微型计算机dec al,微机原理复习知识点
  2. python开始print_当你使用print时,Python是怎么运行的
  3. vmdk文件怎么安装到虚拟机_【技术分享】虚拟机镜像解析
  4. java日历记事本ppt_JAVA做的日历记事本
  5. 查询已安装rpm包信息
  6. html圆角边框只有左边,border-radius以外的CSS圆角边框制作方法
  7. 金士顿sd卡恢复软件_手机上使用SD内存卡会让手机性能变差?
  8. linux 重定向_Unix/Linux编程实践之IO重定向和管道
  9. 一个完整的网上商城的源码_黄冈微信分销商城系统-源码码网
  10. debian 8 服务器 稳定,如何在 Debian 8/9/10 上安装最新稳定版 Wine