例题
同一群组microsoft
下的两个账号justmine001
和justmine002
需要共同拥有目录/microsoft/eshop
的开发权,以便进行协同工作,但是其他人不允许进入和查阅该目录。
从例题可以分析出:
- 同一群组下的账户需要共同拥有目录的使用权,且可以编辑里面的任何文件。
- 其他账户不拥有该目录的任何权限。
- 需要使用
root
账户,创建账户、群组,设置目录权限,然后搭建开发环境。
创建账户相关信息
groupadd microsoft ; 新增群组
useradd -G microsoft justmine001; 新增账户,并加入到群组microsoft
useradd -G microsoft justmine002; 新增账户,并加入到群组microsoft
查阅账号属性
id justmine001;
id justmine002;
搭建环境
创建开发目录
mkdir -p /microsoft/eshop
查询
ll -d /microsoft/eshop
设置传统权限
从上图可以看到,开发目录的拥有者和群组都是root
,权限为rwxr-xr-x
,所以justmine001
和justmine002
可以查阅(ls
)和进入(cd
)该目录,但是都不能在目录中创建文件。
首先,设置目录群组为microsoft
,其次,其他人对该目录没有任何权限,所以应该设置权限为770。如果不理解,请阅读上一篇详解Linux文档属性、拥有者、群组、权限、差异
chgrp microsoft /microsoft/eshop; 分配群组
chmod 770 /microsoft/eshop; 设置权限
首先测试justmine
账号(其他人)的权限,如下:
其他人无法访问ls
和进入cd
该目录,已达到预期效果。
测试同群组下的justmine001
和justmine002
账号,再次创建文件,如下:
为了淋漓尽致的展现,我将文件创建权限从拒绝到许可的整个过程都截取下来了!!!
从上面可以看到,文件test
和test1
的拥有者和群组分别为justmine001
和justmine002
,虽然用户justmine001
可以删除文件test1
(目录权限的控制范围),但是却不能编辑它(文件权限的控制范围)。那该肿么办呢,还是无法完成协作工作啊。那么我们将文件权限设置为777不就可以了,这样文件对任何人都可读、可写、可编辑,再加上目录权限的控制,不就可以了,没毛病。还有一种方法,变更它们创建的文件群组为microsoft
,这样也可以实现协作工作,貌似这种方法才是切合现实的。不过,每次都要管理员去做这件事情,那岂不是太麻烦他老人家,多不好意思啊,嘿嘿。正所谓,车道山前必有路,我们可以使用Linux
特殊权限SGID
和umask
来定义这种默认行为,这样同一群组下的任何账户创建的文件都可以互相修改了。
备注:Linux文档权限是一级一级的往下控制的,读、写、编辑文件的前提是能进入该目录。
设置特殊权限
为目录/microsoft/eshop
设置SGID
权限
chmod 2770 /microsoft/eshop
使用justmine002
账号创建文件,查询文件权限:
从上图可以看到,justmine002
所属的文件群组自动变更成microsoft
,而umask
默认为002
,两人同属一个群组,自然就可以互相修改彼此的文件了!!!
总结
对于文档多租户管理,我们最好新建一个统一的群组,然后将目录权限设置为2770
,最后把需要协作工作的用户加入这个群组即可,就是这么简单。
原文地址:https://www.cnblogs.com/justmine/p/9097834.html