zoukankan      html  css  js  c++  java
  • 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,执行权限):
    对文件而言,表示具有执行文件的权限;
    对目录而言,表示具有进入目录的权限

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


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


  • 相关阅读:
    [置顶] cocos2d-x 3.0游戏开发xcode5帅印博客教学 003.[HoldTail]游戏世界以及背景画面
    flex调用webservice中的datatable结果写入datagrid
    linux shell编程指南第十一章------------合并与分割2
    Java GUI使用exe4j打包exe文件
    最小生成树kruskal算法
    JQuery Datatable Ajax请求两次问题的解决
    其实我还好
    EFM32在使用IAR开发环境配置ICf文件以及指定程序存储地址空间
    hdu1151Air Raid
    UIWebview打开.txt文件中文乱码解决
  • 原文地址:https://www.cnblogs.com/zhongguiyao/p/9169366.html
Copyright © 2011-2022 走看看