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用户就可以修改内容了,不信可以试一下哦。