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对于项目开发来说是非常重要的.