一、权限介绍
在linux的世界里,一切皆文件,当我们对一个文件长格式显示时,会出现很多具体的信息,这里我以创建的一个临时文件为例:
从左往右的信息分别表示为:
(1)-rwxr-xr-x. :文件的权限
(2)1 :文件link数或者是目录中子目录的数量(在这里展示的是文件信息)
(3)root :所属用户
(4)root :所属用户组
(5)206 :文件大小(在这里文件大小为206字节)
(6)3 月 12 10:15 :最后一次被修改的日期和时间
(7)666 :文件名
接下来我们重点说一下第一个 文件的权限:
1、我们不难发现文件的权限位一共有十位,除第一位,剩下每三位为一组,这十位的含义如下图所示:
(1)第一位(如上图“-”)代表文件类型,这里列举出了一些基本常见的文件类型:
“-” :普通文件;
“d” :目录文件;
“c” :字符设备文件(鼠标、键盘等);
“b” :块文件(block、磁盘);
“p” :管道文件;
“s” :网络socket文件;
“l” :连接文件link(软链接文件);
(2)所有者权限 :文件和目录的所属用户,u-usr;
(3)所属组权限 :文件和目录的所属用户组,g-group;
(4) 其他用户权限 :除了所有者和所属组之外的用户;
2、如上图四个字母对应的含义:
(1)读(r) :Read 对文件而言,具有读取文件内容的权限;对目录来说,具有浏览该目录的权限;
(2)写(w) :write 对文件而言,具有修改文件内容的权限;对目录来说具有删除移动目录内文件的权限(文件的删除是上级目录写(w)权限赋予的,而不是文件的权限赋予的);
(3)执行(x):excute 对文件而言,具有执行文件的权限;对目录来说,具有进入目录的权限;
(4)—:表示不具有该项权限
3、我们再来看一下这张图片:
文件类型:普通文件;
所有者:rwx,有读、写、执行权限;
所属组:r-x,有读和执行权限,没有写权限;
其他用户:r-x,有读和执行权限,没有写权限 ;
二、基本权限命令
1、chmod
功能 : 修改文件的访问权限;
格式 : chmod [选项] 权限类别 文件名
注意 :(1)-R : 递归修改目录中的所有文件的权限;
(2)只有文件本身的所有者和root才能修改文件的权限;
权限模式:chmod 命令通常后面跟“[用户身份] [赋予方式] [权限类型] [文件名]”;
(1)用户身份:u :所有者(user ); g :所属组(group); o :其他人(other); a :全部身份(all);
(2)赋予方式 :+ :添加权限 ; - :删除权限 ; = :设置权限 ;
(3)权限类型 : r;w;x(前面已经介绍);
数字权限:因为每一种权限前后位置都是固定的,我们可以用一组二进制数0和1来表示,组合起来便有2^3=8种,如下图所示:
文件常用权限:
(1)644 :文件基本权限,代表所有者有读、写权限,而所属组和其他人只有读权限;
(2)755 :文件执行权限(同时也是目录基本权限),代表所有者有读、写、执行权限,而所属组和其他人拥有读、执行权限;
(3) 777 :最大权限(权限全开,有点危险);
目录的可用权限:
(1)0 :不具有任何权限;
(2)5 :基本的进入目录和目录浏览权限;
(3)7 :权限全开(对于目录权限全开危险性还是很小的);
2、chown
功能 : 修改文件和目录的所有者和所属组;
格式 : chmod [选项] 所有者:所属组 文件或者目录名;
注意 :(1)普通用户不能修改所有者和所属组,哪怕自己是文件的所有者,只能由root用户来操作;
(2)普通用户可以修改所有者是自己的文件的权限;
3、chgrp
功能 : 修改文件和目录的所属组;
格式 : chmod 文件或者目录名;
4、umask
对于文件和目录,我们需要了解一点,新建一个文件时,默认的最大权限是666;而新建一个目录时,默认的最大权限是777;
至于原因其实我前面也有提到:对于一个文件而言,如果新建时就直接默认赋予了最大权限,这是相当危险的事情,所以新建文件是没有执行权限(x)的;而对于目录而讲,执行权限(x)仅代表可以进入目录,危险性很小,因此这也是两者的不同之处。
功能:控制新建文件和目录权限的系统设置,当一个进程创建一个目录或者文件时,umask的值会影响其的默认权限。
计算方法:(1)首先我们需要查看一下umask的值(由3或4位八进制数组成),如下:
(2)计算umask的值和默认最大权限值的补码 ,将umask的值得每一位用最大权限值减去,例如目录777,umask为022,则补码为755;
(3)将最大权限值与umask补码进行按位与操作(记得先转化为二进制);
总结:当umask为022时,新建文件默认权限位644(rw-r--r--);,新建目录默认权限为755(rwxr-xr-x);
ps:当然有很多简单的计算方法,网上都有详细步骤。
三、实验
接下来我针对上面的权限进行一些简单的实验:
我首先添加一个新用户作为测试用户 test1 ;
1、chomd 测试
(1) 在root用户下,我在 /tmp目录下创建了test.txt目录,并且在该目录下创建了test.c文件,通过修改权限,发现在root用户下,是可以修改文件权限的(644—>755);
(2)在测试用户test1下,当我想修改 所有者为root用户的文件text.c时,提示我不允许,说明当普通用户登录时,当文件所有者不是自己,是不允许修改文件权限的(那当文件所有者是自己呢?答案是可以)。
2、chown 和 chgrp 测试
(1)在root用户下,将test.c文件的所有者和所属组修改为test1用户后,在test1用户下,修改所有者为test1文件的权限,这时就可以修改了。
(2)从上面我们可以发现,在root用户下,是可以修改文件的所有者和所属组的,那如果是在普通用户下呢?—>答案是不能,普通用户不能修改文件的所有者和所属组,哪怕是这个文件所有者是这个普通用户,因此只有root用户才可以修改。
(3)接下来我们做文件和目录的权限操作的测试,由于在root用户下,无论文件权限是什么都不会影响文件和目录的正常操作,因此这里我们用test1用户做测试。
>首先,在test用户下,创建一个测试目录111和在目录下创建一个文件aaa,并将文件和目录的权限一次设为0,如下图:
>这时发现文件和目录的任何基本操作都无法进行;
> 当我们为目录文件赋予 4 (可读)权限时,发现,发现目录仍然无法正常查看和切换;当我们为目录文件赋予 5 (可读可写)权限时,此时可以查看目录里的文件,并且可以切换到目录里;
> 在111目录下的aaa文件此时没有任何权限,进行不了读、写和执行操作,分别赋予读写操作后,分别可以进行查看文件、编辑文件等操作,但需要注意,此时依旧无法删除此文件;
> 当我们给111目录赋予 7(可读可写可执行)操作后,111目录里的文件aaa便可以删除,并且可以创建新文件了,因此影响文件是否可以删除的关键便是是否赋予上级目录“可写”操作;
> 为此我们知道了,对于文件而言,执行权限便是最高权限;但对于目录而言,可写权限才是最高权限。
标签:文件,用户,所有者,实验,Linux,权限,root,目录 From: https://blog.csdn.net/m0_64426380/article/details/136688419