东莞网站推广多少钱,小程序app开发多少钱,做网站和游戏是如何赚钱,网站需要建手机版的吗RHCSA 认证#xff1a;SELinux 精要和控制文件系统的访问尽管作为第一级别的权限和访问控制机制是必要的#xff0c;但它们同样有一些局限#xff0c;而这些局限则可以由安全增强 Linux(Security Enhanced Linux#xff0c;简称为 SELinux)来处理。这些局限的一种情形是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 变量的值设为 enforcingpermissivedisabled 中之一#getenforce#setenforce0#getenforce#setenforce1#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 文件并将端口设置为 9999Port9999保存更改并重启 sshd#systemctlrestartsshd#systemctlstatussshd重启 SSH 服务正如你看到的那样 sshd 启动失败但为什么会这样呢快速检查 /var/log/audit/audit.log 文件会发现 sshd 已经被拒绝在端口 9999 上开启(SELinux 的日志信息包含单词 AVC所以这类信息可以被轻易地与其他信息相区分)因为这个端口是 JBoss 管理服务的保留端口#cat/var/log/audit/audit.log|grepAVC|tail-1查看 SSH 日志在这种情况下你可以像先前解释的那样禁用 SELinux(但请不要这样做)并尝试重启 sshd且这种方法能够起效。但是 semanage 应用可以告诉我们在哪些端口上可以开启 sshd 而不会出现任何问题。运行#semanage port-l|grepssh便可以得到一个 SELinux 允许 sshd 在哪些端口上监听的列表Semanage 工具所以让我们在 /etc/ssh/sshd_config 中将端口更改为 9998 端口增加这个端口到 sshportt 的上下文然后重启 sshd 服务#semanage port-a-tssh_port_t-p tcp9998#systemctlrestartsshd#systemctlis-activesshdsemanage 添加端口如你所见这次 sshd 服务被成功地开启了。这个例子告诉我们一个事实SELinux 用它自己的端口类型的内部定义来控制 TCP 端口号。例 2允许 httpd 访问 sendmail这是一个 SELinux 管理一个进程来访问另一个进程的例子。假如在你的 RHEL 7 服务器上你要为 Apache 配置 mod_security 和 mod_evasive你需要允许 httpd 访问 sendmail以便在遭受到 (D)DoS 攻击时能够用邮件来提醒你。在下面的命令中如果你不想使得更改在重启后仍然生效请去掉 -P 选项。#semanage boolean-1|grephttpd_can_sendmail#setsebool-P httpd_can_sendmail1#semanage boolean-1|grephttpd_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-thttpd_sys_content_t/websites(/.*)?e). 最后应用在 d) 中创建的 SELinux 策略#restorecon-R-v/websites现在重启 Apache 并再次浏览到 http://则你可以看到被正确展现出来的 html 文件确认 Apache 页面总结在本文中我们详细地介绍了 SELinux 的基础知识。请注意由于这个主题的广泛性在单篇文章中做出一个完全详尽的解释是不可能的但我们相信在这个指南中列出的基本原则将会对你进一步了解更高级的话题有所帮助假如你想了解的话。假如你有任何的问题或评论请不要犹豫让我们知晓吧。本文由 LCTT 原创翻译Linux中国 荣誉推出