把一个用户加入了一个组,该用户就拥有了该组的权限,当一个用户要操作某个文件时,系统会依次检索该用户是否是该文件的拥有者,其次是组成员,最后是其他人,如果扫描到是拥有者,则具备拥有者的权限,不必往后扫描,以此类推
基本权限类型
权限的归属
例如
| [root@aliyun ~] |
| -rw-r--r-- 1 root root 1146 Jul 16 18:42 a.txt |
| |
| 文件类型: |
| -:文本文档 |
| d:目录 |
| b:设备block |
| c:字符设备 |
| s:套接字文件 |
| l:软链接 |
| |
| 权限 |
| |
| 硬链接个数 |
| |
| 属主 |
| |
| 属组 |
| |
| 文件所占用的空间(以字节为单位) |
| |
| 文件(目录)最近访问(修改)时间 |
| |
| 文件名 |
修改属主、属组
| [root@aliyun ~] |
| [root@aliyun ~] |
| [root@aliyun ~] |
| |
| [root@aliyun ~] |
修改u、g、o对应的权限
| |
| chmod u+x,g-w,o+r a.txt |
| |
| chmod a=rwx a.txt |
| chmod a=- a.txt |
| chmod ug=rw,o=r file1 |
| |
| |
| chmod 644 file1 |
| |
| chmod -R 777 xxx/ |
注意:把某一个非属主用户添加到文件的属组里,他就拥有了该组的权限,而不再是其他人
文件:ls -l 文件名
- r:可以cat读取文件内容
- w:可以修改文件
- x:可以执行文件代码,如果该文件的代码是编译好的结果,那么只有x权限即可执行,但如果该文件的代码是一个解释型的脚本程序,则需要配合r权限才可执行
目录:ls -dl 文件名
- r: 可以ls浏览文件下的内容
- w:可以在目录下创建新文件or目录
- x:
- 可以执行目录下的程序,除了对目录有执行权限外,还要对程序文件有执行权限才行。
- 可以正常切换到目录下
- 涉及到多层目录如/a/b/c,需要对每一级都有x权限才可以正常走到下一级
| 一:对文件夹的操作(不操作文件内容),需要当前用户具备的权限 |
| 1、对沿途所有文件夹有x权限 |
| 2、对目标文件夹有r或w权限 |
| r-》可以浏览 |
| w-》可以创建、删除、移动子文件和子目录 |
| |
| 二:对文件的操作(操作文件内容),需要当前用户具备的权限 |
| 1、对沿途所有文件夹有x权限 |
| 2、对目标文件有r或w权限 |
| r-》可以读取文件内容 |
| w-》可以修改文件内容 |
| |
| !!!注意!!! |
| 储备知识:vim修改的原理是将源文件删掉,然后再将内容的内容覆盖写入了新文件,新文件名重命名为原文件名 |
| 例子: |
| 1、当前用户对沿途所有文件夹都有x权限 |
| 2、并且当前用户对目标文件夹有w权限 |
| 3、但是当前用户对目标文件没有w权限 |
| 此时当前用可以vim编辑文件内容,并且可以wq!强制保存(输入y确认)退出完成文件修改,其实是将源文件删掉了,可以通过查看前后操作的文件inode号来确定 |
例1:要想在目录下创建\删除内容:对目录的x权限+对目录的w权限
| |
| [root@aliyun ~] |
| [root@aliyun ~] |
| [root@aliyun ~] |
| |
| |
| [root@aliyun ~] |
| drwxr-x--x 3 root root 4096 Aug 11 16:24 /a |
| [root@aliyun ~] |
| drwxr-x--x 3 root root 4096 Aug 11 16:24 /a/b |
| [root@aliyun ~] |
| drwxr-x-wx 2 root root 4096 Aug 11 16:25 /a/b/c |
| |
| |
| [root@aliyun ~] |
| [root@aliyun ~] |
| Last login: Tue Aug 11 16:17:28 CST 2020 on pts/2 |
| [gg@aliyun ~]$ touch /a/b/c/1.txt |
| [gg@aliyun ~]$ exit |
| logout |
| [root@aliyun ~] |
| 1.txt |
例2:要浏览目录下内容:对目录的x权限+对目录的r权限
| [root@aliyun ~] |
| [root@aliyun ~] |
| [root@aliyun ~] |
| [root@aliyun ~] |
| [root@aliyun ~] |
| [root@aliyun ~] |
| [root@aliyun ~] |
| Last login: Tue Aug 11 16:27:33 CST 2020 on pts/2 |
| [gg@aliyun ~]$ ls /a/b/c |
| 1.txt 2.txt 3.txt |
例3:要执行目录下程序:对目录的x权限+对文件的x权限,如果文件是解释型语言的脚本程序,还需要对文件有r权限
| [root@aliyun ~] |
| [root@aliyun ~] |
| [root@aliyun ~] |
| [root@aliyun ~] |
| [root@aliyun ~] |
| [root@aliyun ~] |
| Last login: Tue Aug 11 16:30:17 CST 2020 on pts/2 |
| [gg@aliyun ~]$ /a/b/c/echo "hello egon" |
| hello egon |
详解:https://www.cnblogs.com/linhaifeng/articles/13357542.html
suid 4
sgid 2
sticky 1
普通用户不是root也不属于root组,于是它对/etc/shadow文件没有任何权限
| [root@aliyun ~] |
| ---------- 1 root root 1109 Aug 11 16:11 /etc/shadow |
但是普通用户却可以用passwd命令修改密码,而修改密码都是在修改/etc/shadow文件,如何实现的???
| [root@aliyun ~] |
| -rwsr-xr-x 1 root root 27856 Aug 9 2019 /bin/passwd |
可以看到一个s权限,s权限的特殊之处
- SUID 权限仅对二进制可执行文件有效
- 如果执行者对于该二进制可执行文件具有 x 的权限,执行者将具有该文件的所有者的权限
- 本权限仅在执行该二进制可执行文件的过程中有效
示例
| [root@localhost ~] |
| -rwxr-xr-x. 1 root root 54160 10月 31 2018 /usr/bin/cat |
| [root@localhost ~] |
| [root@localhost ~] |
| -rwsr-xr-x. 1 root root 54160 10月 31 2018 /usr/bin/cat |
| |
| [root@localhost ~] |
| [egon@localhost ~]$ cat /etc/shadow |
了解:
| |
| 会依次比对当前登录用户是否是目标文件的属主、属组、其他人来确定是否拥有操作权限 |
| |
| |
| 当前用户会转换成命令文件的属主身份,然后拿着该身份去对应目标文件,如果该身份不是目标文件的主人,那么就直接被归为其他人一栏,不会检索组 |
| sgid一样 |
例
| |
| mkdir /test |
| chmod 777 /test/ |
| echo 1111 > /test/a.txt |
| chmod 000 /test/a.txt |
| chown user1.group1 /test/a.txt |
| chown egon.devops /usr/bin/cat |
| chmod u+s /usr/bin/cat |
| |
| |
| [root@egon ~] |
| ----------. 1 user1 group1 4 10月 29 18:31 /test/a.txt |
| [root@egon ~] |
| [root@egon ~] |
| [root@egon ~] |
| -rwxr-xr-x. 1 egon devops 54160 10月 31 2018 /usr/bin/cat |
| [root@egon ~] |
| [root@egon ~] |
| [root@egon ~] |
| cat: /test/a.txt: 权限不够 |
| [root@egon ~] |
| [root@egon ~] |
| 111 |
| [root@egon ~] |
| [root@egon ~] |
| [root@egon ~] |
| [root@egon ~] |
| ----r-----. 1 user1 group1 4 10月 29 18:31 /test/a.txt |
| [root@egon ~] |
| [root@egon ~] |
| -rwsr-xr-x. 1 egon devops 54160 10月 31 2018 /usr/bin/cat |
| [root@egon ~] |
| uid=1005(egon) gid=1005(egon) 组=1005(egon),1003(group1) |
| [root@egon ~] |
| [root@egon ~] |
| cat: /test/a.txt: 权限不够 |
| [root@egon ~] |
| |
| [root@egon ~] |
| 1111 |
| |
| |
| sgid规则同suid |
| 同时设置suid与sgid的情况下,suid优先级高于sguid |
-
当SGID 作用于普通文件时,和 SUID 类似,在执行该文件时,用户将获得该文件所属组的权限。
-
当 SGID 作用于目录时,意义就非常重大了:
当一个用户对某一目录有写和执行权限时,该用户就可以在该目录下建立文件
如果该目录同时用 SGID 修饰,则该用户在这个目录下建立的文件都是属于这个目录所属的组。
| [root@localhost ~] |
| [root@localhost ~] |
| [root@localhost ~] |
| drwxr-sr-x 2 root root 6 8月 11 17:06 /test/ |
| [root@localhost ~] |
| [root@localhost ~] |
其实 SBIT 与 SUID 和 SGID 的关系并不大。
SBIT 是 the restricted deletion flag or sticky bit 的简称,有时也称为Sticky。
SBIT 目前只对目录有效,用来阻止非文件的所有者删除文件。比较常见的例子就是 /tmp 目录:
| [root@localhost ~] |
| drwxrwxrwt. 13 root root 4096 8月 11 17:09 /tmp/ |
| [root@localhost ~] |
权限信息中最后一位 t 表明该目录被设置了 SBIT 权限。SBIT 对目录的作用是:当用户在该目录下创建新文件或目录时,仅有自己和 root 才有权力删除,主要作用于一个共享的文件夹。
新建文件、目录的默认权限是由umask决定的
1、uid>199并且属主与数组相等的用户下,umask: 0002
2、除1之外的其他用户下,比如root用户,umask: 0022
linux中文件默认权限为666、目录权限默认为777,在umask的影响下
文件权限计算方法:偶数位直接相减,奇数位相减后加1
文件的起始权限值 |
umask值 |
操作 |
计算后文件权限 |
666 |
022 (每位如果都是偶数) |
直接相减即可 |
644 |
666 |
033 (每位如果有奇数或偶数) |
相减(奇数位相减后在其原奇数位加1) |
644 |
666 |
325(每位如果有奇数或偶数) |
相减(奇数位相减后在其原奇数位加1) |
442 |
目录权限计算方法:直接相减即可
文件的起始权限值 |
umask值 |
操作 |
计算后文件权限 |
777 |
022 |
相减 |
755 |
777 |
033 |
相减 |
744 |
777 |
325 |
相减 |
452 |
总结:umask设置的越小,权限越大,慎用
临时设置umask
永久设置umask
| [root@localhost tmp] |
| ...... |
| if [ $UID -gt 199 ] && [ "`id -gn`" = "`id -un`" ]; then |
| umask 002 //表示uid大于等于199的默认umask值,表示普通用户 |
| else |
| umask 022 //表示uid小于199的默认umask值,表示root |
| fi |