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

眼前多少难甘事,自古男儿当自强。这篇文章主要讲述Linux下文件及文件夹权限(学习笔记版)相关的知识,希望能为你提供帮助。
注意:本文为学习笔记版,只记录个人觉得重要的部分,内容较为片面。
Linux 下文件及文件夹的权限可以表示为rwx这三个字符,r代表read,w代表write,x代表excute。
其中,rwx分别可以用数字来表示,即4,2,1。  4代表r,2代表w,1代表x。
下图引自:



其中,对于文件和文件夹来说“rwx”的意义有区别:
对于文件:
r    代表是否可以读取文件内容;
w  代表可以修改文件内容,包括添加文件内容,删除文件内容,清空文件内容(不能删除文件,删除文件的权限要看文件所属的文件夹的权限,参看下文内容)
x    代表是否可以执行该文件。(这个权限只对可执行文件有限,如果不是可执行文件即使有x权限也并不会执行成功,这里的可执行文件包括二进制文件也包括脚本文件和shell文件)




对于文件夹:
r    代表读取到文件夹下文件名称(不代表能够读取到文件夹下文件的其他信息,如:大小,创建日期,文件权限等信息,关于文件的信息需要有进入到文件夹下的权限,即“x”权限)
w  代表对文件夹下的文件进行创建、重命名、删除等,该权限不包括对文件内容的修改。有文件夹的w权限,但是没有文件夹下文件的rwx权限,我们虽然不能修改文件夹下文件的内容但是我们可以删除该文件。
x    代表是否能够进入到文件夹下的权限。


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


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









对于一个目录,如果设置了“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版权协议:??javascript:void(0)??)


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 Aug92019 /usr/bin/watch*


再次执行watch应用:
【Linux下文件及文件夹权限(学习笔记版)】
查看进程权限:
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不具备传递性。
================================
目录如果启用了目录的“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


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


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

1.  suid
作用:给一个用户继承二进制程序所有者拥有的权限
suid权限位 位于所有者的执行权限位上,如果一个文件具有suid权限,则所有者执行位为s,文件表现为红色背景
例:ll /usr/bin/passwd
-rwsr-xr-x. 1 root root 27832 Jun 102014 /usr/bin/passwd

给file文件增加suid权限

chmod u+s file

chmod 4755 filesuid数字法表示为4

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


2.  sgid
作用1:给一个用户继承二进制程序所有组拥有的权限
sgid权限位 位于所有组的执行权限位,如果一个文件具有suid权限,则所有组的执行位为s,文件表现为黄色背景


例:ll `which cat`
-rwxr-sr-x. 1 root root 48568 Mar 232017 /bin/cat

给file文件增加sgid权限

chmod g+s file

chmod 2755 filesgid数字法表示为2



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


3.  sticky
作用:作用于目录上,此目录的文件只能被所有者删除
sticky权限位 位于其他的执行权限位上,如果一个文件具有sticky权限,则其他的执行位为t,目录表现为绿色背景
如:ll -d /tmp
drwxrwxrwt. 17 root root 4096 Apr4 10:02 /tmp

给dir目录添加sticky权限

chmod o+t dir

chmod 1777 dirsticky数字法表示为1

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







    推荐阅读