实验 4 Linux 访问控制机制分析
4.1 实验名称
《Linux 访问控制机制分析》
1 、熟悉 Linux基本访问控制机制使用和原理
2 、熟悉 Linux S 位的作用和使用
3 、熟悉强制访问控制 Selinux 原理及其使用
1 、Linux 基本访问控制机制
(1)在/home 下创建一个文件夹 test
![](https://img-blog.csdnimg.cn/direct/2792ea0205244d8099217170f831b9d1.png)
(2)在文件夹下创建一个文本文件
![](https://img-blog.csdnimg.cn/direct/84abb5914a3143709fa79991261728a0.png)
(3)利用两种方法将文本文件的权限设置为属主完全控制、组可读和执行、其它用户只读
方法一:
![](https://img-blog.csdnimg.cn/direct/b16a46f796354e87a963cd21189557c7.png)
方法二:
![](https://img-blog.csdnimg.cn/direct/7e53642527c74eed8fd11cfaf2d56fc3.png)
(4)将系统新建文件和文件夹的权限设置为 644 和 755 ,重新创建文件观察权限值
664:
![](https://img-blog.csdnimg.cn/direct/1313e17596f84c33b6b2db6d6cf54a09.png)
![](https://img-blog.csdnimg.cn/direct/d9b678ef88b843cbbb7b38200d7d1744.png)
755:
![](https://img-blog.csdnimg.cn/direct/d7b6519cecb94328a21ce617b20500c0.png)
![](https://img-blog.csdnimg.cn/direct/1fddbf39a89549038e13cfb8e60945e4.png)
(5)建立一个可执行文件,设置其 Suid 位;执行该文件,并通过命令观察该文件权限的变
化。
![](https://img-blog.csdnimg.cn/direct/35c210c6a92e42058759e6cf98cbfe9c.png)
![](https://img-blog.csdnimg.cn/direct/a9f3fce0a6c4433aa16176f6e50f2fca.png)
(6)编译执行课件 suid 部分提权到root shell 的例子,分析其原理
![](https://img-blog.csdnimg.cn/direct/d4f9c596118a43adab521d0873f7bd9d.png)
![](https://img-blog.csdnimg.cn/direct/392365e341534f659fd2601bb88da050.png)
![](https://img-blog.csdnimg.cn/direct/a9d9bec550ce4aef863586f7ac66eaf8.png)
![](https://img-blog.csdnimg.cn/direct/ea8c77037147484c9f8625422d3617a2.png)
原理:
execve 为内核级系统调用,用来执行参数 filename 字符串所代表的文件路径,这里是“/bin/sh ”,第二个参数是利用指针数组来传递给执行文件,并且需要以空指针(NULL)结束,最后一个参数则为传递给执行文件的新环境变量数组。
由于之前给 shell 文件设置 suid 位,在其他用户执行该脚本时,此用户的权限是该脚本
文件属主 root 的权限。
2 、强制访问控制 Selinux 使用
(1)启动 Selinux
vim /etc/selinux/config ,将 disable 改成 1 后重启。
![](https://img-blog.csdnimg.cn/direct/fdd426cb4c1745b381682b14733a0707.png)
![](https://img-blog.csdnimg.cn/direct/b50a570228fa47e5be234270394fa166.png)
(2)查看系统的安全上下文
首先查看文件的安全上下文,使用 ls -Z /var/www/html 来查看目录的安全上下文。
![](https://img-blog.csdnimg.cn/direct/38d1b9f7f2d94190b33e9b7e9c9ddb0d.png)
接着查看进程上下文,使用 ps auxZ | grep -v grep | grep sh
![](https://img-blog.csdnimg.cn/direct/ce94ff440cd2430fa13a40492ce2ba1f.png)
(3)安装 httpd
执行 yum install httpd。
![](https://img-blog.csdnimg.cn/direct/f96bb7784cd34107b37562c03064d9df.png)
接下来启动 httpd。
![](https://img-blog.csdnimg.cn/direct/20ff80ad3ec549008a6a90a39ad6251c.png)
可以看到,httpd 进程的 selinux 类型为 http_t ,且存在多个 httpd 进程,具有相同的安全上下文。
![](https://img-blog.csdnimg.cn/direct/b3e212b51f1c4343aa6ab49caa4f76ae.png)
(4)修改 /var/www 文件夹的类型,使其为 httpd 不允许访问的类型,然后检查web 服务器
是否还可以正常使用。
httpd 进程可以访问/var/www/html 目录,因为当前存在着相应的允许主体 httpd_t 访问客
体 http_sys_content_t 进行相关操作的的 selinux 规则。
首先在/var/www/html 目录中创建测试文件:echo index.html > /var/www/html/index.html。
当前web 服务器可以使用。
使用 ls -Z /var/www/html/index.html 查看文件的安全上下文。
可以看到,文件的 selinux type 为 httpd_sys_content_t 。需要注意的是,如果在/root 目录 创 建 另 一 个 测 试 文 件 (echo index1.html > /root/index1.html) 并 将 测 试 文 件 移 动 到 /var/www/html/目录中(mv /root/index1.html /var/www/html/index1.html),查看测试文件的安全 上下文会发现 html 文件的 selinux 类型为 admin_home_t。这是因为文件的安全上下文不会因 为文件被移动而发生变化。也是因为这个原因,访问 index1.html 将拒绝访问,这是因为不 存在允许类型为httpd_t 的主体访问类型为 admin_home_t 的客体文件并进行读取操作的规则(可以使用 sesearch -s httpd_t -t admin_home_t -c file -p read --allow 查找符合条件的规则)。
接下来使用 chcon 修改文件的安全上下文,方式是 chcon <选项> <文件或目录 1> [<文
件或目录 n>]。
![](https://img-blog.csdnimg.cn/direct/0cf3b1e20aa84deea56d6074e60f0b21.png)
可以看到无法访问服务器。
这是因为不存在允许类型为httpd_t 的主体访问类型为 admin_home_t 的客体文件并进行读取操作的规则。
要使其重新能访问:
![](https://img-blog.csdnimg.cn/direct/4f1613ef2a1447349fb8ab353a19b1f1.png)
当启用 SELinux 时,Apache HTTP 服务器(httpd)默认情况下在受限的 httpd_t 域中运 行,并和其他受限制的网络服务分开。即使一个网络服务被攻击者破坏,攻击者的资源和可 能造成的损害是有限的。和 SELinux 上下文相关的 httpd 进程是 system_u:system_r:httpd_t:s0。
httpd 进程都运行在 httpd_t 域中。文件类型必须正确设置才能让 httpd 访问。例如 httpd 可以读取文件类型是 httpd_sys_content_t ,但不能写和修改。此外 httpd 不能访问 samba_share_t 类型的文件(Samba访问控制的文件),也不能访问用户主目录中被标记为与 user_home_t 文件类型,主要是防止 httpd 读写用户主目录中的文件并且继承其访问权限。httpd 可以读写的文件类型是 httpd_sys_content_rw_t。Apache 默认的文档根目录类型是 httpd_sys_content_t。