使用者許可權管理之使用者與組管理

drrug發表於2020-10-28

2020.10.28星期三  正式班D17

10 使用者許可權管理

10.1 使用者許可權管理之使用者與組管理

10.1.1 使用者基本資訊

  • 什麼是使用者

    使用者是作業系統提供的一種安全機制

    使用者是許可權的化身

  • 為什麼要有使用者

    為了劃分許可權,增強安全性

    每啟動一個程式都會與一個使用者關聯

    程式-->使用者-->許可權(作用在檔案身上)

  • 什麼是組

    主組:使用者本身所在的部門

    附加組:為使用者新增的部門

  • 總結

    Linux系統把許可權分為三類:

    ①屬主對應的許可權

    ②屬組對應的許可權

    ③其他對應的許可權

    一個使用者對檔案的許可權掃描的優先順序:

    ①先看該使用者是否是檔案的屬主

    ②在1失敗的情況下,再看該使用者是否是檔案的屬組

    ③在2失敗的情況下,該使用者屬於其他人許可權

  • 使用者與組的關係

    一對一:一個使用者可以屬於一個組,使用者預設就在自己的主組下

    一對多:一個使用者可以屬於多個組,只有一個主組,但可以為使用者新增多個附加組

    多對多:多個使用者可屬於多個組

  • 檢視使用者的相關資訊

    id # 檢視當前使用者

    whoami # 檢視當前使用者是誰

    who # 檢視所有登陸的使用者

    [root@ccc ~]# id  # 檢視當前使用者
    uid=0(root) gid=0(root) 組=0(root)  # UID:使用者id,GID:主組id,組:所有組id
    [root@ccc ~]# whoami  # 檢視當前使用者是誰
    root
    [root@ccc ~]# id zzz  # 檢視zzz使用者
    uid=1000(zzz) gid=1000(zzz) 組=1000(zzz)
    [root@ccc ~]# who  # 檢視所有登入的使用者
    root     pts/0        2020-10-28 08:48 (192.168.29.2)
    root     pts/1        2020-10-28 14:50 (192.168.29.2)
    [root@ccc ~]# ps aux | grep [s]sh  # 每一個程式都有其使用者
    root        833  0.0  0.4 112924  4328 ?        Ss   10:37   0:00 /usr/sbin/sshd -D
    root       1084  0.0  0.6 161532  6096 ?        Ss   10:39   0:00 sshd: root@pts/0
    root       1570  0.0  0.6 161536  6092 ?        Ss   14:50   0:00 sshd: root@pts/1
    
  • 角色劃分

    分為管理員使用者和其他使用者

    ①管理員使用者:擁有最高許可權

    ②其他使用者:根據管理員的分配擁有不同的許可權

    UID與GID

    ①UID(User Identify)使用者ID,唯一標識一個系統使用者的賬號,uid在系統中是唯一的

    ​ UID相當於一個人的身份證,使用者名稱相當於這個人的名字

    ②GID(Group Identify)組ID

    GID相當於部門編號,UID相當於這個人的員工號

    centos7系統約定:

    UID0 # 超級管理員,最高許可權,有著極強的破壞能力

    UID1-200 # 系統使用者,用來執行系統自帶的程式,預設已建立

    UID201-999 # 系統使用者,用來執行安裝的程式,該類使用者無需登陸系統

    UID1000+ # 普通使用者,可以正常登入系統的使用者,許可權比較小,能執行的任務有限

    centos6系統約定:

    UID0 # 由超級使用者或具備超級使用者許可權的使用者建立的使用者

    UID1-499 # 系統虛擬使用者,存在滿足檔案或服務啟動的需要,一般不能登入

    UID500-65535 # 普通使用者

  • 超級使用者

    預設是root使用者,其UID和GID都是0

    root在每臺Unix/Linux作業系統中唯一且真實存在

    可以作業系統中任何檔案和命令,擁有最高的管理許可權

    1、在生產環境中,一般會禁止root賬戶通過SSH遠端連線伺服器,也會更改預設的SSH埠,以加強系統安全。

    2、企業工作中沒有特殊要求儘量不登入root使用者進行操作,應在普通使用者下操作任務,然後sudo管理普通使用者許可權,可以細到每個命令許可權分配。

    3、在Linux系統中,UID為0的使用者就是超級使用者。通常情況下不這麼做,如果確實有必要在某一操作上用到管理的許可權的話,用sudo單獨授權,不要直接用UID為0的使用者。

    作業系統—>一個國家

    root使用者—>國王

    root使用者的家目錄—>皇宮

  • tips

    Linux/Unix是一個多使用者多工的作業系統

    Windows是一個單使用者多工的作業系統

    多使用者指一次可以登入多個使用者,而非可以建立多個使用者

    多工指可以併發執行多個程式

10.1.2 與使用者、組相關檔案

  • 相關檔案

    /etc/passwd

    /etc/shadow

    /etc/group

    /etc/gshadow

  • /etc/passwd

    以root: x:0:0:root:/root:/bin/bash為例

    root
    使用者名稱稱
    x
    密碼佔位符
    0
    使用者UID
    0
    使用者GID
    root
    註釋資訊
    /root
    使用者家目錄
    /bin/bash
    登入shell
    第一列 第二列 第三列 第四列 第五列 第六列 第七列
    root:x:0:0:root:/root:/bin/bash
    
    第一欄位:使用者名稱
    第二欄位:口令,x代表密碼已經被對映到/etc/shadow檔案中
    第三欄位:UID
    第四欄位:GID
    第五欄位:描述資訊(可不寫)
    第六段:使用者家目錄所在位置
    第七段:使用者所用shell型別
    
  • /etc/shadow

    以zzz:!!:18561:0:99999:7:::為例

    定位 作用
    第一列 zzz 使用者名稱稱
    第二列 !! 密碼是一長串字串,!!表示沒有密碼
    第三列 18561 最近一次變更密碼,距1970年過了多少天
    第四列 0 密碼最少使用天數,0表示無限制
    第五列 99999 密碼最常使用天數,99999表示無限制
    第六列 7 密碼過期預警天數
    第七列 密碼過期的寬恕天數,即密碼過期後未及時修改密碼,使用者還可使用的天數
    第八列 賬號失效日期,過了這個日期賬號就無法使用
    第九列 保留,沒有被使用
    user05:!!:18563:0:99999:7:::
    root:$6$8Pjcu5JO$PbL98SMmUWvlEFu7iRBPVgKtRl3mRJpT3kA0nPuAkSkbKGKQOl1fVA76gW/4Py887etb/U5X8EenYm/H5DG7m1:18554:0:99999:7:::
    
    第一欄位:使用者名稱(登入名),在/etc/shadow中,使用者名稱和/etc/passwd是相同的,這樣就把passwd和shadow中用的使用者記錄聯絡在一起,這個欄位是非空的。
    第二欄位:密碼(已被加密),如果是x,代表這個使用者不能登陸到系統,這個欄位是非空格的。
    第三欄位:上次修改密碼的時間,是1970.01.01至最近修改的時間間隔(天)
    第四欄位:兩次修改密碼間隔最少天數;0代表禁用此功能
    第五欄位:兩次修改密碼間隔最多天數;增強管理員管理使用者口令的時效性(增強系統安全性)
    第六欄位:提前多少天警告使用者口令將過期
    第七欄位:在口令過期之後多少天禁用此使用者;即作廢多少天后系統不會提示使用者過期,完全禁用,系統不會再讓此使用者登入。
    第八欄位:使用者過期日期,指定使用者作廢的天數(1970.1.1開始的天數),為空代表永久可用
    第九欄位:保留欄位,供將來Linux發展之用
    
  • /etc/group 組檔案

    [root@ccc ~]# head -1 /etc/group
    root: x:0:

    為例

    定位 解釋
    第一列 root 使用者組的名稱
    第二列 x 使用者組的密碼佔位符
    第三列 0 使用者組的ID/GID
    第四列 顯示該使用者組作為哪個使用者的附加組,用逗號分割
  • /etc/gshadow 組密碼檔案

    [root@ccc ~]# head -1 /etc/gshadow
    root:::

    為例

    定位 解釋
    第一列 root 使用者組的名稱
    第二列 使用者組密碼,可為空或!,空或!代表沒有密碼
    第三列 使用者組管理者,也可為空,多個管理者用逗號分隔
    第四列 顯示該使用者組作為哪個使用者的附加組,多個用逗號分割
  • /etc/skel # 使用者家目錄的模板

    /home/xxx # 使用者家目錄

    /var/spool/mail/xxx # 使用者郵箱檔案

10.1.3 使用者管理命令

  • 增刪改查

    useradd  # 新增使用者
    userdel  # 刪除使用者
    usermod  # 修改使用者資訊
    
  • 建立使用者useradd

    [root@ccc ~]# useradd user01
    [root@ccc ~]# 
    
  • 檢視使用者id

    [root@ccc ~]# id user01  # 檢視user01的使用者資訊
    uid=1001(user01) gid=1001(user01) 組=1001(user01)
    [root@ccc ~]# who  # 檢視所有登陸的使用者資訊
    root     pts/1        2020-10-28 14:50 (192.168.29.2)
    [root@ccc ~]# whoami  # 檢視當前登入的使用者名稱
    root
    

    當建立一個使用者時,沒有指定使用者的主組,將會建立一個同名的組作為使用者的主組

  • 刪除使用者userdel

    [root@ccc ~]# userdel user01  # 刪除使用者user01,但不刪除使用者家目錄和mail
    [root@ccc ~]# userdel -r user02  # -r徹底刪除
    
  • useradd命令(建立使用者的同時指定選項)

    # 在Linux系統中新增一個新的使用者賬戶(useradd)
    -u  # 指定使用者的UID
    -g  # 指定使用者所屬的主組
    -G  # 指定使用者所屬的附加組
    -d  # 指定使用者的家目錄
    -c  # 指定使用者的備註資訊
    -s  # 指定使用者所用的shell
    -e  # 修改過期時間
    -M  # 不建立家目錄
    -r  # 建立系統賬戶,UID處於系統使用者範圍內,預設就沒有家目錄
    
    # 示例
    # 系統中新增一個fox使用者
    [root@ccc ~]# useradd fox
    # 系統中新增一個使用者user01,屬組為police,UID為600
    [root@ccc ~]# useradd -u 600 -g police user01
    useradd:“police”組不存在
    [root@ccc ~]# groupadd police  # 建立組police
    [root@ccc ~]# useradd -u 600 -g police user01  # 按要求新增user01使用者
    [root@ccc ~]# id user01
    uid=600(user01) gid=1007(police) 組=1007(police)
    
    # 練習
    [root@ccc ~]# useradd user01  # 建立預設使用者user01
    
    [root@ccc ~]# useradd -u 555 user02  # 指定02使用者UID為555
    [root@ccc ~]# id user02
    uid=555(user02) gid=1008(user02) 組=1008(user02)
    
    [root@ccc ~]# useradd -d /home/我是03指定的 user03  # 指定03使用者的家目錄
    [root@ccc ~]# useradd -M user04  # 指定04使用者不建立家目錄
    [root@ccc ~]# ll /home/
    總用量 0
    drwx------ 2 user01 user01 62 10月 28 19:23 user01
    drwx------ 2 user02 user02 62 10月 28 19:23 user02
    drwx------ 2 zzz    zzz    83 10月 26 16:07 zzz
    drwx------ 2 user03 user03 62 10月 28 19:24 我是03指定的
    
    [root@ccc ~]# useradd -s /sbin/nologin user05  # 指定05使用者的shell
    [root@ccc ~]# tail -1 /etc/passwd
    user05:x:1004:1004::/home/user05:/sbin/nologin
    
    [root@ccc ~]# useradd -g hr user06  # 指定06使用者的主組為hr
    [root@ccc ~]# id user06
    uid=1005(user06) gid=1009(hr) 組=1009(hr)
    
    [root@ccc ~]# useradd -G sale user07  # 指定07使用者的附加組為sale
    [root@ccc ~]# id user07
    uid=1006(user07) gid=1011(user07) 組=1011(user07),1010(sale)
    
  • usermod命令

    usermod引數與useradd一致

    # 常用引數
    -u  # 指定要修改使用者的UID
    -g  # 指定要修改使用者的主組
    -a  # 將使用者新增到附加組,只可與-G組合使用
    -G  # 指定要修改使用者的附加組,用逗號隔開多個附加組,-G是覆蓋,-a -G是新增
    -d  # 指定要修改使用者的家目錄
    -c  # 指定要修改使用者的註釋資訊
    -s  # 指定要修改使用者的bash shell
    
    # 其他選項
    -m  # 將使用者主目錄內容移動到新位置。若當前主目錄不存在則不會建立新的主目錄。
    -l  # 指定要修改使用者的登入名
    -L  # 指定要鎖定的使用者
    -U  # 指定要解鎖的使用者
    
  • 設定與修改密碼

    passwd  # 預設給當前使用者設定密碼
    passwd 使用者名稱  # root使用者可以給自己以及其他使用者設定密碼,普通使用者只能設定自己的密碼
    echo "密碼" | passwd --stdin 使用者名稱  # 非互動式設定密碼
    
  • 補充

    # 使用系統內建變數生成隨機字串來充當密碼
    [root@ccc ~]# echo $RANDOM | md5sum | cut -c 1-10
    c0ab942940
    [root@ccc ~]# echo $RANDOM | md5sum | cut -c 1-10
    a1880bb783
    
    

10.1.4 組管理命令

  • 組管理基本命令

    groupadd  # 新建組
    groupmod  # 修改組資訊
    groupdel  # 刪除組
    groupwd  # 設定組密碼
    newgrp  # 切換主組(臨時給其他使用者組的許可權)
    
  • 建立組

    [root@ccc ~]# groupadd gg1  # 建立基本組,不指定GID
    [root@ccc ~]# tail -1 /etc/group
    gg1:x:1001:
    [root@ccc ~]# groupadd -g 6666 gg2  # 指定GID為6666
    [root@ccc ~]# tail -1 /etc/group
    gg2:x:6666:
    [root@ccc ~]# groupadd -r gg3  # 建立系統組,GID範圍201~999
    [root@ccc ~]# tail -1 /etc/group
    gg3:x:995:
    
  • 修改組(-g:修改GID -n:修改組名稱)

    [root@ccc ~]# groupadd nice  # 新建組nice
    [root@ccc ~]# tail -1 /etc/group
    nice:x:1001:
    [root@ccc ~]# groupmod -g 6666 nice  # 將組nice的GID改為6666
    [root@ccc ~]# tail -1 /etc/group
    nice:x:6666:
    [root@ccc ~]# groupmod -n NICE nice  # 將組nice名稱修改為NICE
    [root@ccc ~]# tail -1 /etc/group
    NICE:x:6666:
    
  • 刪除組

    # 當一個組作為某一個使用者的主組時,該組不能被刪除
    # 刪掉使用者會預設一起刪掉與使用者同時創立的同名主組
    
    # 建立使用者cjx
    [root@ccc ~]# useradd cjx
    # 建立組liuliuliu
    [root@ccc ~]# groupadd liuliuliu 
    # 將liuliuliu作為使用者cjx的附加組
    [root@ccc ~]# usermod -G liuliuliu cjx 
    # 檢視使用者cjx的資訊,此時有liuliuliu附加組
    [root@ccc ~]# id cjx 
    uid=1001(cjx) gid=1001(cjx) 組=1001(cjx),1002(liuliuliu)
    # 刪除組liuliuliu,成功
    [root@ccc ~]# groupdel liuliuliu
    # 檢視使用者cjx的資訊,此時liuliuliu附加組被刪除
    [root@ccc ~]# id cjx  
    uid=1001(cjx) gid=1001(cjx) 組=1001(cjx)
    # 無法刪除組cjx,因為組cjx是使用者cjx的主組
    [root@ccc ~]# groupdel cjx 
    groupdel:不能移除使用者“cjx”的主組
    
  • 組成員管理

    組的分類:

    ①主組(基本組),使用者只能有一個基本組,建立時可通過-g指定,未指定則建立一個與使用者同名的預設組

    ②附加組,使用者可以屬於多個附加組,加入一個組後就擁有該組的許可權

    # gpasswd針對已存在的使用者,將使用者新增到組或從組中刪除
    # 組長可以往組裡增加或刪除使用者
    [root@ccc ~]# useradd user01
    [root@ccc ~]# useradd user02
    [root@ccc ~]# useradd user03
    [root@ccc ~]# useradd user04
    [root@ccc ~]# useradd user05
    [root@ccc ~]# groupadd it
    [root@ccc ~]# gpasswd -M user01,user02,user03 it  # 給010203新增附加組it
    [root@ccc ~]# id user01
    uid=1001(user01) gid=1001(user01) 組=1001(user01),1006(it)
    [root@ccc ~]# id user02
    uid=1002(user02) gid=1002(user02) 組=1002(user02),1006(it)
    [root@ccc ~]# id user03
    uid=1003(user03) gid=1003(user03) 組=1003(user03),1006(it)
    [root@ccc ~]# gpasswd -A user01 it  # 指定01為it組組長
    [root@ccc ~]# su - user01
    [user01@ccc ~]$ gpasswd -a user04 it
    正在將使用者“user04”加入到“it”組中
    [user01@ccc ~]$ exit
    登出
    [root@ccc ~]# id user04
    uid=1004(user04) gid=1004(user04) 組=1004(user04),1006(it)
    [root@ccc ~]# su - user02
    [user02@ccc ~]$ gpasswd -a user05 it
    gpasswd:沒有許可權。
    [user02@ccc ~]$ exit
    登出
    [root@ccc ~]# gpasswd -d user04 it
    正在將使用者“user04”從“it”組中刪除
    [root@ccc ~]# id user04
    uid=1004(user04) gid=1004(user04) 組=1004(user04)
    [root@ccc ~]# su - user01
    上一次登入:三 10月 28 16:49:23 CST 2020pts/1 上
    [user01@ccc ~]$ gpasswd -d user02 it
    正在將使用者“user02”從“it”組中刪除
    [user01@ccc ~]$ gpasswd -d user03 it
    正在將使用者“user03”從“it”組中刪除
    [user01@ccc ~]$ exit
    登出
    [root@ccc ~]# id user02
    uid=1002(user02) gid=1002(user02) 組=1002(user02)
    [root@ccc ~]# id user03
    uid=1003(user03) gid=1003(user03) 組=1003(user03)
    [root@ccc ~]# id user04
    uid=1004(user04) gid=1004(user04) 組=1004(user04)
    [root@ccc ~]# id user05
    uid=1005(user05) gid=1005(user05) 組=1005(user05)
    [root@ccc ~]# su - user01
    上一次登入:三 10月 28 16:53:48 CST 2020pts/1 上
    [user01@ccc ~]$ gpasswd -d user01 it
    正在將使用者“user01”從“it”組中刪除
    [user01@ccc ~]$ exit
    登出
    [root@ccc ~]# id user01
    uid=1001(user01) gid=1001(user01) 組=1001(user01)
    

    為組設定密碼,可以讓非組成員的使用者通過命令"newgrp 組"臨時切換到組內

    以輸入密碼的方式獲取該使用者組的許可權和特性

    # 建立一個對/mnt/a.py有w許可權的且有密碼的組group1
    [root@ccc ~]# groupadd group1
    [root@ccc ~]# gpasswd group1
    正在修改 group1 組的密碼
    新密碼:
    請重新輸入新密碼:
    [root@ccc ~]# touch /mnt/a.py
    [root@ccc ~]# ll /mnt/a.py 
    -rw-r--r-- 1 root root 0 10月 28 21:00 /mnt/a.py
    [root@ccc ~]# chown .group1 /mnt/a.py 
    [root@ccc ~]# !ll
    ll /mnt/a.py 
    -rw-r--r-- 1 root group1 0 10月 28 21:00 /mnt/a.py
    [root@ccc ~]# chmod g+w /mnt/a.py 
    [root@ccc ~]# ll /mnt/a.py 
    -rw-rw-r-- 1 root group1 0 10月 28 21:00 /mnt/a.py
    # 切換到一個對/mnt/a.py是其他使用者的zzz使用者,來修改a.py
    [root@ccc ~]# su - zzz
    上一次登入:一 10月 26 16:07:44 CST 2020pts/1 上
    [zzz@ccc ~]$ echo 520 >> /mnt/a.py 
    -bash: /mnt/a.py: 許可權不夠
    [zzz@ccc ~]$ newgrp group1  # 臨時切換到組group1下,擁有其許可權
    密碼:
    [zzz@ccc ~]$ echo 520 >> /mnt/a.py 
    [zzz@ccc ~]$ cat /mnt/a.py 
    520
    [zzz@ccc ~]$ exit  # 第一次exit是退出組group1
    exit
    [zzz@ccc ~]$ exit  # 第二次exit才是退出使用者登入
    登出
    [root@ccc ~]# 
    

10.1.5 手動建立使用者

  • 準備使用者資訊(/etc/passwd /etc/shadow)

    [root@ccc ~]# vim /etc/passwd  # 使用者名稱底下新增一行(內容如下)
    [root@ccc ~]# tail -1 /etc/passwd
    cjx:x:5200:5200::/home/cjx:/bin/bash
    [root@ccc ~]# openssl passwd -1 -salt 'cjxcjxcjx'  # 手動製作密碼
    Password: 
    $1$cjxcjxcj$e9/G6tp0yKw7gcywyOTSZ/
    [root@ccc ~]# vim /etc/shadow  # 使用者密碼新增如下一行
    [root@ccc ~]# tail -1 /etc/shadow
    cjx:$1$cjxcjxcj$e9/G6tp0yKw7gcywyOTSZ/:18561:0:99999:7:::
    
  • 準備組資訊(/etc/group /etc/gshadow)

    [root@ccc ~]# vim /etc/group  # 組名新增如下一行
    [root@ccc ~]# tail -1 /etc/group
    cjx:x:1001:
    [root@ccc ~]# vim /etc/gshadow  # 組密碼新增如下一行
    [root@ccc ~]# tail -1 /etc/gshadow
    cjx:!::
    
  • 準備家目錄(/home/xxx 模板/etc/skel)

    [root@ccc ~]# mkdir /home/cjx  # 新建家目錄資料夾
    [root@ccc ~]# cp -r /etc/skel/.[!.]* /home/cjx/  # 將模板檔案複製過來
    [root@ccc ~]# chmod 700 /home/cjx/  # 更改/home/cjx許可權
    [root@ccc ~]# chown -R cjx.cjx /home/cjx/  # 更改/home/cjx的屬主屬組
    [root@ccc ~]# ll -a /home/cjx/
    總用量 12
    drwx------  2 cjx  cjx   62 10月 28 21:26 .
    drwxr-xr-x. 4 root root  28 10月 28 21:26 ..
    -rw-r--r--  1 cjx  cjx   18 10月 28 21:26 .bash_logout
    -rw-r--r--  1 cjx  cjx  193 10月 28 21:26 .bash_profile
    -rw-r--r--  1 cjx  cjx  231 10月 28 21:26 .bashrc
    
  • 準備郵箱(/var/spool/mail/xxx)

    [root@ccc ~]# touch /var/spool/mail/cjx
    [root@ccc ~]# chown 660 !$  # 更改許可權
    chown 660 /var/spool/mail/cjx
    [root@ccc ~]# chown cjx.mail /var/spool/mail/cjx   # 更改屬主屬組
    [root@ccc ~]# ll /var/spool/mail/
    總用量 0
    -rw-rw---- 1 cjx mail 0 10月 28 21:29 cjx
    

相關文章