linux使用组ID(SGID)共享文件
假如你有这样一个需求,一个小组内很多成员共同研究一个项目,为了这个项目我们需要分配一个具体的目录.
所有成员都拥有该目录的使用权限,可以互相操作成员的文件及内容.而且不允许其他人查看.
现在开始操作:
创建用户组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)共享文件的更多相关文章
- 【转】linux 设置用户id 设置组id
linux 设置用户id 设置组id 转自 linux 设置用户id 设置组id 最近看apue,简单记录对设置用户id理解(设置组id同理). 1. 相关的id好像很多,共有哪些? 文件2个 ...
- Linux id 命令 - 显示用户id和组id信息
要登入一台计算机,我们需要一个用户名.用户名是一个可以被计算机识别的身份.基于此,计算机会对使用这个用户名的登陆的人应用一系列的规则.在Linux系统下,我们可以使用 id 命令. 什么是 id 命令 ...
- linux保存的设置用户/组ID(set-user-ID)的测试
直接贴代码和结果 // FileName: id.cpp #include <iostream> #include <unistd.h> using namespace std ...
- Linux实际用户(组)ID,有效用户(组)ID,设置用户(组)ID
实际用户(组)ID: 标识用户是谁,这两个字段在登录时取自口令文件中的登录项. 有效用户(组)ID: 决定了对文件的访问权限,通常有效用户(组)ID等于实际用户(组)ID,谁运行有效ID就等于谁的实际 ...
- linux:SUID、SGID详解
linux:SUID.SGID详解 文章转载至:http://tech.ccidnet.com/art/2583/20071030/1258885_1.html 如果你对SUID.SGID仍有迷惑可以 ...
- Linux 特殊权限 SUID,SGID,SBIT
setuid 和 setgid 分别是 set uid ID upon execution 和 set group ID upon execution 的缩写.我们一般会再次把它们缩写为 suid 和 ...
- 通过Zabbix API实现对主机的增加(无主机资产的添加和带主机资产的添加)、删除、获取主机id、获取模板id、获取组id
config.yaml存储zabbix的信息(主要包括zabbix server的url .请求头部.登陆的用户名密码) Zabbix_Config: zabbix_url: http://192.1 ...
- APUE学习之三个特殊位 设置用户ID(set-user-ID),设置组ID(set-group-ID),sticky
设置用户ID(set-user-ID),设置组ID(set-group-ID),sticky set-user-ID: SUID 当文件的该位有设置时,表示当该文件被执行时,程序具有文件 ...
- 系统数据文件和信息之附加组ID
4.2BSD引入了附加组ID(supplementary group ID)的概念.我们不仅可以属于口令文件记录项中组ID所对应的组,也可属于多达16个另外的组.文件访问权限检查相应被修改为:不仅将进 ...
随机推荐
- 蓝桥杯 试题 历届试题 填字母游戏 博弈+dfs剪枝
问题描述 小明经常玩 LOL 游戏上瘾,一次他想挑战K大师,不料K大师说: “我们先来玩个空格填字母的游戏,要是你不能赢我,就再别玩LOL了”. K大师在纸上画了一行n个格子,要小明和他交替往其中填入 ...
- Java 8 中如何优雅的处理集合
Java 8 中如何优雅的处理集合(Stream API) 在Java中,集合和数组是我们经常会用到的数据结构,需要经常对他们做增.删.改.查.聚合.统计.过滤等操作.相比之下,关系型数据库中也同样有 ...
- thinkphp路由简介和设置使用
use think\Route; //静态路由 Route::rule('/', 'index/index/index'); Route::rule('test', 'index/index/test ...
- [JavaWeb基础] 027.JAVA中使用Axis搭建webservice-示例实现(二)
在上面的一个文章中,我们介绍了如何搭建Axis2的环境,也就是在MyEclipse中加入Axis的开发插件,那么,准备工作做好了之后,下面我们就用上一章的工具去搭建一个WebService的简单例子. ...
- (易忘篇)java基本语法难点1
switch后面使用的表达式可以是哪些数据类型 byte.short.char.int.枚举类型变量.String类型. 如何从控制台获取String和int型的变量,并输出 // 以下只关注重要点的 ...
- [源码解析]为什么mapPartition比map更高效
[源码解析]为什么mapPartition比map更高效 目录 [源码解析]为什么mapPartition比map更高效 0x00 摘要 0x01 map vs mapPartition 1.1 ma ...
- Java实现 LeetCode 771 宝石与石头(这是真暴力)
771. 宝石与石头 给定字符串J 代表石头中宝石的类型,和字符串 S代表你拥有的石头. S 中每个字符代表了一种你拥有的石头的类型,你想知道你拥有的石头中有多少是宝石. J 中的字母不重复,J 和 ...
- Java实现 LeetCode 662 二叉树最大宽度(递归)
662. 二叉树最大宽度 给定一个二叉树,编写一个函数来获取这个树的最大宽度.树的宽度是所有层中的最大宽度.这个二叉树与满二叉树(full binary tree)结构相同,但一些节点为空. 每一层的 ...
- Java实现 蓝桥杯 算法提高 秘密行动
试题 算法提高 秘密行动 资源限制 时间限制:1.0s 内存限制:256.0MB 问题描述 小D接到一项任务,要求他爬到一座n层大厦的顶端与神秘人物会面.这座大厦有一个神奇的特点,每层的高度都不一样, ...
- java实现最近距离
已知平面上的若干点的位置,存入一个List中.现在需要计算所有这些点中, 距离最近的两个点间的最小距离.请补全缺失的代码. 把填空的答案(仅填空处的答案,不包括题面)存入考生文件夹下对应题号的&quo ...