[Linux实用命令]-13-如何设置文件特殊权限

引言

这篇文章介绍Linux文件系统三个特殊权限suid,sgid,sticky。

文章目录

0×1.如何查看当前用户创建文件默认权限

Linux在创建文件和文件夹时会默认分配一组权限,这个权限是根据系统的umask值来确定的,请看下面的实例:

					#查看普通用户的umask值
					qing@qingsword.com:~$ umask
					0022

					#使用普通用户创建一个文件夹和文件,查看它们的属性
					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
					0002
					

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/