特殊权限:
普通用户在某些情况下,以其他身份(root,其它用户...)去运行命令。
SUID:文件拥有SUID后,文件的属主就变成了文件自己的属主。而不是启动者所属的属主。
SGID:文件拥有SGID后,文件的属组就变成了文件自己的属组。而不是启动者所属的属组。
Sticky: 在一个公共目录,每一个人都可以创建,删除自己的文件,但是不能删除别人的文件。
解释SUID
hadoop 对可执行文件/bin/cat 有rw权限。
hadoop运行cat的时候,会打开一个进程,进程的属主就是hadoop。
但是hadoop要访问一个文件,hadoop对这个文件没有访问权限,则以属主为hadoop的进程不能对这个文件进行访问。但是这个文件本身的属主root,有rw权限。
引入SUID,让普通用户在某些情况下,以其他身份(root,其它用户...)去运行命令。 hadoop可以利用此文件本身的属主root来对此文件进行rw。
举例:
[root@localhost ~]# su - hadoop
welcome aboard....
[hadoop@localhost ~]$ ls -l /etc/shadow
-r--------. 1 root root 1739 10月 30 18:38 /etc/shadow 其它用户没有读权限,hadoop账号开启的进程不能读。但是次文件自身的属主root有读的权限。
[hadoop@localhost ~]$ cat /etc/shadow
cat: /etc/shadow: 权限不够
将 /etc/shadow添加SUID权限,原来文件的属主有W的权限,就会变成s,否则变成S。(大小写)
[root@localhost ~]# ls -l /bin/cat
-rwxr-xr-x. 1 root root 54080 8月 20 2019 /bin/cat
[root@localhost ~]# chmod u+s /bin/cat
[root@localhost ~]# ls -l /bin/cat
-rwsr-xr-x. 1 root root 54080 8月 20 2019 /bin/cat
去查看/etc/shadow 这个文件。
[root@localhost ~]# ls -l /usr/bin/passwd 默认就有suid的权限。
-rwsr-xr-x. 1 root root 27856 4月 1 2020 /usr/bin/passwd 普通用户也需要这个权限,去改自己的密码,所有这个文件的属主也是有suid的权限的。
SGID
在目录下创建的文件,不是用户自己的基本组,而是目录的属组。
1个开发team,在/tmp/project/下进行开发。3个用户hadoop,hbase,hive,可以互相编辑彼此创建的文件。
[root@localhost ~]# groupadd developteam
[root@localhost ~]# chown -R :developteam /tmp/project/ 修改此目录的属组developteam。
[root@localhost ~]# ls -l /tmp/
总用量 4
-rw-r--r--. 1 root root 1273 10月 30 18:28 etc.largefiles
drwxr-xr-x. 2 root developteam 6 10月 30 20:09 project
drwxr-xr-x. 4 root root 73 10月 29 22:54 test
将3个用户的附加组都变成developteam
[root@localhost ~]# usermod -a -G developteam hadoop
[root@localhost ~]# usermod -a -G developteam hbase
[root@localhost ~]# usermod -a -G developteam hive
[root@localhost ~]# id hadoop
uid=1012(hadoop) gid=1012(hadoop) 组=1012(hadoop),1015(developteam)
[root@localhost ~]# chmod g+w /tmp/project/ 将组赋予写的权限。
[hbase@localhost project]$ ls -l ./ 此时因为文件属组都是自己,所有hadoop是不能编辑base组下的文件的。
总用量 0
-rw-rw-r--. 1 hbase hbase 0 10月 30 20:23 a.base
-rw-rw-r--. 1 hadoop hadoop 0 10月 30 20:22 a.hadoop
将组赋予S的权限。
[root@localhost ~]# chmod g+s /tmp/project/
[root@localhost ~]# ls -ld /tmp/project/
drwxrwsr-x. 2 root developteam 36 10月 30 20:23 /tmp/project/
在目录下创建的文件,不是用户自己的基本组,而是目录的属组。
[hbase@localhost project]$ ls -l ./
总用量 0
-rw-rw-r--. 1 hbase hbase 0 10月 30 20:23 a.base
-rw-rw-r--. 1 hadoop hadoop 0 10月 30 20:22 a.hadoop
-rw-rw-r--. 1 hadoop developteam 0 10月 30 20:29 b.hadoop
-rw-rw-r--. 1 hbase developteam 0 10月 30 20:28 b.hbase
Sticky
chmod o+t DIR
chmod o+t DIR
[root@localhost ~]# chmod o+t /tmp/project/
[root@localhost project]# ls -ld ./
drwxrwsr-t. 2 root developteam 67 10月 30 20:29 ./
同属一个组的文件hadoop不能删除hbase的文件。
[hbase@localhost project]$ rm -rf b.hadoop
rm: 无法删除"b.hadoop": 不允许的操作
[hbase@localhost project]$ ls -l ./
总用量 0
-rw-rw-r--. 1 hbase hbase 0 10月 30 20:23 a.base
-rw-rw-r--. 1 hadoop hadoop 0 10月 30 20:22 a.hadoop
-rw-rw-r--. 1 hadoop developteam 0 10月 30 20:29 b.hadoop
-rw-rw-r--. 1 hbase developteam 0 10月 30 20:28 b.hbase
[hbase@localhost project]$ rm -rf b.hbase 能删自己的。
所以文件的权限是4位:7777,第一位代表SUID,SGID, Sticky。001:Sticky 011:SGID and sticky,111:SUID,SGID, Sticky。