上QQ阅读APP看书,第一时间看更新
5.4 企业实战与应用
1.情境及需求
情境:假设系统中有两个账号,分别是alex与arod,这两个账号除了自己的群组之外还共同支持一个名为project的群组。比如这两个用户需要共同拥有/srv/ahome/目录的开发权,且该目录不许其他人进入查阅,请问该目录的权限应如何设定?下面先以传统权限说明,再以SGID的功能解析。
目标:了解为何进行项目开发时,目录最好需要设定SGID的权限。
前提:多个账号支持同一群组,且共同拥有目录的使用权。
需求:需要使用root的身份运行chmod、chgrp等命令帮用户设定好他们的开发环境。这也是管理员的重要任务之一。
2.解决方案
(1)首先制作出这两个账号的相关数据,如下所示:
[root@RHEL6~]# groupadd project <==增加新的群组 [root@RHEL6~]# useradd -G project alex <==建立alex账号,且支持project [root@RHEL6~]# useradd -G project arod <==建立arod账号,且支持project [root@RHEL6~]# id alex <==查阅alex账号的属性 uid=501(alex)gid=502(alex)groups=502(alex),501(project) <==确定有支持 [root@RHEL6~]# id arod uid=502(arod)gid=503(arod)groups=503(arod),501(project)
(2)再建立所需要开发的项目目录。
[root@RHEL6~]# mkdir /srv/ahome [root@RHEL6~]# 11 -d /srv/ahome drwxr-xr-x 2 root root 4096 Sep 29 22:36/srv/ahome
(3)从上面的输出结果可发现alex与arod都不能在该目录内建立文件,因此需要进行权限与属性的修改。由于其他人均不可进入此目录,因此该目录的群组应为project,权限应为770才合理。
[root@RHEL6~]# chgrp project /srv/ahome [root@RHEL6~]# chmod 770 /srv/ahome [root@RHEL6~]# 11-d /srv/ahome drwxrwx--- 2 root project 4096 Sep 29 22:36/srv/ahome #从上面的权限结果来看,由于alex/arod均支持project,因此似乎没问题了
(4)分别以两个使用者来测试,情况会如何呢?先用alex建立文件,再用arod去处理。
[root@RHEL6~]#su - alex <==先切换成alex身份来处理 [alex@www~]$cd /srv/ahome <==切换到群组的工作目录去 [alex@www ahome]$touch abcd <==建立一个空的文件 [alex@www ahome]$exit <==离开alex的身份 [root@RHEL6~]#su - arod [arod@www ~]$cd /srv/ahome [arod@www ahome]$11 abcd -rw-rw-r-- 1 alex alex 0 Sep 29 22:46 abcd #仔细看一下上面的文件,由于群组是alex, arod账号并不被支持 #因此对于abcd这个文件来说,arod应该只是其他人,只有r的权限而已 [arod@www ahome]$exit
由上面的结果我们可以知道,若单纯使用传统的rwx,则对alex建立的abcd这个文件来说,arod可以删除它,但是却不能编辑它。若要实现目标,就需要用到特殊权限。
(5)加入SGID的权限并进行测试。
[root@RHEL6~]# chmod 2770 /srv/ahome [root@RHEL6~]# 11 -d /srv/ahome drwxrws---__2 root project 4096 Sep 29 22:46/srv/ahome
(6)测试:使用alex账号去建立一个文件,并且查阅文件的权限。
[root@RHEL6~]# su -alex [alex@www~]$cd /srv/ahome [alex@www ahome]$touch 1234 [alex@www ahome]$111234 -rw-rw-r-- 1 alex project 0 Sep 29 22:531234 #没错,这才是我们要的!现在alex、arod建立的新文件所属群组都是project #由于两人均属于此群组,加上umask都是002,这样两人才可以互相修改对方的文件
最终的结果显示,此目录的权限最好是2770,所属文件拥有者属于root即可,至于群组则必须是两人共同支持的project才可以。