实验报告
课程名称: 计算机与网络安全
任课教师:
常晓林
学生姓名:
郭鑫玥
学生学号:
16281284
学院名称:
计算机与信息技术学院
2019 年 3 月 3 日
Lab 1:Set-UID Program Vulnerability
目录
1 实验描述......................................................................................3
2 实验内容......................................................................................3
2.1 task 1................................................................................3
2.2 task 2................................................................................6
2.3 task 3................................................................................8
2.4 task 4................................................................................8
2.5 task 5.............................................................................. 11
2.6 task 6..............................................................................14
2.7 task 7..............................................................................16
3 实验总结....................................................................................18
1 实验描述
Set-UID 是 Unix 操作系统中一种重要的安全机制。运行 Set-UID 程序时,
它将采用所有者的权限。例如,如果程序的所有者是 root,那么任何人运行此程
序时,程序在执行期间获得 root 权限。Set-UID 允许我们做很多有趣的事情,但
不幸的是,它也是很多坏事的罪魁祸首。 因此,本实验的目标有两个方面:
(1)欣赏其良好的一面:理解为什么需要 Set-UID 以及如何实现它。
(2)注意其不好的一面:了解其潜在的安全问题。
2 实验内容
2.1 task 1
实验任务:弄清楚为什么“passwd”,“chsh”,“su”,和“sudo”
命令需要 Set-UID 机制,如果它们没有这些机制的话,会发生什么,
如果你不熟悉这些程序,你可以通话阅读使用手册来熟悉它,如果你
拷贝这些命令到自己的目录下,这些程序就不会是 Set-UID 程序,运
行这些拷贝的程序,观察将会发生什么。
其中,“passwd”用来修改用户的密码;“chsh”用来修改默认 sh;
“su”用来获取 super user 权限;“sudo”用来执行一个需要管理员权
限的命令。
实验流程:
1. 利用“whereis”命令找到 su 文件所属位置路径
2. 拷贝“su”到当前文件夹,并查看是否复制成功
3. 运行当前文件夹中的 su,发现无法认证
4. 运行/bin 文件夹中的 su,发现可以获得 super user 权限
5. 与上述四步相似的过程测试其他命令
sudo:在当前文件夹下的 sudo 不可用,提示:必须属于用户 ID 0
并且设置 setuid 位;但在/usr/bin 下的可以正常用
passwd:在当前文件夹下的 passwd 不可用,提示:认证令牌操
作错误;但在/usr/bin 下的可以正常用,显示:已成功更新密码
chsh:在当前文件夹下的 chsh 不可用,提示:无法改变 ID 到 root;
但在/usr/bin 下的可以正常用
回答:setuid 机制是一种控制用户权限的机制,因为“passwd”、
“chsh”、“su”、“suso”都需要使得用户在普通权限下临时具有 root
权限,从而可以访问和修改一些 root 权限下的文件。如果没有 setuid
程序,那么普通用户讲没有权限修改自己的密码,没有权限运行很多
程序,不能安装软件等。所以 setuid 是必要的机制。
2.2 task 2
实验任务:在 linux 环境下运行 Set-UID 程序,以 root 方式登录,
拷贝/bin/zsh 到/tmp, 同时设置拷贝到 tmp 目录下的 zsh 为 set-uid root
权限,然后以普通用户登录,运行/tmp/zsh。你会得到 root 权限吗?
请描述你的结果。
实验流程:
1. 安装 zsh
2. 拷贝/bin/zsh 到/tmp, 同时设置拷贝到 tmp 目录下的 zsh 为
set-uid root 权限
3. 然后以普通用户登录,运行/tmp/zsh。可见 zsh 是能获得 root
权限的,可见 zsh 是不安全的。
4.测试 bash,操作同上
5. 测试发现 bash 在同样情况下,无法获得 root 权限。由此可见
bash 比 zsh 要更为安全
2.3 task 3
实验任务:从题目 2 可以看出,/bin/bash 有某种内在的保护机制
可以阻止 Set-UID 机制的滥用。为了能够体验这种内在的保护机制出
现之前的情形,我们打算使用另外一种/bin/zsh。在一些 linux 的发行
版中(比如 Redora 和 Ubuntu),/bin/sh 实际上是/bin/bash 的符号链接。
为了使用 zsh,我们需要把/bin/sh 链接到/bin/zsh。
实验流程:
1. 把默认的 shell 指向 zsh
2.4 task 4
实验任务:system(const char * cmd)系统调用函数被内嵌到一个