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

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

现在开始操作:

创建用户组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

linux使用组ID(SGID)共享文件的更多相关文章

  1. 【转】linux 设置用户id 设置组id

    linux 设置用户id 设置组id   转自 linux 设置用户id 设置组id   最近看apue,简单记录对设置用户id理解(设置组id同理). 1. 相关的id好像很多,共有哪些? 文件2个 ...

  2. Linux id 命令 - 显示用户id和组id信息

    要登入一台计算机,我们需要一个用户名.用户名是一个可以被计算机识别的身份.基于此,计算机会对使用这个用户名的登陆的人应用一系列的规则.在Linux系统下,我们可以使用 id 命令. 什么是 id 命令 ...

  3. linux保存的设置用户/组ID(set-user-ID)的测试

    直接贴代码和结果 // FileName: id.cpp #include <iostream> #include <unistd.h> using namespace std ...

  4. Linux实际用户(组)ID,有效用户(组)ID,设置用户(组)ID

    实际用户(组)ID: 标识用户是谁,这两个字段在登录时取自口令文件中的登录项. 有效用户(组)ID: 决定了对文件的访问权限,通常有效用户(组)ID等于实际用户(组)ID,谁运行有效ID就等于谁的实际 ...

  5. linux:SUID、SGID详解

    linux:SUID.SGID详解 文章转载至:http://tech.ccidnet.com/art/2583/20071030/1258885_1.html 如果你对SUID.SGID仍有迷惑可以 ...

  6. Linux 特殊权限 SUID,SGID,SBIT

    setuid 和 setgid 分别是 set uid ID upon execution 和 set group ID upon execution 的缩写.我们一般会再次把它们缩写为 suid 和 ...

  7. 通过Zabbix API实现对主机的增加(无主机资产的添加和带主机资产的添加)、删除、获取主机id、获取模板id、获取组id

    config.yaml存储zabbix的信息(主要包括zabbix server的url .请求头部.登陆的用户名密码) Zabbix_Config: zabbix_url: http://192.1 ...

  8. APUE学习之三个特殊位 设置用户ID(set-user-ID),设置组ID(set-group-ID),sticky

    设置用户ID(set-user-ID),设置组ID(set-group-ID),sticky   set-user-ID: SUID      当文件的该位有设置时,表示当该文件被执行时,程序具有文件 ...

  9. 系统数据文件和信息之附加组ID

    4.2BSD引入了附加组ID(supplementary group ID)的概念.我们不仅可以属于口令文件记录项中组ID所对应的组,也可属于多达16个另外的组.文件访问权限检查相应被修改为:不仅将进 ...

随机推荐

  1. 使用websocket开发智能聊天机器人

    前面我们学习了异步web框架(sanic)和http异步调用库httpx,今天我们学习websocket技术. websocket简介 我们知道HTTP协议是:请求->响应,如果没有响应就一直等 ...

  2. js解析MarkDown语法

    1.问题描述: 我们使用MarkDown编辑器之后,比如我们写的MarkDown的语法是:  # 一级标题  ## 二级标题  ### 三级标题 这种语法我们最终要转换成HTML的格式最终要存入数据库 ...

  3. 彻底理解JavaScript ES6中的import和export

    0.前言 前端工程,在最早的时候是没有模块的概念的.随着前端工程的发展,前端开发也越来越规范化,更像是软件工程了.那么随之而来的,为了解决工程化的问题,就引入了模块的概念.但是在早期,因为ecmasc ...

  4. Wilson's theorem在RSA题中运用

    引言 最近一段时间在再练习数论相关的密码学题目,自己之前对于数论掌握不是很熟练,借此机会先对数论基本的四大定理进行练习 这次的练习时基于Wilson's theorem(威尔逊定理)在RSA题目中的练 ...

  5. 前端练手小项目——网页版qq音乐仿写

    qq音乐网页版仿写 一些步骤与注意事项 一开始肯定就是html+css布局和页面了,这段特别耗时间,耐心写完就好了 首先要说一下大致流程: 一定要先布局html!,所以一定要先分析页面布局情况,用不同 ...

  6. php实现ajax请求的方法

    php实现ajax请求的方法 Ajax页面:第一,了解底层逻辑,正是平常的1个提交在无刷新的条件下发出请求后完成回应,之后去针对你需要的条件来做动作. <!DOCTYPE html> &l ...

  7. Chisel3 - bind - Op, ReadOnly, 左值

    https://mp.weixin.qq.com/s/F_08jKFMoX9Gf_J_YpsDpg   两个数据变量进行某个操作(op),产生一个输出,这个输出存在一个匿名变量中.这个匿名变量就是以O ...

  8. Java实现 LeetCode 712 两个字符串的最小ASCII删除和(最长公共子串&&ASCII值最小)

    712. 两个字符串的最小ASCII删除和 给定两个字符串s1, s2,找到使两个字符串相等所需删除字符的ASCII值的最小和. 示例 1: 输入: s1 = "sea", s2 ...

  9. Java实现 LeetCode 481 神奇字符串

    481. 神奇字符串 神奇的字符串 S 只包含 '1' 和 '2',并遵守以下规则: 字符串 S 是神奇的,因为串联字符 '1' 和 '2' 的连续出现次数会生成字符串 S 本身. 字符串 S 的前几 ...

  10. Java实现蓝桥杯算法提高 哥德巴赫猜想

    试题 算法提高 哥德巴赫猜想 资源限制 时间限制:1.0s 内存限制:256.0MB 问题描述 根据所给函数(判断一个整数是否是素数),然后依托该函数,将输入N内的偶数(6-N),输出为两个素数之和( ...