• Linux下文件及文件夹权限(学习笔记版)


    本文遵循 CC 4.0 BY-SA 版权协议

    注意:本文为学习笔记版,只记录个人觉得重要的部分,内容较为片面。

    Linux 下文件及文件夹的权限可以表示为rwx这三个字符,r代表read,w代表write,x代表excute。

    其中,rwx分别可以用数字来表示,即4,2,1。  4代表r,2代表w,1代表x。

    下图引自:https://blog.csdn.net/lv8549510/article/details/85406215

    其中,对于文件和文件夹来说“rwx”的意义有区别:

    对于文件:

    r   代表是否可以读取文件内容;

    w  代表可以修改文件内容,包括添加文件内容,删除文件内容,清空文件内容(不能删除文件,删除文件的权限要看文件所属的文件夹的权限,参看下文内容)

    x   代表是否可以执行该文件。(这个权限只对可执行文件有限,如果不是可执行文件即使有x权限也并不会执行成功,这里的可执行文件包括二进制文件也包括脚本文件和shell文件)

    对于文件夹:

    r   代表读取到文件夹下文件名称(不代表能够读取到文件夹下文件的其他信息,如:大小,创建日期,文件权限等信息,关于文件的信息需要有进入到文件夹下的权限,即“x”权限)

    w  代表对文件夹下的文件进行创建、重命名、删除等,该权限不包括对文件内容的修改。有文件夹的w权限,但是没有文件夹下文件的rwx权限,我们虽然不能修改文件夹下文件的内容但是我们可以删除该文件。

    x   代表是否能够进入到文件夹下的权限。

    有文件夹的r权限可以读取到文件夹下有哪些文件,但是不能读取到文件夹下文件的其他信息(如:大小,创建日期,文件权限等信息)。

    有文件夹的rx权限,可以读取到文件夹下有哪些文件及其其他信息(如:大小,创建日期,文件权限等信息)

    只有文件夹的x权限,此时虽然没有文件夹的rw权限但是如果知道文件夹下文件名同时该文件可读我们也是可以读取该文件夹下的文件内容的,但是只有文件夹的r权限而没有x权限虽然能读到文件夹下文件的名但是无法读取文件夹下文件内容:

    下段引自:https://blog.csdn.net/guozan523/article/details/4517790

    对于一个目录,如果设置了“read”标志,您可以列出目录的内容;“write”表示您可以在目录中创建文件,“execute”表示您可以进入该目录并访问内部的任何子目录。没有“execute”标志,目录内的文件系统对象是不可访问的。没有“read”标志,目录内的文件系统对象是不可查看的,但是只要有人知道磁盘上对象的完整路径,就仍然可以访问目录内的对象。

    ======================================

    说明下:在没有设置特殊权限时,对于可执行文件来说不论其文件的所属用户和用户组是什么,在运行时top中所显示的用户和用户组都是调用者的。

    特殊权限

    其实文件和文件夹权限除了 rwx  以外还有  suid  ,   guid,   sticky    三个权限。如果用数字表示,其中suid是4、sgid是2、stricky粘滞位是1。一个文件或文件夹的权限一般可以用四个数字来表示0777是不考虑特殊权限时最高权限,考虑特殊权限的话则是7777。如果用字母表示不考虑特殊权限则是rwx,rwx,rwx,如果考虑特殊权限可以写为rwsrwsrwt,其中一个s表示suid,第二个s表示guid,t表示sticky,当然如果考虑特殊权限的话也可以写为rwSrwSrwT。

    s与S  的区别在于若是用户u 或用户组g 没有执行权限(x)  则其附加权限为  S , 若是有x(执行权限) 则为 s 。

    t与T  的区别在于若是其他组o 没有执行权限(x)  则其附加权限为  T , 若是有x(执行权限) 则为 t 。

     (下面内容引自CSDN博主「白小黑..」的原创文章,遵循CC 4.0 BY-SA版权协议:https://blog.csdn.net/weixin_42711549/article/details/81156370

    1.suid 冒险位

    (1)作用

    只针对与二进制可执行文件

    本权限仅在执行该程序的过程中有效

    执行者将具有该程序所有者的权限

    (2) 设定方式

    chmod u+s file /dir 或 chmod 4xxx file/dir

    例子:

    在没设定冒险位之前先 执行 watch  并查看其进程的所有者为 root

    查看进程权限:

    ps ax -o comm,user,group|grep watch

     

    修改/bin/watch 的所有者,设定冒险位,执行watch ,查看其进程的所有者改为 student

    sudo chown  student  /usr/bin/watch

    sudo  u+s  /usr/bin/watch

    查询此时/bin/watch文件权限:

    root@rootroot:/tmp# ll /usr/bin/watch
    -rwxr-xr-x 1 student root 22952 Aug 9 2019 /usr/bin/watch*

    再次执行watch应用:

    查看进程权限:

    ps ax -o comm,user,group|grep watch

    结果:

    watch   student    root

    个人添加的例子:

    suid的设置不仅可以针对二进制可执行文件,也可以针对脚本文件,主要区别是针对二进制执行文件的话设置了suid后只要保证调用的用户具有x权限即可,但是如果是脚本文件设置suid后不仅调用用户需要有x权限也得有r权限。毕竟脚本文件不是直接执行的而是需要读取内容给解释器的,所以需要调用用户有r权限。

    如:x.c 文件

    #include<stdio.h>
    int main(){
    printf("hello world \n");
    return 0;}

    gcc x.c

    赋予二进制文件 x 权限后即可执行:

    对于脚本文件在设置suid后调用用户必须有rx权限,只有x权限是不行的,如:

    需要注意的是suid虽然可以给文件夹进行设置但是没有任何其他特殊作用。

    2.sgid 强制位

    (1)作用

    对文件:只针对二进制可执行文件,当文件上有sgid时任何执行此文件产成的进程都属于文件的组

    对目录:当目录上有sgid权限时任何人在此目录中建立的文件都属于目录的所有组

    (2)设定方式

    chmod g+s file /dir 或 chnod 2xxx file/dir

    3.sticky     粘制位

    (1)作用

        只针对目录生效,当一个目录上有sticky权限时,在这个目录中的文件只能被文件的所有者删除

    (2)设定方式

         chmod o+t  dir 或  chmod 1xxx dir

    在设置了 sticky位的文件夹下面的文件或文件夹都只能被所属用户删除,即使这些文件夹和文件的权限为777,但是由于其父目录设置了sticky位也只能被所属用户删除,其他用户无法删除。

    需要注意的是一个文件夹设置了sticky权限只会影响该目录下的文件及这一层的文件夹,如果带有sticky的文件夹下的文件夹不具备sticky,那么sticky的文件夹下的文件夹不会对其下的文件或文件夹有sticky限制,或者说sticky不具备传递性。

     ==================================

    引自:https://www.cnblogs.com/wangtao-blog/p/11156297.html

    目录如果启用了目录的“sgid”标志,在目录内创建的任何文件系统对象将继承目录的组。当您需要创建一个属于同一组的一组人使用的目录树时,这种特殊的功能很管用。只需要这样做:

    # mkdir /home/groupspace
      
    # chgrp mygroup /home/groupspace
      
    # chmod g+s /home/groupspace

    一般来说,只要对一个目录有写访问权,任何人都可以重命名或删除该目录中的文件。对于个别用户使用的目录,这种行为是很合理的。但是,对于很多用户使用的目录来说,尤其是 /tmp 和 /var/tmp,这种行为可能会产生麻烦。因为任何人都可以写这些目录,任何人都可以删除或重命名任何其他人的文件 — 即使是不属于他们的!显然,当任何其他用户在任何时候都可以输入“rm -rf /tmp/*”并损坏每个人的文件时,很难把 /tmp 用于任何有意义的文件。所幸,Linux 有叫做“粘滞位”(sticky bit)的东西。当给 /tmp 设置了粘滞位(用 chmod +t),唯一能够删除或重命名 /tmp 中文件的是该目录的所有者(通常是 root 用户)、文件的所有者或 root 用户。

    s与S  的区别在于若是用户或用户组没有执行权限(x)  则其附加权限为  S 。 若是有x(执行权限) 则为 s 。

    我们的附加权限也可以用数字表示,当我们写三个数字的时候默认是属主属组和其他用户的权限;但是当我们写四个数字的时候,后三个默认还是属主属组和其他用户的权限,但是第一个数字就代表附加权限,其中suid是4、sgid是2、粘滞位是1

     ==================================

     以下内容引自:

    版权声明:本文为CSDN博主「绿夜」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/lv8549510/article/details/85406215

    三种特殊权限suid、sgid、sticky(sticky权限工作环境中相对常用)

    1.  suid

    作用:给一个用户继承二进制程序所有者拥有的权限

    suid权限位 位于所有者的执行权限位上,如果一个文件具有suid权限,则所有者执行位为s,文件表现为红色背景

     例:ll /usr/bin/passwd
         -rwsr-xr-x. 1 root root 27832 Jun 10  2014 /usr/bin/passwd
    
     给file文件增加suid权限
     
         chmod u+s file
         
         chmod 4755 file               suid数字法表示为4

    注: suid只适合作用在二进制程序上

    2.  sgid

    作用1:给一个用户继承二进制程序所有组拥有的权限

    sgid权限位 位于所有组的执行权限位,如果一个文件具有suid权限,则所有组的执行位为s,文件表现为黄色背景

    例:ll `which cat`
        -rwxr-sr-x. 1 root root 48568 Mar 23  2017 /bin/cat
    
    给file文件增加sgid权限
    
        chmod g+s file
        
        chmod 2755 file               sgid数字法表示为2

    作用2:作用在目录上时,使一个目录下的新建的文件继承目录的所属组

    3.  sticky

    作用:作用于目录上,此目录的文件只能被所有者删除

    sticky权限位 位于其他的执行权限位上,如果一个文件具有sticky权限,则其他的执行位为t,目录表现为绿色背景

    如:ll -d /tmp
        drwxrwxrwt. 17 root root 4096 Apr  4 10:02 /tmp
    
    给dir目录添加sticky权限
    
        chmod o+t dir
    
        chmod 1777 dir                sticky数字法表示为1

     ==================================

    参考:

    https://blog.csdn.net/guozan523/article/details/4517790

    https://blog.csdn.net/weixin_42711549/article/details/81156370

    本博客是博主个人学习时的一些记录,不保证是为原创,个别文章加入了转载的源地址还有个别文章是汇总网上多份资料所成,在这之中也必有疏漏未加标注者,如有侵权请与博主联系。
  • 相关阅读:
    >动态规划 4.26
    树链剖分+线段树求路径交
    PTA团体程序设计天梯赛-练习集 L2 网红点打卡攻略(模拟)
    PTA团体程序设计天梯赛-练习集 L2完全二叉树的层序遍历(递归)
    PTA团体程序设计天梯赛-练习集 L3-020 至多删三个字符 (dp)
    codeforces1509 D. Binary Literature (构造+指针)
    函数内容小结
    关于vim复制剪贴粘贴命令的总结-转
    GCC编译命令常用选项
    Ubuntu 和 windows1下文件夹共享的指令
  • 原文地址:https://www.cnblogs.com/devilmaycry812839668/p/15760716.html
Copyright © 2020-2023  润新知