哈工大计算机系统安全实验二补充——passwd程序功能的实现

先吐槽一下ubuntu下新浪微博发博文的这个排版。。不能忍啊。。tab键各种不好用还各种不让我调字体调缩进。。= =字体还一会儿一变。。既不让我手动排版,自动排版还各种不好用。。= =

这次的实验分三个部分,第一个部分是在Ubuntu下配置chroot环境并搭建ftp服务器,第二个部分是利用chroot工具来实现bashps的配置使用和修改系统内核,配置capability的能力位,实现几种能力位的设置可验证。

 

前两各部分都很简单就不说了,主要说第三个部分,以下是实验要求

------------------------------------分割线-------------------------------------------

实验要求:

passwd程序功能的实现

1 passwd 程序功能描述

Linux中,passwd程序是可信任的,修改存储经过加密的密码的影子密码文件(/etc/shadow),passwd程序执行它自己内部的安全策略,允许普通用户修改属于他们自己的密码,同时允许root修改所有密码。为了执行这个受信任的作业,passwd程序需要有移动和重新创建shadow文件的能力,在标准Linux中,它有这个特权,因为passwd程序可执行文件在执行时被加上了setuid位,它作为root用户(它能访问所有文件)允许,然而,许多程序都可以作为root允许(实际上,所有程序都有可能作为root允许)。这就意味着任何程序(当以root身份运行时)都有可能能够修改shadow文件。

2、实验要求

自己编制文件和程序,仿制passwd程序修改/etc/shadow的功能,包括:

  1. 自己设置一个类/etc/shadow文件aaa,该文件中约定好内容格式,和读取该文件的程序相配合,文件中包括超级用户及其内容、普通用户及其内容

  2. 编制程序使得:Root用户能够读取和修改aaa文件中所有用户的内容

普通用户仅能够读取和修改aaa文件中属于自己用户的内容

  1. 普通用户能以root身份执行所编制的类passwd程序

-----------------------------------------分割线----------------------------------------------


先来理一理基本思路吧。我们需要做的事有:1.创建一个aaa文件。2.创建一个c语言程序test.c。

aaa文件是一个类/etc/shadow的文件,该文件中应该按照一定的格式,使里面包含超级用户及其内容,普通用户及其内容。

我的aaa是这样写的。

哈工大计算机系统安全实验二补充——passwd程序功能的实现_第1张图片

在这里,我的aaa是按照行来分的(此处仿照了passwd文件),总共只写了四行。。

第一行表示root,后面的xxxx...表示root用户的内容。

第二行表示普通用户奥利奥(oreo),后面的asdf是奥利奥的内容。剩下的依次类推。冒号后面都表示冒号前面用户的内容。这些内容是我随便敲的。。

接下来再来想想要写的代码需要实现的具体功能:

根据实验要求的第二个条件:

Root用户能够读取和修改aaa文件中所有用户的内容,普通用户仅能够读取和修改aaa文件中属于自己用户的内容。

那么我们要做的事就很清晰了。首先,我们要判断当前的用户是root用户还是普通用户。如果是root用户,我们应当允许他修改所有用户的内容,而如果是普通用户,我们应当只允许他修改自己所对应的内容。

获取当前用户的方法:struct passwd * getpwuid(uid_t uid);

参数获取方式:uid_t uid = getuid();

具体使用方法自己man吧。

先上代码:


哈工大计算机系统安全实验二补充——passwd程序功能的实现_第2张图片

哈工大计算机系统安全实验二补充——passwd程序功能的实现_第3张图片


哈工大计算机系统安全实验二补充——passwd程序功能的实现_第4张图片

哈工大计算机系统安全实验二补充——passwd程序功能的实现_第5张图片

代码结束。。。恩。。感觉没啥可讲的了。。= =

之后编译。。

之后运行。。

运行的时候这样。如果当前是普通用户:哈工大计算机系统安全实验二补充——passwd程序功能的实现_第6张图片
正常会输出当前的用户名:哈工大计算机系统安全实验二补充——passwd程序功能的实现_第7张图片(代码里那句printf)

接着我们来看看aaa文件的内容:用cat aaa命令可得到

哈工大计算机系统安全实验二补充——passwd程序功能的实现_第8张图片

可以看到,abby那一栏的确已经被我修改了。

接下来我们再试试root用户。root用户可以修改所有人的内容。

先来改改自己的:哈工大计算机系统安全实验二补充——passwd程序功能的实现_第9张图片

输出结果应该是这样:哈工大计算机系统安全实验二补充——passwd程序功能的实现_第10张图片
继续用cat命令查看结果:哈工大计算机系统安全实验二补充——passwd程序功能的实现_第11张图片

结果很不错,root用户改了自己的内容。

再来改改别人的:哈工大计算机系统安全实验二补充——passwd程序功能的实现_第12张图片

cat之后可以看到:哈工大计算机系统安全实验二补充——passwd程序功能的实现_第13张图片

结果也是十分的理想呀。成功的改了sss的内容。至此,我们的实验也完成了大半了。

接下来再来看看实验要求,实验要求是要做一个类shadow文件,所以我们还需要将aaa文件的拥有者改成root。这里用chown命令修改。

最后,我们还要给编译生成的可执行文件test设置suid位。用chmod +s命令。这个具体就不细讲了,应该大家都会。到这里,实验才算是真正完成了。总共也就不到一百行的代码,非常简单。



---------------------------------------------END--------------------------------------
再次吐槽这排版真恶心。。嫌弃 哈工大计算机系统安全实验二补充——passwd程序功能的实现

你可能感兴趣的:(哈工大计算机系统安全实验二补充——passwd程序功能的实现)