Linux文件和目录权限实战讲解

时间:2023-03-08 20:37:32
Linux文件和目录权限实战讲解

一 相关课程回顾
1.1 linux文件类型
当执行ls -l或ls -la 命令后显示的结果中
最前面的第2~10个字符是用来表示文件权限

第一个字符一般用来区分文件和目录;

d:表示是一个目录,事实上在ext2fs中,目录是一个特殊的文件。
-:表示这是一个普通的文件
l:表示这是一个符号链接的文件
b、c:分别表示区块设备和啊的外围设备,是特殊类型的文件
s、p:这些文件关系到系统的数据结构和管道

1.2 文件和目录的属性
[root@localhost oldboy]# ls -lhi
total 16K
810404 -rwSr--r-- 1 root root    0 May  2 06:59 comment.txt
810403 -rwsr-sr-x 1 root root    0 May  2 06:49 ett.txt
810405 drwxr-xr-t 2 root root 4.0K May  2 07:04 zgy_dir

文字解释:
第一列:inode索引节点
第二列:文件类型及权限
第三列:硬链接个数
第四列:文件或目录所属的用户(属主)
第五列:文件或目录所属的用户所归属的组;
第六列:文件或目录的大小;
第七列、八、九列:文件或目录的修改时间
第十列:实际的文件名或目录名

二 linux文件及目录权限精华总结

4.2 权限位说明及表示方法
    Linux文件或目录的权限位是9个权限位来控制(暂不考虑setuid,setgid等),每三位为一组,
    他们分别是文件属主(Owner)的读写执行,用户组(group)的读写执行以及(Other)其他用户的读写执行;
文件属主:读r、写w、执行x
用户组:读r、写w、执行x
其他用户:读r、写w、执行x
如果权限位不可读,不可写,不可执行,则用-来表示。

chmod的数字方法的说明;
r  4
w  2
x  1
-  0

[root@localhost oldboy]# ls -l oldboy
-rwxr-xr-x 1 root root 5 May  1 09:57 oldboy   #查看oldboy的属性,我们看到oldboy的权限位是rwxr-xr-x,用数字表示是755
[root@localhost oldboy]# chmod 644 oldboy
[root@localhost oldboy]# ls -l oldboy
-rw-r--r-- 1 root root 5 May  1 09:57 oldboy   #查看oldboy的属性,我们看到oldboy的权限位是rw-r-r--,用数字表示是644

Linux普通文件的读、写、执行权限说明:
可读r:表示具有读取阅读文件内容的权限
可写w:表示具有新增、修改文件内容的权限;(特别提醒:删除或修改、移动的权限受父目录的权限控制)
可执行x:表示具有执行文件的权限
 
Linux目录的读、写、执行权限说明:
进入目录的权限:x
浏览目录的权限:r
修改目录内文件的权限:w

Linux文件与目录权限对比说明
r(read,读取权限):
对文件而言,表示具有读取阅读文件内容的权限;
对目录而言,表示具有浏览目录的权限(注意:与进入目录的权限不同)

w(write,写入权限):
对文件而言,表示具有新增、修改文件内容的权限(注意:删除和移动文件和文件本身属性无关);
对目录而言,表示具有删除、一定目录内的权限。如果要在目录中创建文件或目录必须有x权限

x(Execute,执行权限):
对文件而言,表示具有执行文件的权限;
对目录而言,表示具有进入目录的权限

-(无任何权限)
若对应位置权限为字符”-”,表示对应用户没有读、写、执行的任何权限。

特别注意:
    当删除或移动一个文件或目录,仅与该文件与目录所在的上一层目录权限有关,与该文件本身属性无任何关系。
    对于文件来说,写文件是修改文件,而不是删除文件,因此写文件是与该文件的本身属性有关系的。

三 做测试文件及目录的前提准备
测试:
添加两个用于测试的普通用户
[root@localhost oldboy]# useradd zgy
use[root@localhost oldboy]# useradd etiantian

建立两个目录,分别属于刚刚创建的两个用户和组
[root@localhost ~]# mkdir -p /zgy
[root@localhost ~]# mkdir -p /etiatian
[root@localhost ~]# chown -R zgy.zgy /zgy
[root@localhost ~]# chown -R etiantian.etiantian /etiantian/

在两个目录下分别建立文件ett-zgy

[root@localhost ~]# touch /zgy/ett-zgy
[root@localhost ~]# touch /etiantian/ett-zgy

当前两个目录以及目录下文件的权限分别为
[root@localhost ~]# ls -ld /zgy/ /etiantian/
drwxr-xr-x 2 etiantian etiantian 4096 May  2 09:16 /etiantian/
drwxr-xr-x 2 zgy       zgy       4096 May  2 09:05 /zgy/
[root@localhost ~]# ls -l /zgy/ /etiantian/
/etiantian/:
total 4
-rw-r--r-- 1 root root 0 May  2 09:16 ett-zgy

/zgy/:
total 4
-rw-r--r-- 1 zgy zgy 0 May  2 09:15 ett-zgy

下面从root切换到zgy用户下,然后测试etiantian目录对zgy用户的限制
[root@localhost ~]# su - zgy
[zgy@localhost ~]$ whoami
zgy
[zgy@localhost ~]$ ls -ld /etiantian/
drwxr-xr-x 2 etiantian etiantian 4096 May  2 08:26 /etiantian/
根据etiantian目录的权限,我们看到zgy用户对于etiantian目录来说属于other组,因此,权限看9位(rwxr-xr-x)当中的最后三位(r-x)。
所以,可以推测,zgy对该目录拥有读(即浏览目录)和执行(即进入目录)的权限,无写的权限。

三、测试zgy对非自己拥有的目录etiantian内的文件的控制权限。
gy@localhost ~]$ ls -ld /etiantian/
drwxr-xr-x 2 etiantian etiantian 4096 May  2 08:26 /etiantian/
[zgy@localhost ~]$ cd /etiantian/   #可以进入目录,验证了执行(即进入目录)的权限
[zgy@localhost etiantian]$ ls -l /etiantian/  #可以浏览目录,验证了拥有读(即浏览目录)的权限
total 4
-rw-r--r-- 1 root root 0 May  2 08:26 ett-zgy

分析下:
根据上面总结的内容,755对于zgy来说就看最后三位,r-x权限,因此zgy对该目录拥有读(即浏览目录)和执行(即进入目录)的权限,均得到了验证

关于这里我们可以得出一个前面总结的有关目录的结论:
Linux普通文件的读、写、执行权限说明:
可读r:表示具有读取阅读文件内容的权限
可执行x:表示具有执行文件的权限
 
 
下面在测试zgy用户删除/etiantian目录下非自身属主或组的文件的权限;
[zgy@localhost etiantian]$ rm -f ett-zgy
rm: cannot remove `ett-zgy': Permission denied   #可以浏览,但不可以删除,验证了无写的权限
 
切换到root用户
[root@localhost ~]# chmod o+wx /etiantian/ett-zgy
[root@localhost ~]# ls -l /etiantian/
total 4
-rw-r--rwx 1 root root 0 May  2 09:45 ett-zgy

切换到zgy用户:
[zgy@localhost etiantian]$ ll
total 4
-rw-r--rwx 1 root root 0 May  2 09:45 ett-zgy
[zgy@localhost etiantian]$ rm -f ett-zgy
rm: cannot remove `ett-zgy': Permission denied

再次切换到root:
[root@localhost ~]# chmod 777 /etiantian/ett-zgy

再次切换到zgy:
[zgy@localhost etiantian]$ ll
total 4
-rwxrwxrwx 1 root root 0 May  2 09:45 ett-zgy   #权限已经是777
[zgy@localhost etiantian]$ rm -f ett-zgy
rm: cannot remove `ett-zgy': Permission denied  #依然不能删除

关于这里我们得出一个重要的结论:
删除或移动一个文件,与该文件的上层目录权限有关,与该文件本身的属性无关,即使是777也不能删除或移动。

进一步验证上面的推断:
[root@localhost ~]# chmod o+w /etiantian/
[root@localhost ~]# ls -ld /etiantian/
drwxr-xrwx 2 etiantian etiantian 4096 May  2 09:45 /etiantian/
[root@localhost ~]# ll /etiantian/ett-zgy
-rw-r--r-- 1 root root 0 May  2 09:45 /etiantian/ett-zgy

[zgy@localhost etiantian]$ cd  ../
[zgy@localhost /]$ ls -ld /etiantian/
drwxr-xrwx 2 etiantian etiantian 4096 May  2 09:45 /etiantian/
[zgy@localhost /]$ ll /etiantian/
total 4
-rw-r--r-- 1 root root 0 May  2 09:45 ett-zgy
[zgy@localhost /]$ rm -f /etiantian/ett-zgy

[root@localhost ~]# cd /etiantian/
[root@localhost etiantian]# touch ett-zgy
[root@localhost etiantian]# chmod 000 ett-zgy

[zgy@localhost etiantian]$ ll
total 4
---------- 1 root root 0 May  2 10:07 ett-zgy
[zgy@localhost etiantian]$ rm -f ett-zgy

重复下结论:
1.删除或移动一个文件,仅与该文件的上层目录权限有关,与该文件本身的属性无关,即使是777也不能删除或移动。
2.对于目录,可写:具有修改,移动或删除目录内文件的权限

继续思考,前面我们授权使用的是chmod o+w /etiantian,也就是,other用户组增加了w,而原来是r-x,加完后权限就是rwx了。
现在我们要测试下,仅有-w-看一下可不可以做到删除ett-zgy    
1.
[root@localhost /]# chmod 752 /etiantian/
[root@localhost /]# ls -ld /etiantian/
drwxr-x-w- 2 752 etiantian 4096 May  2 10:07 /etiantian/

[zgy@localhost etiantian]$ ll -ld /etiantian/
drwxr-x-w- 2 752 etiantian 4096 May  2 10:07 /etiantian/
[zgy@localhost etiantian]$ ls -l /etiantian/
ls: /etiantian/: Permission denied
[zgy@localhost etiantian]$ cd /etiantian/
-bash: cd: /etiantian/: Permission denied
[zgy@localhost etiantian]$ rm -f /et
etc/       etiantian/
[zgy@localhost etiantian]$ rm -f /etiantian/ett-zgy
rm: cannot remove `/etiantian/ett-zgy': Permission denied

2.
[root@localhost /]# chmod 756 /etiantian/
[root@localhost /]# ls -ld /etiantian/
drwxr-xrw- 2 756 etiantian 4096 May  2 10:07 /etiantian/
[root@localhost /]# cd /etiantian/
[root@localhost etiantian]# ls -ld /etiantian/
drwxr-xrw- 2 752 etiantian 4096 May  2 10:07 /etiantian/
[root@localhost etiantian]# touch ett-zgy

[zgy@localhost etiantian]$ ls -l /etiantian/
total 0
?--------- ? ? ? ?            ? ett-zgy
[zgy@localhost etiantian]$ rm -f /etiantian/ett-zgy
rm: cannot remove `/etiantian/ett-zgy': Permission denied

3.
[root@localhost etiantian]# chmod 753 /etiantian/
[root@localhost etiantian]# ls -ld /etiantian/
drwxr-x-wx 2 752 etiantian 4096 May  2 10:23 /etiantian/

[zgy@localhost etiantian]$ ls -l /etiantian/
ls: /etiantian/: Permission denied
[zgy@localhost etiantian]$ cd /etiantian/
[zgy@localhost etiantian]$ rm -f ett-zgy

再重复下结论:
1.删除或移动一个文件,仅与该文件的上层目录权限有关,与该文件本身的属性无关,即使是777也不能删除或移动。
2.对于目录,可写:具有修改,移动或删除目录内文件的权限,但是必须同时又x权限才可以。

四、测试oldboy浏览非自己拥有的目录etiantian的权限
4.1 测试授权etiantian目录700权限
即(用户组列的权限---),other权限列(---),整个权限drwx------
[root@localhost ~]# chmod 700 /etiantian/  #root下给上级目录etiantian 700权限
[root@localhost ~]# ls -ld /etiantian/
drwx------ 2 root etiantian 4096 May  2 10:28 /etiantian/
[root@localhost ~]# cd /etiantian/
[root@localhost etiantian]# touch ett-oldboy
[root@localhost etiantian]# ll /etiantian/
total 4
-rw-r--r-- 1 root root 0 May  4 07:54 ett-oldboy

[root@localhost ~]# su - zgy
[zgy@localhost ~]$ whoami
zgy
[zgy@localhost ~]$ ls -ld /etiantian/
drwx------ 2 root etiantian 4096 May  2 10:28 /etiantian/
[zgy@localhost ~]$ ls -l /etiantian/    #zgy用户下测试
ls: /etiantian/: Permission denied  #不能浏览目录
[zgy@localhost ~]$ cd /etiantian/  #也不能进入目录
-bash: cd: /etiantian/: Permission denied  
[zgy@localhost ~]$ rm -f /etiantian/ett-oldboy  #更不能删除目录选文件
rm: cannot remove `/etiantian/ett-oldboy': Permission denied

4.2 继续测试:etiantian 701权限
即(用户组列的权限---),other权限列(--x),整个权限drwx-----x

[root@localhost etiantian]# chmod 701 /etiantian/  ##root下给上级目录etiantian 701权限
[root@localhost etiantian]# ls -ld /etiantian/
drwx-----x 2 752 etiantian 4096 May  4 07:54 /etiantian/

[zgy@localhost ~]$ ls -ld /etiantian/
drwx-----x 2 752 etiantian 4096 May  4 07:54 /etiantian/
[zgy@localhost ~]$ ls -l /etiantian/
ls: /etiantian/: Permission denied
[zgy@localhost ~]$ cd /etiantian/  #进入目录-->  #zgy用户下测试
[zgy@localhost etiantian]$ ls -l   #不能浏览目录
ls: .: Permission denied
[zgy@localhost etiantian]$ rm -f /etiantian/ett-oldboy
rm: cannot remove `/etiantian/ett-oldboy': Permission denied
结论:Linux目录的读、写、执行权限说明,可执行x:表示具有进入目录的权限。因此,可以进入目录。但因为没有可读权限r,所以不具有浏览目录的权限。又因为没有可写w,所以,也不具有删除etiantian目录下文件的权限。

4.3 继续测试:etiantian 702 权限
即(用户组列的权限---),other权限列(-w-),整个权限drwx----w-

[root@localhost etiantian]# chmod 702 /etiantian/
[root@localhost etiantian]# ls -ld /etiantian/
drwx----w- 2 752 etiantian 4096 May  4 07:54 /etiantian/

[zgy@localhost etiantian]$ cd ../
[zgy@localhost /]$ ll /etiantian/ -ld
drwx----w- 2 752 etiantian 4096 May  4 07:54 /etiantian/
[zgy@localhost /]$ ls -l /etiantian/   #无法浏览目录内容,因为无r权限导致
ls: /etiantian/: Permission denied
[zgy@localhost /]$ cd /etiantian/   #无法进入目录,因为无r权限导致
-bash: cd: /etiantian/: Permission denied
[zgy@localhost /]$ rm -f /etiantian/ett-oldboy  #这个很奇怪,有w权限,但是却删除不了,要想删除需要再加x权限
rm: cannot remove `/etiantian/ett-oldboy': Permission denied
[zgy@localhost /]$ touch /etiantian/oldboy   #也无法创建文件,因为没有进入权限,所以无法创建也是可以理解的
touch: cannot touch `/etiantian/oldboy': Permission denied
本节结论:
w(write,写入):对文件而言,具有新增、修改文件内容的权限;对目录来说,具有删除、一定目录内文件的权限。但是以上前提是必须要有执行(x)的权限。

4.4 继续测试 :etianatian 703权限
即(用户组列的权限---),other权限列(-wr),整个权限drwx----wx
[root@localhost etiantian]# chmod 703 /etiantian/
[root@localhost etiantian]# ls -ld /etiantian/
drwx----wx 2 752 etiantian 4096 May  4 07:54 /etiantian/
[root@localhost etiantian]# ls
ett-oldboy
[root@localhost etiantian]# ls -l /etiantian/
total 0
[root@localhost etiantian]# ls -ld /etiantian/
drwx----wx 3 752 etiantian 4096 May  4 08:28 /etiantian/

[zgy@localhost /]$ ls -l /etiantian/   #无r权限,因此无法浏览目录内容
ls: /etiantian/: Permission denied
[zgy@localhost /]$ cd /etiantian/  #有x权限,因此,可以进入目录
[zgy@localhost etiantian]$ ls -l  #无r权限,因此无法浏览目录内容
ls: .: Permission denied
[zgy@localhost etiantian]$ rm -f ett-oldboy  #有wx权限,因此可以删除文件
[zgy@localhost etiantian]$ mkdir oldboy
[zgy@localhost etiantian]$ touch ett  #有wx权限,可以创建文件
[zgy@localhost etiantian]$ ls -l ett  #可以浏览文件,但不能浏览目录内容
-rw-rw-r-- 1 zgy zgy 0 May  4 08:29 ett

4.5 继续测试 :etianatian 704权限
即(用户组列的权限---),other权限列(r--),整个权限drwx---r--

[root@localhost etiantian]# chmod 704 /etiantian/
[root@localhost etiantian]# ls -ld /etiantian/
drwx---r-- 2 752 etiantian 4096 May  4 08:29 /etiantian/
[root@localhost etiantian]# ls
ett

[zgy@localhost etiantian]$ cd ../
[zgy@localhost /]$ ls -ld /etiantian/
drwx---r-- 2 752 etiantian 4096 May  4 08:29 /etiantian/
[zgy@localhost /]$ ls -l /etiantian/   #可以浏览目录,因为有r权限,但是显示了一堆问号,最后的文件还是还是红底闪烁,很像软链接文件
total 0
?--------- ? ? ? ?            ? ett    #还有问号
[zgy@localhost /]$ cd /etiantian/  #无x权限,因此无法进入目录
-bash: cd: /etiantian/: Permission denied
[zgy@localhost /]$ rm -fr ett
rm: cannot remove directory `ett/test': Permission denied
rm: cannot remove `ett/oldboy': Permission denied
[zgy@localhost /]$ rm -fr /etiantian/ett
rm: cannot lstat `/etiantian/ett': Permission denied

4.6 继续测试 :etianatian 705权限
即(用户组列的权限---),other权限列(r-x),整个权限drwx---r-x

[root@localhost etiantian]# chmod 705 /etiantian/
[root@localhost etiantian]# ls -ld /etiantian/
drwx---r-x 2 752 etiantian 4096 May  4 08:29 /etiantian/

[zgy@localhost /]$ ls -l /etiantian/   #有r权限,因此可以浏览目录内容
total 4
-rw-rw-r-- 1 zgy zgy 0 May  4 08:29 ett
[zgy@localhost /]$ cd /etiantian/  #有x权限,因此可以进入目录
[zgy@localhost etiantian]$ ls -l
total 4
-rw-rw-r-- 1 zgy zgy 0 May  4 08:29 ett
[zgy@localhost etiantian]$ rm -f ett   #上级目录无w权限,无法删除
rm: cannot remove `ett': Permission denied
[zgy@localhost etiantian]$ touch ett-oldboy   #上级目录无w权限,无法创建文件
touch: cannot touch `ett-oldboy': Permission denied

4.7 继续测试 :etianatian 707权限
即(用户组列的权限---),other权限列(rwx),整个权限drwx---rwx
[root@localhost etiantian]# chmod 707 /etiantian/
[root@localhost etiantian]# ls -ld /etiantian/
drwx---rwx 2 752 etiantian 4096 May  4 08:29 /etiantian/

[zgy@localhost etiantian]$ cd ../
[zgy@localhost /]$ ls -l /etiantian/   #有r权限,因此可以浏览目录内容
total 4
-rw-rw-r-- 1 zgy zgy 0 May  4 08:29 ett
[zgy@localhost /]$ cd /etiantian/   #有x权限,因此可以进入目录
[zgy@localhost etiantian]$ ls -l
total 4
-rw-rw-r-- 1 zgy zgy 0 May  4 08:29 ett
[zgy@localhost etiantian]$ rm -f ett   #有wx权限,因此可以删除文件
[zgy@localhost etiantian]$ mkdir newfile  
[zgy@localhost etiantian]$ touch oldboy   #有wx权限,因此可以删除文件

五 linux文件及目录权限精华总结再重申

Linux普通文件的读、写、执行权限说明:
可读r:表示具有读取阅读文件内容的权限
可写w:表示具有新增、修改文件内容的权限;(特别提醒:删除或修改、移动的权限受父目录的权限控制)
可执行x:表示具有执行文件的权限
 
Linux目录的读、写、执行权限说明:
进入目录的权限:x
浏览目录的权限:r
修改目录内文件的权限:w

Linux文件与目录权限对比说明
r(read,读取权限):
对文件而言,表示具有读取阅读文件内容的权限;
对目录而言,表示具有浏览目录的权限(注意:与进入目录的权限不同)

w(write,写入权限):
对文件而言,表示具有新增、修改文件内容的权限(注意:删除和移动文件和文件本身属性无关);
对目录而言,表示具有删除、一定目录内的权限。如果要在目录中创建文件或目录必须有x权限

x(Execute,执行权限):
对文件而言,表示具有执行文件的权限;
对目录而言,表示具有进入目录的权限

-(无任何权限)
若对应位置权限为字符”-”,表示对应用户没有读、写、执行的任何权限。

特别注意:
    当删除或移动一个文件或目录,仅与该文件与目录所在的上一层目录权限有关,与该文件本身属性无任何关系。
    对于文件来说,写文件是修改文件,而不是删除文件,因此写文件是与该文件的本身属性有关系的。