Linux使用SGID实现某个目录下文件对目录所属组的用户共享

要共享的用户所属组设置为zp_group

添加这个用户组:

groupadd zp_group

 

要共享的目录名设置为zp_group_publicDir, 暂时放在/tmp目录下:

cd /tmp

mkdir -m 2770 zp_group_publicDir  #数字2是为了给zp_group_publicDir目录设置SGID权限

chgrp zp_group zp_group_publicDir #将zp_group_publicDir目录所属组设置为 zp_group组

ls -ld ./zp_group_publicDir

可以看到zp_group_publicDir目录有了SGID并属于 zp_group群组, 到这里就成功了, 

只要某用户所属组包含zp_group组就可以共享zp_group_publicDir目录了.

 

接下来进行测试:

新建两个用户user1和user2; user1添加到zp_group组, user2暂时不添加:

useradd -G zp_group user1

useradd user2

查看user1和user2的信息:

id user1 && id user2

 

可以看到user1含有zp_group组, user2不含有zp_group组.

 

切换到user1用户并进入zp_group_publicDir, 用vim创建文件 a.txt 并写入内容”a.txt file”, 然后用cat查看文件内容, 用ll(ls -l的别名)显示文件信息, 命令如下:

su user1

cd zp_group_publicDir

vim a.txt

cat a.txt

ll

由于zp_group_publicDir设置了SGID权限, 因此该目录下创建的文件默认的群组与该目录的群组一致, 都为zp_group;

然后切换到user2用户, 进入zp_group_publicDir目录报Permission denied表示权限不足:

 

因为zp_group_publicDir目录对other用户没有rwx权限, user2对于zp_group_publicDir目录属于other身份, 所以无法查看编辑与进入zp_group_publicDir目录;

然后切换到root用户把user2也加入到zp_group群组:

 

然后切换到user2用户, 进入zp_group_publicDir目录并创建b.txt文件:

 

 

现在user2也可以进入zp_group_publicDir目录了, 只要某用户所属组包含zp_group组就可以共享zp_group_publicDir目录, 并且在zp_group_publicDir目录下创建的文件也会自动属于zp_group组, 由此可见SGID对于项目开发来说是非常重要的.

原文地址:https://www.cnblogs.com/zp106/p/12885372.html