Linux档案和目录管理的一道例题

zestroly 2011-10-05

假设系统中有两个账号,分别是 alex 和 arod ,这两个人除了自己群组之外还共同支持一个名为 project 的群组。假设这两个用户需要共同拥有 /srv/ahome/ 目录的开发权,而该目录禁止其他人进入查阅。 请问该目录的权限设定应为何?请先以传统权限说明,再以 SGID 的功能解析。

目标:了解到为何项目开发时,目录最好需要设定 SGID 的权限!
前提:多个账号支持同一群组,且共同拥有目录的使用权!
需求:需要使用 root 的身份来进行 chmod, chgrp 等帮用户设定好他们的开发环境才行! 这也是管理员的重要任务之一

(1)准备工作。

groupadd  project        --------建立群组project

useradd  -G project  alex     --------建立用户alex,并且此用户支持群组project

useradd  -G project  arod     --------建立用户arod,并且此用户支持群组project

id  alex  ----查看alex的账户属性

id  alex  ----查看alex的账户属性

mkdir /srv/ahome    ----  建立工作目录

(2)使用传统权限。

chmod  770 /srv/ahome   -----该目录禁止其他人进入查阅,而同组的人却可以互相修改档案,所以修改权限为770

chgrp project /srv/ahome   -----将/srv/ahome目录的支持群组修改为project

此时工作目录的权限已经设好,支持群组也设定为project了,是不是已经可以了呢?

我们试一下看:

使用alex用户登录tty2

cd /srv/ahome    ----  进入工作目录

touch  123.txt     -----建立档案123.txt

ls  -l  123.txt     -----查看123.txt的档案属性

-rw-rw-r-- 1 alex alex 0 Sep 29 22:46 123.txt   我们发现alex建立的档案本身所属的群组为alex。但对于arod来讲,他并不支持alex这个群组,所以arod对应此档案就是other,不过other有r权限,所以理论上arod是可以查看档案内容的。我们下边验证一下。

使用arod用户登录tty3

cd /srv/ahome    ----  进入工作目录

cat -n 123.txt 

xxxxxxxxx         ----123.txt的内容

nano   123.txt    -----使用编辑器编辑123.txt,此时你会发现,当你想要保存的时候,系统提示你“不允许”

(3)使用SGID 权限

chmod  g+s  /srv/ahome  使用root用户修改目录/srv/ahome的权限,使之具有SGID权限。

换arod用户登录,使用nano编辑器修改内容试一下:

nano  123.txt   -------???什么?还是不行?

呵呵,当然不行了。。。。因为你的档案的支持群组并没有改变啊。

切换root   

rm  123.txt

再使用alex用户登录,

touch  123.txt     -----建立档案123.txt

ls  -l  123.txt     -----查看123.txt的档案属性

-rw-rw-r-- 1 alex project 0 Sep 29 22:48 123.txt    ----可以发现123.txt这样档案已经归属于project群组了。

此时再使用arod用户就可以修改内容了,不信可以试一下哦。

相关推荐