2020.10.29星期四  正式班D18

  • 权限的类型

    r –> 4

    w –>2

    x –>1

  • 权限的归类

    u –>属主

    g –>属组

    o –>其他人

  • 文件类型

    – # 文本wendang

    d # 目录

    b # 设备block块

    c # 字符设备

    s # 套接字文件

    l # 软链接

  • chmod权限修改

    加减法

    1. [root@ccc test]# ll c.txt
    2. -rw-r--r-- 1 root root 158 10 21 22:52 c.txt
    3. [root@ccc test]# chmod u+x,g+wx,o-r c.txt
    4. [root@ccc test]# ll c.txt
    5. -rwxrwx--- 1 root root 158 10 21 22:52 c.txt

    赋值

    1. [root@ccc test]# ll b.txt
    2. -rw-r--r-- 1 root root 0 10 21 22:46 b.txt
    3. [root@ccc test]# chmod u=rw,g=wx,o=x b.txt
    4. [root@ccc test]# ll b.txt
    5. -rw--wx--x 1 root root 0 10 21 22:46 b.txt

    数字

    1. [root@ccc test]# ll a.txt
    2. -rw-r--r-- 1 root root 158 10 21 22:50 a.txt
    3. [root@ccc test]# chmod 777 a.txt
    4. [root@ccc test]# ll a.txt
    5. -rwxrwxrwx 1 root root 158 10 21 22:50 a.txt

    -R递归修改

    1. [root@ccc ~]# chmod o=x -R /a
    2. [root@ccc ~]# ll -d /a
    3. drwxr-x--x 3 root root 15 10 29 15:21 /a
    4. [root@ccc ~]# ll -d /a/b/
    5. drwxr-x--x 3 root root 15 10 29 15:21 /a/b/
    6. [root@ccc ~]# ll -d /a/b/c/
    7. drwxr-x--x 2 root root 20 10 29 15:21 /a/b/c/
    8. [root@ccc ~]# ll /a/b/c/111.py
    9. -rw-r----x 1 root root 23 10 29 15:20 /a/b/c/111.py
  • chown用户与组修改

    更改文件属性

    1. [root@ccc ~]# chown cjx. /test/a.txt # 只改属主时,属组随之一起改动
    2. [root@ccc ~]# ll /test/a.txt
    3. -rwxrwxrwx 1 cjx 5200 158 10 21 22:50 /test/a.txt
    4. [root@ccc ~]# chown .zzz /test/b.txt # 只改属组,属主不改变
    5. [root@ccc ~]# ll /test/b.txt
    6. -rw--wx--x 1 root zzz 0 10 21 22:46 /test/b.txt

    更改文件夹属性(-R递归)

    1. [root@ccc ~]# chown -R cjx.5200 /test/
    2. [root@ccc ~]# ll -d /test/
    3. drwxr-xr-x 2 cjx 5200 99 10 27 09:42 /test/
    4. [root@ccc ~]# ll /test/
    5. 总用量 45824
    6. -rwxrwxrwx 1 cjx 5200 158 10 21 22:50 a.txt
    7. -rw-r--r-- 1 cjx 5200 46902355 10 27 09:42 bak.zip
    8. -rw--wx--x 1 cjx 5200 0 10 21 22:46 b.txt
    9. -rwxrwx--- 1 cjx 5200 158 10 21 22:52 c.txt
    10. -rw-r--r-- 1 cjx 5200 158 10 21 22:52 d.txt
    11. -rw-r--r-- 1 cjx 5200 158 10 21 22:52 e.txt
    12. -rw-r--r-- 1 cjx 5200 158 10 21 22:49 hosts
  • 针对文件(ll 文件名)

    r:读取文件的内容

    w:修改文件内容

    x:可以把文件当成一个命令/程序运行,解释型的脚本程序还需要文件的r程序

  • 针对目录(ll -d 文件名)

    r:可以浏览该目录下的子目录名和子文件名字

    w:创建、删除、移动文件

    x:可以进去该目录(只要我们要操作目录下的内容,一定要对该目录有x权限)

  • 查看文件内容的权限

    1. [root@ccc ~]# mkdir -p /a/b/c
    2. [root@ccc ~]# touch /a/b/c/d.py
    3. [root@ccc ~]# vim /a/b/c/d.py
    4. [root@ccc ~]# ll /a/b/c/d.py
    5. -rw-r--r-- 1 root root 0 10 29 11:34 /a/b/c/d.py
    6. [root@ccc ~]# chmod o=- /a/b/c/d.py
    7. [root@ccc ~]# su - zzz -c "cat /a/b/c/d.py"
    8. /usr/bin/id: cannot find name for group ID 5200
    9. cat: /a/b/c/d.py: 权限不够
    10. [root@ccc ~]# chmod o=r /a/b/c/d.py
    11. [root@ccc ~]# su - zzz -c "cat /a/b/c/d.py"
    12. qqqqq
  • 想操作文件或文件夹必须要有对沿途所有文件夹的x执行权限

    想要在文件夹下添加文件要有w写权限和x执行权限

    想浏览文件夹下内容必须要有r读权限和x执行权限

    想编辑文件必须对沿途文件夹有x,对该文件有w或r

  • 对文件的执行权限

    对解释性语言的脚本,不仅需要x权限,还需要r权限

    1. [root@ccc ~]# mkdir -p /a/b/c
    2. [root@ccc ~]# vim /a/b/c/111.py
    3. [root@ccc ~]# ll /a/b/c/111.py
    4. -rw-r--r-- 1 root root 23 10 29 15:20 /a/b/c/111.py
    5. [root@ccc ~]# chmod o=x -R /a
    6. [root@ccc ~]# ll -d /a
    7. drwxr-x--x 3 root root 15 10 29 15:21 /a
    8. [root@ccc ~]# ll -d /a/b/
    9. drwxr-x--x 3 root root 15 10 29 15:21 /a/b/
    10. [root@ccc ~]# ll -d /a/b/c/
    11. drwxr-x--x 2 root root 20 10 29 15:21 /a/b/c/
    12. [root@ccc ~]# ll /a/b/c/111.py # 此时仅有x权限
    13. -rw-r----x 1 root root 23 10 29 15:20 /a/b/c/111.py
    14. [root@ccc ~]# su - zzz -c "/a/b/c/111.py"
    15. bash: /a/b/c/111.py: 权限不够
    16. [root@ccc ~]# chmod o+r /a/b/c/111.py # 此时其他用户权限为rx
    17. [root@ccc ~]# su - zzz -c "/a/b/c/111.py"
    18. nice
    19. 666
  • 普通用户不是root也不属于root组,所以他对/etc/shadow文件没有任何权限

    1. [root@ccc ~]# ll /etc/shadow
    2. ---------- 1 root root 666 10 28 21:22 /etc/shadow
  • 但是普通用户可以用passwd命令修改密码,而修改密码都是在修改/etc/shadow文件

    1. [root@ccc ~]# ll `which passwd`
    2. -rwsr-xr-x. 1 root root 27856 4 1 2020 /usr/bin/passwd
  • 原因是passwd有一个s权限

    SUID权限仅对二进制可执行的文件有效

    若执行者对该二进制可执行文件有x权限,执行者将具有该文件的所有者权限

    本执行权限仅在执行该二进制可执行文件的过程有效

  • 示例

    1. [root@ccc ~]# su - zzz -c "cat /etc/shadow"
    2. cat: /etc/shadow: 权限不够
    3. [root@ccc ~]# ll `which cat`
    4. -rwxr-xr-x. 1 root root 54080 8 20 2019 /usr/bin/cat
    5. [root@ccc ~]# chmod u+s `which cat` # 或者chmod 4755 `which cat`来增加s权限
    6. [root@ccc ~]# ll `which cat`
    7. -rwsr-xr-x. 1 root root 54080 8 20 2019 /usr/bin/cat
    8. [root@ccc ~]# su - zzz -c "cat /etc/shadow"
    9. root:$6$8Pjcu5JO$PbL98SMmUWvlEFu7iRBPVgKtRl3mRJpT3kA0nPuAkSkbKGKQOl1fVA76gW/4Py887etb/U5X8EenYm/H5DG7m1:18554:0:99999:7:::
    10. bin:*:18353:0:99999:7:::
    11. daemon:*:18353:0:99999:7:::
    12. ...
    13. zzz:!!:18561:0:99999:7:::
    14. cjx:$1$cjxcjxcj$e9/G6tp0yKw7gcywyOTSZ/:18561:0:99999:7:::
    15. [root@ccc ~]# chmod 755 `which cat` # 或者chmod u-s `which cat`来取消s权限
    16. [root@ccc ~]# ll /usr/bin/cat
    17. -rwxr-xr-x. 1 root root 54080 8 20 2019 /usr/bin/cat

    ↓↓↓↓↓↓↓↓↓↓没有x权限,光有S权限也没用(注意此时为S非s)↓↓↓↓↓↓↓↓↓↓

    1. # 没有x权限,光有S权限也没用(注意此时为S非s)
    2. [root@ccc ~]# ll /usr/bin/cat
    3. -rwxr-xr-x. 1 root root 54080 8 20 2019 /usr/bin/cat
    4. [root@ccc ~]# chmod a-x /usr/bin/cat # a代表所有用户,此时取消所有用户的x执行权限
    5. [root@ccc ~]# ll !$
    6. ll /usr/bin/cat
    7. -rw-r--r--. 1 root root 54080 8 20 2019 /usr/bin/cat
    8. [root@ccc ~]# chmod u+s /usr/bin/cat
    9. [root@ccc ~]# ll !$
    10. ll /usr/bin/cat
    11. -rwSr--r--. 1 root root 54080 8 20 2019 /usr/bin/cat
    12. [root@ccc ~]# su - zzz -c "cat /etc/shadow"
    13. -bash: /bin/cat: 权限不够
    14. [root@ccc ~]# chmod a+x /usr/bin/cat # 此时加上所有用户的x执行权限
    15. [root@ccc ~]# ll !$
    16. ll /usr/bin/cat
    17. -rwsr-xr-x. 1 root root 54080 8 20 2019 /usr/bin/cat
    18. [root@ccc ~]# su - zzz -c "cat /etc/shadow"
    19. root:$6$8Pjcu5JO$PbL98SMmUWvlEFu7iRBPVgKtRl3mRJpT3kA0nPuAkSkbKGKQOl1fVA76gW/4Py887etb/U5X8EenYm/H5DG7m1:18554:0:99999:7:::
    20. bin:*:18353:0:99999:7:::
    21. ...
    22. zzz:!!:18561:0:99999:7:::
    23. cjx:$1$cjxcjxcj$e9/G6tp0yKw7gcywyOTSZ/:18561:0:99999:7:::
    24. [root@ccc ~]# chmod 755 /usr/bin/cat # 还原环境
    25. [root@ccc ~]# ll !$
    26. ll /usr/bin/cat
    27. -rwxr-xr-x. 1 root root 54080 8 20 2019 /usr/bin/cat
  • 普通做法

    当SGID作用于普通文件时于SUID类似,在执行该文件时用户获得该文件所属组的权限

  • 重要用法

    1、当一个用户对某一目录有写和执行权限时,该用户就可在该目录下建立文件

    2、如果该目录同时用SGID修饰,则该用户在此目录下建立的文件都属于这个目录所在的组

    1. [root@ccc ~]# mkdir /test
    2. [root@ccc ~]# touch /test/a.py
    3. [root@ccc ~]# echo 666 >> /test/a.py
    4. [root@ccc ~]# chmod 000 /test/a.py
    5. [root@ccc ~]# ll /test/a.py
    6. ---------- 1 root root 0 10 29 19:50 /test/a.py
    7. [root@ccc ~]# ll /usr/bin/cat
    8. -rwxr-xr-x. 1 root root 54080 8 20 2019 /usr/bin/cat
    9. [root@ccc ~]# chmod g+s /usr/bin/cat
    10. [root@ccc ~]# ll -d !$
    11. ll -d /usr/bin/cat
    12. -rwxr-sr-x. 1 root root 54080 8 20 2019 /usr/bin/cat
    13. [root@ccc ~]# su - zzz -c "cat /test/a.py"
    14. cat: /test/a.py: 权限不够
    15. [root@ccc ~]# chmod g+r /test/a.py
    16. [root@ccc ~]# ll /test/a.py
    17. ----r----- 1 root root 0 10 29 19:50 /test/a.py
    18. [root@ccc ~]# su - zzz -c "cat /test/a.py"
    19. 666
    1. [root@ccc ~]# mkdir /test
    2. [root@ccc ~]# ll -d /test/
    3. drwxr-xr-x 2 root root 6 10 29 19:31 /test/
    4. [root@ccc ~]# chmod g+s /test/ # 给/test目录的组加上s权限
    5. [root@ccc ~]# groupadd it
    6. [root@ccc ~]# chown .it /test/ # 为了区分,将/test目录的组改为it
    7. [root@ccc ~]# ll -d /test/
    8. drwxr-sr-x 2 root it 6 10 29 19:31 /test/
    9. [root@ccc ~]# su - zzz -c "touch /test/a.py"
    10. touch: 无法创建"/test/a.py": 权限不够 # 要在目录下创建文件必须对该目录有w写权限
    11. [root@ccc ~]# chmod o+w /test/
    12. [root@ccc ~]# su - zzz -c "touch /test/a.py"
    13. [root@ccc ~]# touch /test/b.py
    14. [root@ccc ~]# ll /test
    15. 总用量 0
    16. -rw-rw-r-- 1 zzz it 0 10 29 19:36 a.py
    17. -rw-r--r-- 1 root it 0 10 29 19:37 b.py
    18. # 在目录被SGID修饰后,所有用户在此目录下创建的文件的组都属于这个目录所在的组
  • 目前仅对目录有效,用来阻止非文件的所有者删除文件,常见的就是/tmp目录

    1. [root@ccc ~]# ll -d /tmp/
    2. drwxrwxrwt. 28 root root 4096 10 29 09:09 /tmp/
  • 权限信息最后一位t表明目录被设置SBIT权限,表明自己和root才有权力删除,主要作用于共享文件夹。

  • 用o+t或1755增加权限

    1. ===================目录未设置SBIT权限,任意用户都可删除目录下文件======================
    2. [root@ccc ~]# mkdir /share
    3. [root@ccc ~]# chmod 777 /share/
    4. [root@ccc ~]# useradd user01
    5. [root@ccc ~]# useradd user02
    6. [root@ccc ~]# useradd user03
    7. [root@ccc ~]# useradd user04
    8. [root@ccc ~]# su - user01 -c "touch /share/1.py"
    9. [root@ccc ~]# su - user02 -c "touch /share/2.py"
    10. [root@ccc ~]# su - user03 -c "touch /share/3.py"
    11. [root@ccc ~]# su - user04 -c "touch /share/4.py"
    12. [root@ccc ~]# ll /share/
    13. 总用量 0
    14. -rw-rw-r-- 1 user01 user01 0 10 29 20:07 1.py
    15. -rw-rw-r-- 1 user02 user02 0 10 29 20:08 2.py
    16. -rw-rw-r-- 1 user03 user03 0 10 29 20:08 3.py
    17. -rw-rw-r-- 1 user04 user04 0 10 29 20:08 4.py
    18. [root@ccc ~]# su - user04
    19. 上一次登录:四 10 29 20:08:17 CST 2020pts/1
    20. [user04@ccc ~]$ rm -rf /share/1.py
    21. [user04@ccc ~]$ rm -rf /share/2.py
    22. [user04@ccc ~]$ rm -rf /share/3.py
    23. [user04@ccc ~]$ rm -rf /share/4.py
    24. [user04@ccc ~]$ exit
    25. 登出
    26. [root@ccc ~]# ll /share/
    27. 总用量 0
    28. ===================目录设置SBIT权限,用户只可删除自己创建的文件=======================
    29. [root@ccc ~]# chmod o+t /share/
    30. [root@ccc ~]# ll -d /share/
    31. drwxrwxrwt 2 root root 6 10 29 20:09 /share/
    32. [root@ccc ~]# su - user01 -c "touch /share/1.py"
    33. [root@ccc ~]# su - user02 -c "touch /share/2.py"
    34. ^[[A[root@ccc su - user03 -c "touch /share/3.py"
    35. [root@ccc ~]# su - user04 -c "touch /share/4.py"
    36. [root@ccc ~]# su - user04
    37. 上一次登录:四 10 29 20:14:57 CST 2020pts/1
    38. [user04@ccc ~]$ rm -rf /share/1.py
    39. rm: 无法删除"/share/1.py": 不允许的操作 # 不能删除其他用户创建的文件
    40. [user04@ccc ~]$ rm -rf /share/2.py
    41. rm: 无法删除"/share/2.py": 不允许的操作
    42. [user04@ccc ~]$ rm -rf /share/3.py
    43. rm: 无法删除"/share/3.py": 不允许的操作
    44. [user04@ccc ~]$ rm -rf /share/4.py # 只能删除自己创建的文件
    45. [user04@ccc ~]$ exit
    46. 登出
    47. [root@ccc ~]# rm -rf /share/* # root用户可以删除无论谁创建的一切文件
    48. [root@ccc ~]# ll /share/
    49. 总用量 0
    50. ================================必须要有x执行权限=================================
    51. [root@ccc ~]# chmod o+t /share/
    52. [root@ccc ~]# chmod o-x /share/
    53. [root@ccc ~]# ll -d /share/
    54. drwxrwxrwT 2 root root 6 10 29 20:16 /share/
    55. [root@ccc ~]# su - user01 -c "touch /share/1.py"
    56. touch: 无法创建"/share/1.py": 权限不够
  • 新建文件、目录的默认权限都是由umask决定的

    UID>199并且属主与属组相等的用户下,umask:0002

    ①文件664

    ②目录775

    其他用户,如root用户,umask:0022

    ①文件644

    ②目录755

  • Linux中文件默认权限666,目录默认权限777

  • 文件权限计算方法:偶数位直接相减,奇数位相减后加1

    文件起始权限值 umask值 操作 计算后文件权限
    666 022(都是偶数) 相减 644
    666 033(都是奇数) 相减,奇数位相减后+1 644
    666 325(有奇数和偶数) 相减,奇数位相减后+1 442
  • 目录权限计算方法:直接相减

    文件起始权限值 umask值 操作 计算后文件权限
    777 022 相减 755
    777 033 相减 744
    777 325 相减 452
  • umask设置的值越小,权限越大,要慎用

  • 示例

    1. [root@ccc ~]# umask 777
    2. [root@ccc ~]# umask
    3. 0777
    4. [root@ccc ~]# touch 1.py
    5. [root@ccc ~]# mkdir 1
    6. [root@ccc ~]# ll 1.py
    7. ---------- 1 root root 0 10 29 20:39 1.py
    8. [root@ccc ~]# ll -d 1
    9. d--------- 2 root root 6 10 29 20:39 1
  • 临时设置

    1. [root@ccc ~]# umask 777
    2. [root@ccc ~]# umask
    3. 0777
  • 永久设置

    1. [root@ccc ~]# vim /etc/profile
    2. if [ $UID -gt 199 ] && [ "`/usr/bin/id -gn`" = "`/usr/bin/id -un`" ]; then
    3. umask 002 # 表示uid>=199的默认umask值,普通用户
    4. else
    5. umask 022 # 表示uid<199的默认umask值,表示root
    6. fi

版权声明:本文为caojiaxin原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/caojiaxin/p/13899320.html