用戶許可權管理之用戶與組管理
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
用戶UID0
用戶GIDroot
注釋資訊/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