引言
这篇文章介绍Linux文件系统三个特殊权限suid,sgid,sticky。
文章目录
- 0×1.如何查看当前用户创建文件默认权限
- 0×2.如何给文件添加suid权限
- 0×3.如何给文件夹添加sgid权限
- 0×4.如何给文件夹添加sticky权限
0×1.如何查看当前用户创建文件默认权限
Linux在创建文件和文件夹时会默认分配一组权限,这个权限是根据系统的umask值来确定的,请看下面的实例:
#查看普通用户的umask值
qing@qingsword.com:~$ umask
22
#使用普通用户创建一个文件夹和文件,查看它们的属性
qing@qingsword.com:~$ touch qingfile
qing@qingsword.com:~$ mkdir qingdir
qing@qingsword.com:~$ ls -a
drwxr-xr-x qingdir/
-rw-r--r-- qingfile
#文件的默认权限等于666减去umask查看到的值的后三位
# 666-022=644转换成权限就是-rw-r--r--
#文件夹的默认权限等于777减去umask查看到的值的后三位
# 777-022=755转换成权限就是drwxr-xr-x
#umask值决定了当前用户创建文件或文件夹时默认的权限分配,如果想修改umask值,在命令后面输入umask值的后三位,如下
qing@qingsword.com:~$ umask 002
qing@qingsword.com:~$ umask
2
0×2.如何给文件添加suid权限
首先简单的介绍一下suid权限的作用,被分配了suid权限的文件在执行的时候,将以文件所属用户的权限来运行。为了让大家更好的理解,请看下面的实例:
#Linux系统保存密码的shadow文件只有root用户拥有读写权限
qing@qingsword.com:~$ ls -l /etc/shadow
-rw-r----- 1 root shadow /etc/shadow
#既然这样,普通用户使用passwd命令是如何修改密码的呢?
#通过查看passwd文件的权限"-rwsr-xr-x"发现这个文件被分配了suid权限,这样,当普通用户使用这个文件来更改密码时,文件将以文件所属用户root的权限来运行,而root用户是能够对/etc/shadow做出修改的
qing@qingsword.com:~$ ls -l /usr/bin/passwd
-rwsr-xr-x 1 root root /usr/bin/passwd
给一个文件添加suid权限的方法:
#方法一
qing@qingsword.com:~$ sudo chmod u+s qingfile
qing@qingsword.com:~$ ls -l
drwxr-xr-x 2 qing qing qingdir
-rwSr--r-- 1 qing qing qingfile
#方法二,千位4代表了suid权限,后面的744对应了ugo
qing@qingsword.com:~$ sudo chmod 4744 qingfile
qing@qingsword.com:~$ ls -l
drwxr-xr-x 2 qing qing qingdir
-rwsr--r-- 1 qing qing qingfile
#在上面这个实例中,如果对应的权限是4644那么看到的权限位中的s就会大写成"-rwSr--r--",这就表明在S位没有x权限,如果S位有x权限,那么S会小写
0×3.如何给文件夹添加sgid权限
sgid权限用于文件夹,当一个文件夹设置sgid权限后,所有在这个文件夹下新建的文件,无论是哪个用户创建的,都被自动分配到设置了sgid权限的父文件夹所属组中,请看下面的实例:
#新建一个测试组testgroup,调整qingdir权限所属组为testgroup
qing@qingsword.com:~$ sudo groupadd testgroup
qing@qingsword.com:~$ sudo chgrp testgroup qingdir
#给qingdir添加sgid权限
qing@qingsword.com:~$ sudo chmod g+s qingdir
qing@qingsword.com:~$ ls -l
drwxr-sr-x 2 qing testgroup qingdir
#进入qingdir新建一个文件和文件夹*/
qing@qingsword.com:~$ cd qingdir/
qing@qingsword.com:~$ touch subtestfile
qing@qingsword.com:~$ mkdir subdir
#新建的文件夹和文件都被自动分配到了testgroup组中
qing@qingsword.com:~$ ls -l
drwxr-sr-x 2 qing testgroup subdir
-rw-r--r-- 1 qing testgroup subtestfile
#方法二,千位2代表sgid权限,755对应了ugo
qing@qingsword.com:~$ chmod 2755 qingdir
0×4.如何给文件夹添加sticky权限
如果一个用户对一个目录拥有rwx的权限,就意味着这个用户对这个目录拥有完全控制权,他可以删除这个目录下的所有文件及文件夹,而如果这个目录设置了sticky权限(Sticky Bit简称SBIT权限),对这个目录拥rwx权限的用户在这个目录下,只能删除和更改自己创建的文件和文件夹,不能删除和更改其他用户创建的文件和文件夹。
假设有两个用户bob和steven,他们被分配到ceo组,现在有一个testdir的文件夹属于ceo组,ceo组中的成员对这个文件夹拥有rwx权限,使用sticky权限对这个文件夹进行控制,让bob和steven在对自己创建的文件有完全控制权的同时,只能查看其他人在这个目录创建的文件,但不能修改和删除,请看下面的实例:
#创建ceo组
qing@qingsword.com:~$ sudo groupadd ceo
#创建bob和steven并将他们分配到ceo组中
qing@qingsword.com:~$ sudo useradd -g ceo bob
qing@qingsword.com:~$ sudo useradd -g ceo steven
#分别给bob和steven配置密码
qing@qingsword.com:~$ sudo passwd bob
qing@qingsword.com:~$ sudo passwd steven
#创建testdir文件夹并将它的所属组更改为ceo,给这个组添加rwx权限,现在ceo组中成员对这个目录拥有完全控制权
qing@qingsword.com:~$ sudo mkdir testdir
qing@qingsword.com:~$ sudo chgrp ceo testdir/
qing@qingsword.com:~$ sudo chmod g+rwx testdir/
#给testdir目录添加sticky权限(注意sticky权限是添加在others上的)
qing@qingsword.com:~$ sudo chmod o+t testdir/
#查看当前testdir目录的权限
qing@qingsword.com:~$ ls -ld testdir/
drwxrwxr-t 2 root ceo testdir/
#切换到用户bob,切换到testdir目录中(假设testdir目录路径为/home/qing/testdir),touch一个文件
qing@qingsword.com:~$ su - bob
bob@qingsword.com:~$ cd /home/qing/testdir
bob@qingsword.com:~$ touch bobfile
#退出bob,使用steven登录,切换到testdir文件夹中,尝试删除bob创建的文件*/
bob@qingsword.com:~$ exit
qing@qingsword.com:~$ su - steven
steven@qingsword.com:~$ cd /home/qing/testdir
steven@qingsword.com:~$ ls
bobfile
steven@qingsword.com:~$ rm -rf bobfile
rm: 无法删除"bobfile": 不允许的操作
#此时steven只有查看bob创建的文件或文件夹内容的权限,但无法删除和修改它们
#退出steven,使用root权限删除testdir的sticky权限,再次测试使用steven删除bob创建的文件,成功
steven@qingsword.com:~$ exit
qing@qingsword.com:~$ sudo chmod o-t testdir/
qing@qingsword.com:~$ su - steven
steven@qingsword.com:~$ cd /home/qing/testdir
steven@qingsword.com:~$ ls
bobfile
steven@qingsword.com:~$ rm -rf bobfile
#方法二,千位1代表sticky权限,775对应ugo
qing@qingsword.com:~$ sudo chmod 1775 testdir/
网友评论