正式班D18

2020.10.29星期四  正式班D18

10.2 用戶許可權管理之基本許可權rwx管理

10.2.1 基本概念

  • 許可權的類型

    r –> 4

    w –>2

    x –>1

  • 許可權的歸類

    u –>屬主

    g –>屬組

    o –>其他人

  • 文件類型

    – # 文本wendang

    d # 目錄

    b # 設備block塊

    c # 字元設備

    s # 套接字文件

    l # 軟鏈接

10.2.2 設置

  • chmod許可權修改

    加減法

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

    賦值

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

    數字

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

    -R遞歸修改

    [root@ccc ~]# chmod o=x -R /a
    [root@ccc ~]# ll -d /a
    drwxr-x--x 3 root root 15 10月 29 15:21 /a
    [root@ccc ~]# ll -d /a/b/
    drwxr-x--x 3 root root 15 10月 29 15:21 /a/b/
    [root@ccc ~]# ll -d /a/b/c/
    drwxr-x--x 2 root root 20 10月 29 15:21 /a/b/c/
    [root@ccc ~]# ll /a/b/c/111.py   
    -rw-r----x 1 root root 23 10月 29 15:20 /a/b/c/111.py
    
  • chown用戶與組修改

    更改文件屬性

    [root@ccc ~]# chown cjx. /test/a.txt   # 只改屬主時,屬組隨之一起改動
    [root@ccc ~]# ll /test/a.txt 
    -rwxrwxrwx 1 cjx 5200 158 10月 21 22:50 /test/a.txt
    [root@ccc ~]# chown .zzz /test/b.txt   # 只改屬組,屬主不改變
    [root@ccc ~]# ll /test/b.txt 
    -rw--wx--x 1 root zzz 0 10月 21 22:46 /test/b.txt
    

    更改文件夾屬性(-R遞歸)

    [root@ccc ~]# chown -R cjx.5200 /test/
    [root@ccc ~]# ll -d /test/
    drwxr-xr-x 2 cjx 5200 99 10月 27 09:42 /test/
    [root@ccc ~]# ll /test/
    總用量 45824
    -rwxrwxrwx 1 cjx 5200      158 10月 21 22:50 a.txt
    -rw-r--r-- 1 cjx 5200 46902355 10月 27 09:42 bak.zip
    -rw--wx--x 1 cjx 5200        0 10月 21 22:46 b.txt
    -rwxrwx--- 1 cjx 5200      158 10月 21 22:52 c.txt
    -rw-r--r-- 1 cjx 5200      158 10月 21 22:52 d.txt
    -rw-r--r-- 1 cjx 5200      158 10月 21 22:52 e.txt
    -rw-r--r-- 1 cjx 5200      158 10月 21 22:49 hosts
    

10.2.3 許可權的作用(文件、文件夾)

  • 針對文件(ll 文件名)

    r:讀取文件的內容

    w:修改文件內容

    x:可以把文件當成一個命令/程式運行,解釋型的腳本程式還需要文件的r程式

  • 針對目錄(ll -d 文件名)

    r:可以瀏覽該目錄下的子目錄名和子文件名字

    w:創建、刪除、移動文件

    x:可以進去該目錄(只要我們要操作目錄下的內容,一定要對該目錄有x許可權)

  • 查看文件內容的許可權

    [root@ccc ~]# mkdir -p /a/b/c
    [root@ccc ~]# touch /a/b/c/d.py
    [root@ccc ~]# vim /a/b/c/d.py 
    [root@ccc ~]# ll /a/b/c/d.py 
    -rw-r--r-- 1 root root 0 10月 29 11:34 /a/b/c/d.py
    [root@ccc ~]# chmod o=- /a/b/c/d.py 
    [root@ccc ~]# su - zzz -c "cat /a/b/c/d.py"
    /usr/bin/id: cannot find name for group ID 5200
    cat: /a/b/c/d.py: 許可權不夠
    [root@ccc ~]# chmod o=r /a/b/c/d.py 
    [root@ccc ~]# su - zzz -c "cat /a/b/c/d.py"
    qqqqq
    
  • 想操作文件或文件夾必須要有對沿途所有文件夾的x執行許可權

    想要在文件夾下添加文件要有w寫許可權和x執行許可權

    想瀏覽文件夾下內容必須要有r讀許可權和x執行許可權

    想編輯文件必須對沿途文件夾有x,對該文件有w或r

  • 對文件的執行許可權

    對解釋性語言的腳本,不僅需要x許可權,還需要r許可權

    [root@ccc ~]# mkdir -p /a/b/c
    [root@ccc ~]# vim /a/b/c/111.py
    [root@ccc ~]# ll /a/b/c/111.py 
    -rw-r--r-- 1 root root 23 10月 29 15:20 /a/b/c/111.py
    [root@ccc ~]# chmod o=x -R /a
    [root@ccc ~]# ll -d /a
    drwxr-x--x 3 root root 15 10月 29 15:21 /a
    [root@ccc ~]# ll -d /a/b/
    drwxr-x--x 3 root root 15 10月 29 15:21 /a/b/
    [root@ccc ~]# ll -d /a/b/c/
    drwxr-x--x 2 root root 20 10月 29 15:21 /a/b/c/
    [root@ccc ~]# ll /a/b/c/111.py   # 此時僅有x許可權
    -rw-r----x 1 root root 23 10月 29 15:20 /a/b/c/111.py
    [root@ccc ~]# su - zzz -c "/a/b/c/111.py"
    bash: /a/b/c/111.py: 許可權不夠
    [root@ccc ~]# chmod o+r /a/b/c/111.py   # 此時其他用戶許可權為rx
    [root@ccc ~]# su - zzz -c "/a/b/c/111.py"
    nice
    666
    

10.3 用戶許可權管理之特殊許可權

10.3.1 SUID

  • 普通用戶不是root也不屬於root組,所以他對/etc/shadow文件沒有任何許可權

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

    [root@ccc ~]# ll `which passwd`
    -rwsr-xr-x. 1 root root 27856 4月   1 2020 /usr/bin/passwd
    
  • 原因是passwd有一個s許可權

    SUID許可權僅對二進位可執行的文件有效

    若執行者對該二進位可執行文件有x許可權,執行者將具有該文件的所有者許可權

    本執行許可權僅在執行該二進位可執行文件的過程有效

  • 示例

    [root@ccc ~]# su - zzz -c "cat /etc/shadow"
    cat: /etc/shadow: 許可權不夠
    [root@ccc ~]# ll `which cat`
    -rwxr-xr-x. 1 root root 54080 8月  20 2019 /usr/bin/cat
    [root@ccc ~]# chmod u+s `which cat`  # 或者chmod 4755 `which cat`來增加s許可權
    [root@ccc ~]# ll `which cat`
    -rwsr-xr-x. 1 root root 54080 8月  20 2019 /usr/bin/cat
    [root@ccc ~]# su - zzz -c "cat /etc/shadow"
    root:$6$8Pjcu5JO$PbL98SMmUWvlEFu7iRBPVgKtRl3mRJpT3kA0nPuAkSkbKGKQOl1fVA76gW/4Py887etb/U5X8EenYm/H5DG7m1:18554:0:99999:7:::
    bin:*:18353:0:99999:7:::
    daemon:*:18353:0:99999:7:::
    ...
    zzz:!!:18561:0:99999:7:::
    cjx:$1$cjxcjxcj$e9/G6tp0yKw7gcywyOTSZ/:18561:0:99999:7:::
    [root@ccc ~]# chmod 755 `which cat`  # 或者chmod u-s `which cat`來取消s許可權
    [root@ccc ~]# ll /usr/bin/cat
    -rwxr-xr-x. 1 root root 54080 8月  20 2019 /usr/bin/cat
    

    ↓↓↓↓↓↓↓↓↓↓沒有x許可權,光有S許可權也沒用(注意此時為S非s)↓↓↓↓↓↓↓↓↓↓

    # 沒有x許可權,光有S許可權也沒用(注意此時為S非s)
    [root@ccc ~]# ll /usr/bin/cat
    -rwxr-xr-x. 1 root root 54080 8月  20 2019 /usr/bin/cat
    [root@ccc ~]# chmod a-x /usr/bin/cat  # a代表所有用戶,此時取消所有用戶的x執行許可權
    [root@ccc ~]# ll !$
    ll /usr/bin/cat
    -rw-r--r--. 1 root root 54080 8月  20 2019 /usr/bin/cat
    [root@ccc ~]# chmod u+s /usr/bin/cat
    [root@ccc ~]# ll !$
    ll /usr/bin/cat
    -rwSr--r--. 1 root root 54080 8月  20 2019 /usr/bin/cat
    [root@ccc ~]# su - zzz -c "cat /etc/shadow"
    -bash: /bin/cat: 許可權不夠
    [root@ccc ~]# chmod a+x /usr/bin/cat  # 此時加上所有用戶的x執行許可權
    [root@ccc ~]# ll !$
    ll /usr/bin/cat
    -rwsr-xr-x. 1 root root 54080 8月  20 2019 /usr/bin/cat
    [root@ccc ~]# su - zzz -c "cat /etc/shadow"
    root:$6$8Pjcu5JO$PbL98SMmUWvlEFu7iRBPVgKtRl3mRJpT3kA0nPuAkSkbKGKQOl1fVA76gW/4Py887etb/U5X8EenYm/H5DG7m1:18554:0:99999:7:::
    bin:*:18353:0:99999:7:::
    ...
    zzz:!!:18561:0:99999:7:::
    cjx:$1$cjxcjxcj$e9/G6tp0yKw7gcywyOTSZ/:18561:0:99999:7:::
    [root@ccc ~]# chmod 755 /usr/bin/cat  # 還原環境
    [root@ccc ~]# ll !$
    ll /usr/bin/cat
    -rwxr-xr-x. 1 root root 54080 8月  20 2019 /usr/bin/cat
    

10.3.2 SGID

  • 普通做法

    當SGID作用於普通文件時於SUID類似,在執行該文件時用戶獲得該文件所屬組的許可權

  • 重要用法

    1、當一個用戶對某一目錄有寫和執行許可權時,該用戶就可在該目錄下建立文件

    2、如果該目錄同時用SGID修飾,則該用戶在此目錄下建立的文件都屬於這個目錄所在的組

    [root@ccc ~]# mkdir /test
    [root@ccc ~]# touch /test/a.py
    [root@ccc ~]# echo 666 >> /test/a.py 
    [root@ccc ~]# chmod 000 /test/a.py
    [root@ccc ~]# ll /test/a.py
    ---------- 1 root root 0 10月 29 19:50 /test/a.py
    [root@ccc ~]# ll /usr/bin/cat
    -rwxr-xr-x. 1 root root 54080 8月  20 2019 /usr/bin/cat
    [root@ccc ~]# chmod g+s /usr/bin/cat
    [root@ccc ~]# ll -d !$
    ll -d /usr/bin/cat
    -rwxr-sr-x. 1 root root 54080 8月  20 2019 /usr/bin/cat
    [root@ccc ~]# su - zzz -c "cat /test/a.py"
    cat: /test/a.py: 許可權不夠
    [root@ccc ~]# chmod g+r /test/a.py 
    [root@ccc ~]# ll /test/a.py
    ----r----- 1 root root 0 10月 29 19:50 /test/a.py
    [root@ccc ~]# su - zzz -c "cat /test/a.py"
    666
    
    [root@ccc ~]# mkdir /test
    [root@ccc ~]# ll -d /test/
    drwxr-xr-x 2 root root 6 10月 29 19:31 /test/
    [root@ccc ~]# chmod g+s /test/  # 給/test目錄的組加上s許可權
    [root@ccc ~]# groupadd it
    [root@ccc ~]# chown .it /test/  # 為了區分,將/test目錄的組改為it
    [root@ccc ~]# ll -d /test/
    drwxr-sr-x 2 root it 6 10月 29 19:31 /test/
    [root@ccc ~]# su - zzz -c "touch /test/a.py"
    touch: 無法創建"/test/a.py": 許可權不夠  # 要在目錄下創建文件必須對該目錄有w寫許可權
    [root@ccc ~]# chmod o+w /test/
    [root@ccc ~]# su - zzz -c "touch /test/a.py"
    [root@ccc ~]# touch /test/b.py
    [root@ccc ~]# ll /test 
    總用量 0
    -rw-rw-r-- 1 zzz  it 0 10月 29 19:36 a.py  
    -rw-r--r-- 1 root it 0 10月 29 19:37 b.py
    # 在目錄被SGID修飾後,所有用戶在此目錄下創建的文件的組都屬於這個目錄所在的組
    

10.3.3 SBIT(Sticky)

  • 目前僅對目錄有效,用來阻止非文件的所有者刪除文件,常見的就是/tmp目錄

    [root@ccc ~]# ll -d /tmp/
    drwxrwxrwt. 28 root root 4096 10月 29 09:09 /tmp/
    
  • 許可權資訊最後一位t表明目錄被設置SBIT許可權,表明自己和root才有權力刪除,主要作用於共享文件夾。

  • 用o+t或1755增加許可權

    ===================目錄未設置SBIT許可權,任意用戶都可刪除目錄下文件======================
    
    [root@ccc ~]# mkdir /share
    [root@ccc ~]# chmod 777 /share/
    [root@ccc ~]# useradd user01
    [root@ccc ~]# useradd user02
    [root@ccc ~]# useradd user03
    [root@ccc ~]# useradd user04
    [root@ccc ~]# su - user01 -c "touch /share/1.py"
    [root@ccc ~]# su - user02 -c "touch /share/2.py"
    [root@ccc ~]# su - user03 -c "touch /share/3.py"
    [root@ccc ~]# su - user04 -c "touch /share/4.py"
    [root@ccc ~]# ll /share/
    總用量 0
    -rw-rw-r-- 1 user01 user01 0 10月 29 20:07 1.py
    -rw-rw-r-- 1 user02 user02 0 10月 29 20:08 2.py
    -rw-rw-r-- 1 user03 user03 0 10月 29 20:08 3.py
    -rw-rw-r-- 1 user04 user04 0 10月 29 20:08 4.py
    [root@ccc ~]# su - user04
    上一次登錄:四 10月 29 20:08:17 CST 2020pts/1 上
    [user04@ccc ~]$ rm -rf /share/1.py 
    [user04@ccc ~]$ rm -rf /share/2.py 
    [user04@ccc ~]$ rm -rf /share/3.py 
    [user04@ccc ~]$ rm -rf /share/4.py 
    [user04@ccc ~]$ exit
    登出
    [root@ccc ~]# ll /share/
    總用量 0
    
    ===================目錄設置SBIT許可權,用戶只可刪除自己創建的文件=======================
    
    [root@ccc ~]# chmod o+t /share/
    [root@ccc ~]# ll -d /share/
    drwxrwxrwt 2 root root 6 10月 29 20:09 /share/
    [root@ccc ~]# su - user01 -c "touch /share/1.py"
    [root@ccc ~]# su - user02 -c "touch /share/2.py"
    ^[[A[root@ccc su - user03 -c "touch /share/3.py"
    [root@ccc ~]# su - user04 -c "touch /share/4.py"
    [root@ccc ~]# su - user04
    上一次登錄:四 10月 29 20:14:57 CST 2020pts/1 上
    [user04@ccc ~]$ rm -rf /share/1.py 
    rm: 無法刪除"/share/1.py": 不允許的操作  # 不能刪除其他用戶創建的文件
    [user04@ccc ~]$ rm -rf /share/2.py 
    rm: 無法刪除"/share/2.py": 不允許的操作
    [user04@ccc ~]$ rm -rf /share/3.py 
    rm: 無法刪除"/share/3.py": 不允許的操作
    [user04@ccc ~]$ rm -rf /share/4.py    # 只能刪除自己創建的文件
    [user04@ccc ~]$ exit
    登出
    [root@ccc ~]# rm -rf /share/*   # root用戶可以刪除無論誰創建的一切文件
    [root@ccc ~]# ll /share/
    總用量 0
    
    ================================必須要有x執行許可權=================================
    
    [root@ccc ~]# chmod o+t /share/
    [root@ccc ~]# chmod o-x /share/
    [root@ccc ~]# ll -d /share/
    drwxrwxrwT 2 root root 6 10月 29 20:16 /share/
    [root@ccc ~]# su - user01 -c "touch /share/1.py"
    touch: 無法創建"/share/1.py": 許可權不夠
    

10.4 用戶許可權管理之umask

10.4.1 umask作用

  • 新建文件、目錄的默認許可權都是由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設置的值越小,許可權越大,要慎用

  • 示例

    [root@ccc ~]# umask 777
    [root@ccc ~]# umask
    0777
    [root@ccc ~]# touch 1.py
    [root@ccc ~]# mkdir 1
    [root@ccc ~]# ll 1.py 
    ---------- 1 root root 0 10月 29 20:39 1.py
    [root@ccc ~]# ll -d 1 
    d--------- 2 root root 6 10月 29 20:39 1
    

10.4.2 設置umask

  • 臨時設置

    [root@ccc ~]# umask 777
    [root@ccc ~]# umask
    0777
    
  • 永久設置

    [root@ccc ~]# vim /etc/profile
    if [ $UID -gt 199 ] && [ "`/usr/bin/id -gn`" = "`/usr/bin/id -un`" ]; then
        umask 002  # 表示uid>=199的默認umask值,普通用戶
    else
        umask 022  # 表示uid<199的默認umask值,表示root
    fi
    
Tags: