Red Hat Enterprise Linux 6.4网络操作系统详解
上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才可以。