假如你有这样一个需求,一个小组内很多成员共同研究一个项目,为了这个项目我们需要分配一个具体的目录.

所有成员都拥有该目录的使用权限,可以互相操作成员的文件及内容.而且不允许其他人查看.

现在开始操作:

创建用户组project_test和用户alex和bob,并将他们加入到project_test组中.

root@centos8 ~ $ groupadd project_test

root@centos8 ~ $ useradd -G project_test alex
root@centos8 ~ $ useradd -G project_test bob

root@centos8 ~ $ id alex;id bob
uid=1004(alex) gid=1006(alex) groups=1006(alex),1005(project_test)    <==确实已经加入project_test组了
uid=1005(bob) gid=1007(bob) groups=1007(bob),1005(project_test)     <==确实已经加入project_test组了

接下来开始创建共同工作的目录:/mnt/project

root@centos8 ~ $ mkdir /mnt/project
root@centos8 ~ $ ll -d /mnt/project/
drwxr-xr-x. 2 root root 6 May 28 14:38 /mnt/project/

因为是root用户创建的,默认用户组为root,且权限为755,现在将其修改为project_test组,权限为770

root@centos8 ~ $ chgrp project_test /mnt/project/
root@centos8 ~ $ chmod 770 /mnt/project/
root@centos8 ~ $ ll -d /mnt/project/
drwxrwx---. 2 root project_test 6 May 28 14:38 /mnt/project/        <==可以看到已经修改成功

从权限来看,组内成员均支持project_test组,似乎已经完成了我们的要求,那么来测试一下

root@centos8 ~ $ su - alex
[alex@centos8 ~]$ cd /mnt/project/
[alex@centos8 project]$ touch test1

[alex@centos8 project]$ ll test1
-rw-rw-r--. 1 alex alex 0 May 28 14:54 test1      <== 好像有点问题,用户组居然是alex,对于test1这个文件来说,,组内其他的人员权限只有r,无法操作和修改test1文件.

由以上结果可知,如果只是使用一般的rwx权限,无法满足我们的需求.所以这里要使用到组ID(SGID)权限

root@centos8 ~ $ ll -d /mnt/project/
drwxrwx---. 2 root project_test 19 May 28 14:54 /mnt/project/
root@centos8 ~ $ chmod g+s /mnt/project/       <== 添加组ID(SGID)权限  chmod 2770 /mnt/project/ 这样也可以
root@centos8 ~ $ ll -d /mnt/project/
drwxrws---. 2 root project_test 19 May 28 14:54 /mnt/project/  <==可以看到用户组权限的r变为了s

再来测试一下

root@centos8 ~ $ su - alex
Last login: Thu May 28 14:54:20 CST 2020 on pts/0
[alex@centos8 ~]$ cd /mnt/project/
[alex@centos8 project]$ touch test2
[alex@centos8 project]$ ll test2
-rw-rw-r--. 1 alex project_test 0 May 28 15:15 test2     <== 可以发现,现在新建的文件用户组是project_test,这样一来,组内成员都可以互相修改成员的文件了.

项目开发时候,经常会设置组ID(SGID)权限

一般常用情景是多个用户为同一个用户组,并共同拥有目录的使用权.

*参考 鸟哥的linux私房菜 p207

最新文章

  1. 多线程条件通行工具——CountDownLatch
  2. Wireshark抓包分析/TCP/Http/Https及代理IP的识别
  3. MVC, MVP, MVVM比较以及区别(上)
  4. Java开发中经典的小实例-(100能被3整除的数打印出来)
  5. (转) A Survival Guide to a PhD
  6. effective c++ 条款12 copy all parts of an object
  7. Kafka 源代码分析之Log
  8. NYOJ--114--某种序列(大数)
  9. GIT常用命令(图片版)
  10. 01_JavaSE之OOP--面向对象(类和面向对象的简单认识)
  11. javaWeb学习之Listener监听
  12. LOJ #2731. 「JOISC 2016 Day 1」棋盘游戏(dp)
  13. python 生成器generator
  14. SoapUI简介及下载地址
  15. appium手机键盘实现方法
  16. 使用GPStracker自建卫星定位跟踪平台
  17. mt19937 -- 高质量随机数
  18. [luogu P1552] [APIO2012]派遣
  19. Python小白学习之路(三)—【数字功能】【字符串功能】
  20. nmap保存结果

热门文章

  1. 王玉兰201771010128《面向对象程序设计(java)》第一周学习总结
  2. RAC配置2个私网网卡使用HAIP服务
  3. 解释一下,@SpringBootApplication
  4. Map,HashMap五种遍历方法
  5. 对 getopts 的理解
  6. React-Native 爬坑爬坑
  7. ansible模块详解
  8. 前端练手小项目——网页版qq音乐仿写
  9. Android Studio常见对话框(普通对话框、单选对话框、多选对话框、进度条对话框、消息对话框、自定义对话框)
  10. 这些Java8官方挖过的坑,你踩过几个?