一、RWX
- r(Read,读取):对文件而言,具有读取文件内容的权限;对目录来说,具有 浏览 目录的权限。
- w(Write,写入):对文件而言,具有新增,修改,删除文件内容的权限;对目录来说,具有新建,删除,修改,移动目录内文件的权限。
- x(eXecute,执行):对文件而言,具有执行文件的权限;对目录来说该用户具有进入目录的权限。
注意
- 目录的只读访问不允许使用cd进入目录,必须要有执行的权限才能进入。
- 只有执行权限只能进入目录,不能看到目录下的内容,要想看到目录下的文件名和目录名,需要可读权限。
- 一个文件能不能被删除,主要看该文件所在的目录对用户是否具有写权限,如果目录对用户没有写权限,则该目录下的所有文件都不能被删除,文件所有者除外
- 目录的w位不设置,即使你拥有目录中某文件的w权限也不能写该文件。
- linux是否有权限删除一个文件,取决于该用户是否对文件所在文件夹有写的权限。若有写权限,则可以删除该目录下的任一文件。
二、详细解读
-rwxr-xr-x 1 root wheel 430540 Dec 23 18:27 /bin/bash
2.1 首字母
字母 | 代表 |
---|---|
- | 常规文件 |
d | 目录 |
l | 符号链接 |
c | 字符专门设备文件 |
b | 块专门设备文件 |
p | 先进先出 |
s | 套接字 |
2.2 三个三元组
- 第一个三元字符组代表文件所有者的权限;
- 第二个代表文件的组的权限;
- 第三个代表所有其他用户的权限。
- 上面,r 表示允许读(查看文件中的数据),w 表示允许写(修改文件以及删除),x 表示允许“执行”(运行程序)。将所有这些信息放在一起,我们可以发现每个人都能够读该文件的内容和执行该文件,但是只允许文件所有者(root 用户)可以以任何方式修改该文件。因此,虽然一般用户可以复制该文件,但是只允许 root 用户更新或删除它。
2.3 查看当前用户和组
- 查看当前用户
whoami
- 查看当前用户所属组
groups
一个用户可能是多个组的组员
groups 用户名1 用户名2
可以一次查看多个指定用户所属的组
- 改变用户和组所有权
为了改变文件或其它文件系统对象的所有者或组,分别使用 chown 或 chgrp。这两个命令都要一个用户名或组名作参数,后面跟上一个或多个文件名。
chown root /etc/passwd
chgrp wheel /etc/passwd
您还可以用 chown 命令的另一种形式同时设置所有者和组:
chown root.wheel /etc/passwd
chown 和 chgrp 都有一个 -R 选项,该选项可以用来告诉它们递归地将所属权和组改变应用到整个目录树中。例如:
chown -R drobbins /home/drobbins
如果不加-R,则只会改变当前目录,目录中包含的文件或文件夹不会更表。
注意:除非您是超级用户,否则您不可以使用 chown,然而任何人都可以使用 chgrp 来将文件的组所有权改为他们所属的组。
三、chmod
3.1 加减权限
该操作chmod 示例已经影响到了所有三个三元组 — 用户、组和所有其他用户
chmod -x 文件/文件名 //减执行权限
chmod +r 文件/文件名 //加读权限
亦可指定,对于“用户”三元组使用 u,对于“组”三元组使用 g,对于“其他/每个人”使用 o
chmod go -x 文件/文件名 //给组及其他用户减少执行权限,该用户权限不动
定制化设定权限
chmod ugo=rwx 文件/文件名 //为三元组设定读写执行操作
chmod =rwx 文件/文件名 //同上
chmod u=rwx go=rx //此语句不成立,只能挨个元组设定
-R 同样延申至子目录
3.2 数字设定权限(常用)
直到现在为止,我们使用了叫做“符号”的模式来用 chmod 指定权限的改变。然而,指定权限还有一种普遍使用的方法 — 使用 4 位八进制数。使用叫做数字权限语法的语法,每一位代表一个权限三元组。例如,在 1777 中,777 设置本章我们所讨论的“owner”、“group”和“other”标志。1 用来设置专门的权限位,我们将在本章的结束部分讲到。
简称 | 操作 | 数字 |
---|---|---|
r | 读 | 4 |
w | 写 | 2 |
x | 执行 | 1 |
举例:7=4+2+1,读写执行,5=4+1,读执行。各种组合方式。
rwx 7 rw- 6 r-x 5 r-- 4 -wx 3 -w- 2 --x 1 --- 0
四、umask
当进程创建了新文件时,它指定新文件应该具有的权限。通常,所请求的模式是 0666(每个人可读和可写),它比我们希望的具有更多的权限。幸运的是,不管什么时候创建了新文件,Linux 将参考叫做“umask”的东西。系统用 umask 值来将初始指定的权限降低为更合理、更安全的权限。您可以通过在命令行中输入 umask 来查看您当前的 umask 设置:
umask
root用户一般为0022,普通用户为0002
Linux 系统上,umask 的缺省值一般为 0022,它允许其他人读您的新文件(如果他们可以得到它们),但是不能进行修改。为了在缺省的情况下使新文件更安全,您可以改变 umask 设置: $ umask 0077umask 将确保组和其他用户对于新创建的文件绝对没有任何权限。那么,umask 怎样工作呢?与文件的“常规”权限不同,umask 指定应该关闭哪一个权限。我们来参阅一下我们的“模式到数字”映射表,从而使我们可以理解 0077 的 umask 的意思是什么: 模式 数字 rwx 7 rw- 6 r-x 5 r-- 4 -wx 3 -w- 2 --x 1 --- 0 使用该表,0077 的最后三位扩展为 ---rwxrwx。现在,请记住 umask 告诉系统禁用哪个权限。根据推断,我们可以看到将关闭所有“组”和“其他”权限,而“用户”权限将保留不动。
五、suid 和 sgid
当您最初登录时,将启动一个新的 shell 进程。您已经知道,但是您可能还不知道这个新的 shell进程(通常是 bash)使用您的用户标识运行。照这样,bash 程序可以访问所有属于您的文件和目录。事实上,作为用户,我们完全依靠其它程序来代表我们执行操作。因为您启动的程序继承了您的用户标识,因此它们不能访问任何不允许您访问的文件系统对象。例如,一般用户不能直接修改 passwd 文件,因为“write”标志已经对除“root 用户”以外的每个用户关闭:
ls -l /etc/passwd
-rw-r--r-- 1 root wheel 1355 Nov 1 21:16 /etc/passwd
但是,一般用户确实需要在他们需要改变其密码的任何时候,能够修改 /etc/passwd(至少间接地)。但是,如果用户不能修改该文件,究竟怎样完成这个工作呢?
Suid
幸好,Linux 权限模型有两个专门的位,叫做“suid”和“sgid”。当设置了一个可执行程序的“suid”这一位时,它将代表可执行文件的所有者运行,而不是代表启动程序的人运行。现在,回到 /etc/passwd 问题。如果看一看 passwd 可执行文件,我们可以看到它属于 root 用户:
$ ls -l /usr/bin/passwd
-rwsr-xr-x 1 root wheel 17588 Sep 24 00:53 /usr/bin/passwd
您还将注意到,这里有一个 s 取替了用户权限三元组中的一个 x。这表明,对于这个特殊程序,设置了 suid 和可执行位。由于这个原因,当 passwd 运行时,它将代表 root 用户执行(具有完全超级用户访问权),而不是代表运行它的用户运行。又因为 passwd 以 root 用户访问权运行,所以能够修改 /etc/passwd 文件,而没有什么问题。
suid/sgid 告诫说明
我们看到了 suid 怎样工作,sgid 以同样的方式工作。它允许程序继承程序的组所有权,而不是当前用户的程序所有权。这里有一些关于 suid 和 sgid 的其它的但是很重要的信息。首先,suid 和 sgid 占据与 ls -l 清单中 x 位相同的空间。如果还设置了 x 位,则相应的位表示为 s(小写)。但是,如果没有设置 x 位,它将表示为 S(大写)。另一个很重要的提示:在许多环境中,suid 和 suid 很管用,但是不恰当地使用这些位可能使系统的安全遭到破坏。最好尽可能地少用“suid”程序。passwd 命令是为数不多的必须使用“suid”的命令之一。
改变 suid 和 sgid
设置和除去 suid 与 sgid 位相当简单。这里,我们设置 suid 位:
chmod u+s /usr/bin/myapp
此处,我们从一个目录除去 sgid 位。我们将看到 sgid 位怎样影响下面几屏中的目录:
chmod g-s /home/drobbins
权限和目到此为止,我们从常规文件的角度来看权限。当从目录的角度看权限时,情况有一点不同。目录使用同样的权限标志,但是它们被解释为表示略微不同的含义。 对于一个目录,如果设置了“read”标志,您可以列出目录的内容;“write”表示您可以在目录中创建文件,“execute”表示您可以进入该目录并访问内部的任何子目录。没有“execute”标志,目录内的文件系统对象是不可访问的。没有“read”标志,目录内的文件系统对象是不可查看的,但是只要有人知道磁盘上对象的完整路径,就仍然可以访问目录内的对象。目录和 sgid如果启用了目录的“sgid”标志,在目录内创建的任何文件系统对象将继承目录的组。当您需要创建一个属于同一组的一组人使用的目录树时,这种特殊的功能很管用。只需要这样做:
mkdir /home/groupspace
# chgrp mygroup /home/groupspace
# chmod g+s /home/groupspace
现在,mygroup 组中的所有用户都可以在 /home/groupspace 内创建文件或目录,同样,他们也将自动地分配到 mygroup 的组所有权。根据用户的 umask 设置,新文件系统对象对于 mygroup 组的其他成员来说,可以或不可以是可读、可写或可执行的。目录和删除缺省情况下,Linux 目录以一种不是在所有情况下都很理想的方式表现。一般来说,只要对一个目录有写访问权,任何人都可以重命名或删除该目录中的文件。对于个别用户使用的目录,这种行为是很合理的。但是,对于很多用户使用的目录来说,尤其是 /tmp 和 /var/tmp,这种行为可能会产生麻烦。因为任何人都可以写这些目录,任何人都可以删除或重命名任何其他人的文件 — 即使是不属于他们的!显然,当任何其他用户在任何时候都可以输入“rm -rf /tmp/*”并损坏每个人的文件时,很难把 /tmp 用于任何有意义的文件。所幸,Linux 有叫做“粘滞位”(sticky bit)的东西。当给 /tmp 设置了粘滞位(用chmod +t),唯一能够删除或重命名 /tmp 中文件的是该目录的所有者(通常是 root 用户)、文件的所有者或 root 用户。事实上,所有 Linux 分发包都缺省地启用了 /tmp 的粘滞位,而您还可以发现粘滞位在其它情况下也很管用。难以理解的第一位
总结本章,我们最后来看一看数字模式的难以理解的第一位数。您可以看到,这个第一位数
用来设置 sticky、suid 和 sgid 位:
suid sgid sticky 模式数字 on on on 7 on on off 6 on off on 5 on off off 4 off on on 3 off on off 2 off off on 1 off off off 0
这里有一个怎样用 4 位数字模式来设置一个目录的权限的示例,该目录将由一个工作组使用:
# chmod 1775 /home/groupfiles
请想一想 1755 数字模式权限设置的含义。
linux权限补充:rwt rwT rws rwS 特殊权限
众所周知,Linux的文件权限如: 777;666等,其实只要在相应的文件上加上UID的权限,就可以用到加权限人的身份去运行这个文件。所以我们只需要将bash复制出来到另一个地方,然后用root加上UID权限,只要用户运行此Shell就可以用用root的身份来执行任何文件了
一个文件都有一个所有者, 表示该文件是谁创建的. 同时, 该文件还有一个组编号, 表示该文件所属的组, 一般为文件所有者所属的组.
如果是一个可执行文件, 那么在执行时, 一般该文件只拥有调用该文件的用户具有的权限. 而setuid, setgid 可以来改变这种设置.
setuid:该位是让普通用户可以以root用户的角色运行只有root帐号才能运行的程序或命令。比如我们用普通用户运行passwd命令来更改自己的口令,实际上最终更改的是/etc/passwd文件我们知道/etc/passwd文件是用户管理的配置文件,只有root权限的用户才能更改
[root@localhost ~]# ls -l /etc/passwd
-rw-r--r-- 1 root root 2379 04-21 13:18 /etc/passwd
作为普通用户如果修改自己的口令通过修改/etc/passwd肯定是不可完成的任务,但是不是可以通过一个命令来修改呢答案是肯定的,作为普通用户可以通过passwd 来修改自己的口令这归功于passwd命令的权限我们来看一下;
[root@localhost ~]# ls -l /usr/bin/passwd
-r-s--x--x 1 root root 21944 02-12 16:15 /usr/bin/passwd
因为/usr/bin/passwd 文件已经设置了setuid 权限位(也就是r-s--x--x中的s),所以普通用户能临时变成root,间接的修改/etc/passwd,以达到修改自己口令的权限
setgid: 该权限只对目录有效. 目录被设置该位后, 任何用户在此目录下创建的文件都具有和该目录所属的组相同的组.
sticky bit: 该位可以理解为防删除位. 一个文件是否可以被某用户删除, 主要取决于该文件所属的组是否对该用户具有写权限. 如果没有写权限, 则这个目录下的所有文件都不能被删除, 同时也不能添加新的文件. 如果希望用户能够添加文件但同时不能删除文件, 则可以对文件使用sticky bit位. 设置该位后, 就算用户对目录具有写权限, 也不能删除该文件.
下面说一下如何操作这些标志:
操作这些标志与操作文件权限的命令是一样的, 都是 chmod. 有两种方法来操作,
- chmod u+s temp -- 为temp文件加上setuid标志. (setuid 只对文件有效)
chmod g+s tempdir -- 为tempdir目录加上setgid标志 (setgid 只对目录有效)
chmod o+t temp -- 为temp文件加上sticky标志 (sticky只对文件有效)
- 采用八进制方式. 对一般文件通过三组八进制数字来置标志, 如 666, 777, 644等. 如果设置这些特殊标志, 则在这组数字之外外加一组八进制数字. 如 4666, 2777等. 这一组八进制数字三位的意义如下,
abc
a - setuid位, 如果该位为1, 则表示设置setuid 4---
b - setgid位, 如果该位为1, 则表示设置setgid 2---
c - sticky位, 如果该位为1, 则表示设置sticky 1---
设置完这些标志后, 可以用 ls -l 来查看. 如果有这些标志, 则会在原来的执行标志位置上显示. 如
rwsrw-r-- 表示有setuid标志
rwxrwsrw- 表示有setgid标志
rwxrw-rwt 表示有sticky标志
那么原来的执行标志x到哪里去了呢? 系统是这样规定的, 如果本来在该位上有x, 则这些特殊标志显示为小写字母 (s, s, t). 否则, 显示为大写字母 (S, S, T)
https://blog.csdn.net/zhao12795969/article/details/53448039/