Linux关于文件的特殊权限二

时间:2021-11-14 15:11:41
SGID: 运行某程序时,相应进程的属组是程序文件自身的属组,而不是启动者所属的基本组
格式: chmod g+s FILE
chmod g-s FILE
注意: 如果FILE本身原来就有执行权限,则SUID显示为s(小写),否则显示为S(大写)
举例常见场景:
公司内部有个开发团队develop team
有三个人hadoop,hbase和hive,他们有共同的使用目录/tmp/project
要求三个用户都能在这个目录下创建文件
由于三个用户创建的文件都属于同一个项目,所以三个用户都能查看和编辑对方的文件。
如何来实现?
[root@zhg ~]# useradd hive
[root@zhg ~]# useradd hbase
[root@zhg ~]# useradd hadoop
[root@zhg ~]# mkdir /tmp/project
[root@zhg ~]# groupadd developteam
[root@zhg ~]# chown -R :developteam /tmp/project/
[root@zhg ~]# usermod -a -G developteam hadoop
[root@zhg ~]# usermod -a -G developteam hbase
[root@zhg ~]# usermod -a -G developteam hive
[root@zhg ~]# id hadoop
显示结果: uid=502(hadoop) gid=502(hadoop) 组=502(hadoop),503(developteam)
下面切换至hadoop用户
[root@zhg ~]# su - hadoop
[hadoop@zhg ~]$ cd /tmp/project/
[hadoop@zhg project]$ ls -ld .
显示结果: drwxr-xr-x 2 root developteam 4096 3月   8 16:30 .
备注:发现属组没有写的权限
退出至root用户添加developteam组的写入权限
[hadoop@zhg project]$ exit
[root@zhg ~]# chmod g+w /tmp/project/
[root@zhg ~]# su - hadoop
[hadoop@zhg ~]$ cd /tmp/project/
[hadoop@zhg project]$ touch a.hadoop
[hadoop@zhg project]$ exit
[root@zhg ~]# su - hbase
[hbase@zhg ~]$ cd /tmp/project/
[hbase@zhg project]$ touch a.hbase
[hbase@zhg project]$ ls -l
显示结果: -rw-rw-r-- 1 hadoop hadoop 0 3月   8 16:43 a.hadoop
-rw-rw-r-- 1 hbase  hbase  0 3月   8 16:44 a.hbase
备注:现在为止用户都可以创建文件,但是不能相互查看修改,该如何做呢?
[hbase@zhg project]$ exit
[root@zhg ~]# chmod g+s /tmp/project/
[root@zhg ~]# ls -ld /tmp/project/
显示结果: drwxrwsr-x 2 root developteam 4096 3月   8 16:44 /tmp/project/
备注:此时组有了s权限,下面分别使用hadoop和hbase登录创建文件查看结果
[root@zhg ~]# su - hadoop
[hadoop@zhg ~]$ cd /tmp/project/
[hadoop@zhg project]$ touch b.hadoop
[hadoop@zhg project]$ exit
[root@zhg ~]# su - hbase
[hbase@zhg ~]$ cd /tmp/project/
[hbase@zhg project]$ touch b.hbase
[hbase@zhg project]$ ls -l
显示部分结果:
-rw-rw-r-- 1 hadoop developteam 0 3月   8 16:52 b.hadoop
-rw-rw-r-- 1 hbase  developteam 0 3月   8 16:52 b.hbase
备注:这样就能实现三个用户都能查看和编辑对方的文件
注意: 现在出现一个很大问题,三个用户都能查看和编辑对方的文件
但是还能删除对方文件
[hbase@zhg project]$ rm b.hadoop 
[hbase@zhg project]$ ls -l