Linux - 權限管理(用戶組管理)
一:Linux用戶介紹
1.什么是用戶?
用戶對硬件資源的操作都需要通過操作系統,比如用戶要讀取硬盤中的一份關鍵數據
出於安全考慮,操作系統的開發者們都專門開發了安全機制,要使用操作系統必須事先輸入`正確的用戶名與密
碼`
這便是用戶的由來
2.為何要創建用戶?
主要是因為權限問題
- 系統上的每一個進程,都需要一個特定的用戶運行,一個用戶擁有特定的權限,該用戶運行的進程與用戶權限一致
- 通常在公司是使用普通用戶管理服務器,因為root權限過大,容易出問題
3.如何查看用戶相關信息?
# 查看當前用戶 [root@localhost ~]# id uid=0(root) gid=0(root) groups=0(root) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 # 查看當前用戶是誰 [root@localhost ~]# whoami root # 查看darker用戶 [root@localhost ~]# id darker # 查看所有登錄的用戶 [root@localhost ~]# who root pts/0 2020-11-24 15:38 (192.168.50.1) # 每一個進程都有其用戶 [root@localhost ~]# ps aux | grep [s]sh root 1103 0.0 0.3 83040 3656 ? Ss 15:38 0:00 /usr/sbin/sshd -D root 2242 0.0 0.5 141268 5296 ? Ss 15:38 0:00 sshd: root@pts/0
4.Linux系統中用戶角色划分
在Linux系統中的用戶分為管理員用戶與其他用戶
- 管理員用戶擁有最高權限
- 其他用戶根據管理員的分配擁有不同的權限
對於
Linux系統來說,用戶的角色是通過UID和GID識別的用戶系統帳號的名稱(如darker)其實給人(管理員)看的
Linux系統能夠識別的僅僅是UID和GID這樣的數字
UID 與 GID
- UID (User Identify)用戶ID
唯一標識一個系統用戶的帳號,uid在系統中是唯一的
uid相當於一個人的身份證,用戶名就相當於這個人的名字
- GID (Group Identify)組ID
如果把一個操作系統當成一家公司,uid相當於這個人的員工號,gid相當於他的部門編號
Centos7系統之前約定
| UID | 角色 | 備注 |
|---|---|---|
| 0 | 超級用戶 具備超級用戶權限的用戶創建的用戶 |
|
| 1 - 499 | 系統虛擬用戶 | UID范圍1-499,存在滿足文件或服務啟動的需要 一般不能登錄,只是傀儡 |
| 500 - 65535 | 普通用戶 |
Centos7系統約定
| UID | 角色 | 備注 |
|---|---|---|
| 0 | 超級管理員 | 最高權限,有着極強的破壞能力 |
| 1 - 200 | 系統用戶 | 用來運行系統自帶的進程,默認已創建 |
| 201 - 999 | 系統用戶 | 用來運行安裝的程序,所以此類用戶無需登錄系統 |
| 1000+ | 普通用戶 | 正常可以登錄系統的用戶,權限比較小,能執行的任務有限 |
用戶和組的關系
- 一對一
- 一對多
- 多對一
- 多對多
5.超級用戶
默認是root用戶,其UID和GID均為0
root用戶在每台Unix/Linux操作系統中都是唯一且真實存在的
通過它可以登錄系統,可以操作系統中任何文件和命令,擁有最高的管理權限
舉個例子
| 對象 | 相當於 |
|---|---|
| 操作系統 | 1個國家 |
| root用戶 | 國王 |
| root用戶的家目錄 | 皇宮 |
注意點
- 在生產環境中,一般會禁止root帳號通過SSH遠程連接服務器(保護好皇帝),當然,也會更改默認 的SSH端口(保護好皇宮),以加強系統安全。
- 企業工作中:沒有特殊需求,應該盡量不要登錄root用戶進行操作,應該在普通用戶下操作任務,然后 用sudo管理普通用戶的權限,可以細到每個命令權限分配。
- 在Linux系統中,uid為0的用戶就是超級用戶。但是通常不這么做,如果確實有必要在某一操作上用到 管理的權限的話,那就用sudo單獨授權,也不要直接用uid為0的用戶
6.擴展
Linux與Windows
- Linux/Unix是一個
多用戶、多任務的操作系統 - Windows是一個
單用戶、多任務操作系統
多用戶不是說可以創建多個用戶,而是指一次可以登錄多個用戶
多任務指的是可以並發執行多個進程
Linux發展史
Multics -> Unix -> Linux
所以Linux是多用戶的,天然支持多個連機終端,連機終端在沒有互聯網的情況下是有意義的
多個人可以用不同的連機終端連到一台機器/服務器上使用,而有了互聯網之后
多個人可通過網絡訪問服務器,這個時候多用戶or單用戶的概念就不再那么重要
二:用戶 與 組 相關文件
和用戶、組相關的文件
/etc/passwd
[root@localhost ~]# head -1 /etc/passwd root:x:0:0:root:/root:/bin/bash
以:為分隔符號,分成7部分
| 組成 | 內容 | 釋義 |
|---|---|---|
| 第1部分 | root | 用戶名/登錄名 |
| 第2部分 | x | 口令,x表示密碼占位符 其實密碼已經被映射到 /etc/shadow文件中 |
| 第3部分 | 0 | UID |
| 第4部分 | 0 | GID |
| 第5部分 | root | 描述信息(可選) |
| 第6部分 | /root | 用戶的家目錄所在的位置 |
| 第7部分 | /bin/bash | 用戶所用的shell類型 |
/etc/shadow
[root@localhost ~]# head -1 /etc/shadow root:$6$Jvw3z/jmU1ASO4P1$vpTJ5OGEtfBOmIpjyK55k87iQPHXCC3.kKOFW9jkyslqC2DMdN7SZdT/zYRfmQ4hBAQXG6CQ4kKdRQ8eFqChf.::0:99999:7:::
以:為分隔符號,分成9部分
| 組成 | 內容 | 釋義 |
|---|---|---|
| 第1部分 | root | 用戶名/登錄名 |
| 第2部分 | $6$Jvw3z/j... | 密碼的匿文,!!表示沒有密碼 |
| 第3部分 | 最近一次變更密碼:距離1970年1月1日過去了幾天 | |
| 第4部分 | 0 | 密碼最短使用天數:0表示無限制 |
| 第5部分 | 99999 | 密碼最長使用天數:99999表示無限制 |
| 第6部分 | 7 | 密碼過期預警天數 |
| 第7部分 | 密碼過期的寬恕時間: 密碼過期后如果沒有修改密碼,用戶還可以使用的天數 |
|
| 第8部分 | 賬號失效日期:過了這個日期,該賬號就無法使用了 | |
| 第9部分 | 保留字段,未被使用(便於后期的功能添加) |
各部分詳解
- 第1部分
用戶名(也被稱為登錄名)
在/etc/shadow中,用戶名和/etc/passwd 是相同的
這樣就把passwd和shadow中用的用戶記錄聯系在一起
這個字段是非空的
- 第2部分
密碼(已被加密)
如果有些用戶在這段是x,表示這個用戶不能登錄到系統
這個字段是非空的
- 第3部分
上次修改口令的時間
這個時間是從1970年1 月1日算起到最近一次修改口令的時間間隔(天數)
可以通過passwd來修改用戶的密碼,然后查看/etc/shadow中此字段的變化
- 第4部分
兩次修改口令間隔最少的天數
如果設置為0:則 禁用此功能,也就是說用戶必須經過多少天才能修改其口 令
默認值是通 過/etc/login.defs文件定義中獲取,PASS_MIN_DAYS 中有定義
- 第5部分
兩次修改口令間隔最多的天數
這個能增強管理員管理用戶口令的時效性,應該說在增強了系統的安全性
如果是系統默認值,是在添加用戶時由/etc/login.defs 文件定義中獲取,PASS_MAX_DAYS中定義
- 第6部分
提前多少天警告用戶口令將過期
當用戶登錄系統后,系統登錄程序提醒用戶口令將要作廢
如果是系統默認值,是在添加用戶時由/etc/login.defs文件定義中獲取,在PASS_WARN_AGE中定義
- 第7部分
在口令過期之后多少天禁用此用戶
此字段表示 用戶口令作廢多少天后,系統會禁用此用戶
也就是說系統會不能再讓此用戶登錄,也不會提示用戶過期,是完全禁用
- 第8部分
用戶過期日期
此字段指定了用戶作廢的天數(從1970年的1月1日開始的天數)
如果這個字段的值為空,帳號永久可用
- 第9部分
保留字段
目前為空,以備將來Linux發展之用
/etc/group
[root@localhost ~]# head -1 /etc/group root:x:0:
| 組成 | 內容 | 釋義 |
|---|---|---|
| 第1部分 | root | 用戶組的名稱 |
| 第2部分 | x | 用戶組的密碼占位符 |
| 第3部分 | 0 | 用戶組的id(也就是GID) |
| 第4部分 | 顯示該用戶組作為哪個用戶附加組,用,隔開 |
/etc/gshadow
[root@localhost ~]# head -1 /etc/gshadow root:::
| 組成 | 內容 | 釋義 |
|---|---|---|
| 第1部分 | root | 用戶組的名稱 |
| 第2部分 | 用戶組密碼,該字段可以為空或!表示沒有密碼 |
|
| 第3部分 | 用戶組管理者,該字段可以為空如果有多個用戶組管理者,用 ,隔開 |
|
| 第4部分 | 顯示該用戶組作為哪個用戶附加組,用,隔開 |
/etc/skel
用戶老家的目錄
/home/用戶名
普通用戶的家目錄
/var/spool/mail/用戶名
用戶的郵箱文件
三:用戶管理命令
1.創建用戶
# 創建用戶:darker
[root@localhost ~]# useradd darker
2.查看用戶
# 查看用戶:darker [root@localhost ~]# id darker uid=1000(darker) gid=1000(darker) groups=1000(darker) # 查看所有登錄的用戶信息 [root@localhost ~]# who # 查看當前登錄的用戶名 [root@localhost ~]# whoami # 查看系統內置用戶 [root@localhost ~]# vim /etc/passwd root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin adm:x:3:4:adm:/var/adm:/sbin/nologin lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin sync:x:5:0:sync:/sbin:/bin/sync shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown halt:x:7:0:halt:/sbin:/sbin/halt mail:x:8:12:mail:/var/spool/mail:/sbin/nologin operator:x:11:0:operator:/root:/sbin/nologin games:x:12:100:games:/usr/games:/sbin/nologin ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin nobody:x:99:99:Nobody:/:/sbin/nologin avahi-autoipd:x:170:170:Avahi IPv4LL Stack:/var/lib/avahi-autoipd:/sbin/nologin systemd-bus-proxy:x:999:997:systemd Bus Proxy:/:/sbin/nologin systemd-network:x:998:996:systemd Network Management:/:/sbin/nologin dbus:x:81:81:System message bus:/:/sbin/nologin polkitd:x:997:995:User for polkitd:/:/sbin/nologin tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin postfix:x:89:89::/var/spool/postfix:/sbin/nologin sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin ntp:x:38:38::/etc/ntp:/sbin/nologin darker:x:1000:1000::/home/darker:/bin/bash
注意:當創建一個用戶時,如果
沒有指定用戶的主組,將會創建一個與用戶名同名的組作為用戶的主組查看系統內置用戶時,用戶名后面的
x是密碼的占位符
3.刪除用戶
# 刪除用戶user1,但不刪除用戶家目錄和mail [root@localhost ~]# userdel user1 # 要想刪徹底,加-r選項 [root@localhost ~]# userdel -r user1
4.useradd命令詳解:創建用戶的同時指定選項
useradd命令的常用選項
| 選項 | 作用 |
|---|---|
| -u | 指定用戶的UID |
| -g | 指定用戶所屬的主群 |
| -G | 指定用戶所屬的附加群 |
| -d | 指定用戶的家目錄 |
| -c | 指定用戶的備注信息 |
| -s | 指定用戶所用的shell |
| -e | 修改過期時間 |
| -M | 不創建家目錄 |
| -r | 創建系統賬戶,uid處於系統用戶范圍內,默認就沒有家目錄 不允許登錄服務器 |
靈活應用useradd命令的舉例
# 在系統中新增一個 turtle 用戶 [root@localhost ~]# adduser turtle # 在系統中新增一個用戶user01,屬組為police以及uid為600的命令 [root@localhost ~]# useradd –u 600 –g police user01
測試
# 創建用戶usr01 [root@localhost ~]# useradd user01 # 創建用戶usr02,指定uid [root@localhost ~]# useradd user02 -u 503 # 創建用戶user03 指定家目錄 [root@localhost ~]# useradd user03 -d /aaa # 創建用戶user04,不創建家目錄 [root@localhost ~]# useradd user04 -M # 創建用戶並指定shell [root@localhost ~]# useradd user05 -s /sbin/nologin # 創建用戶,指定主組 [root@localhost ~]# useradd user06 -g hr # 創建用戶,指定附加組 [root@localhost ~]# useradd user07 -G sale # 創建用戶,指定過期時間 [root@localhost ~]# useradd user08 -e 2021-04-01 # 創建用戶,不能登錄系統 [root@localhost ~]# useradd user10 -u 4000 -s /sbin/nologin # 創建普通用戶,但是沒有家目錄,不能登錄系統 [root@localhost ~]# useradd xxx -M -s /sbin/nologin # yyy屬於系統用戶,uid處於系統用戶uid范圍內 [root@localhost ~]# useradd -r yyy -s /sbin/nologin
4.usermod命令
同useradd參數基一致,只不過useradd是添加,usermod是修改
| 選項 | 作用 |
|---|---|
| -u | 指定要修改用戶的UID |
| -g | 指定要修改用戶基本組 |
| -a | 將用戶添加到補充組。僅與-G選項一起使用 |
| -G | 指定要修改用戶附加組,使用逗號隔開多個附加組, 覆蓋原有的附加組 |
| -d | 指定要修改用戶家目錄 |
| -c | 指定要修改用戶注釋信息 |
| -s | 指定要修改用戶的bash shell |
| -m | 將用戶主目錄的內容移動到新位置 如果當前主目錄不存在,則不會創建新的主目錄 |
| -l | 指定要修改用戶的登陸名 |
| -L | 指定要鎖定的用戶 |
| -U | 指定要解鎖的用戶 |
# 修改darker用戶的過期時間 [root@localhost ~]# usermod -e 2021-02-11 darker # 修改darker用戶的主組 [root@localhost ~]# usermod -g group1 darker # 修改darker用戶的附加組,-a添加,不加-a代表覆蓋 [root@localhost ~]# usermod -a -G group2 darker
6.設定 與 修改密碼
# 默認給當前用戶設定密碼 [root@localhost ~]# passwd Changing password for user root. New password: Retype new password: passwd: a;; authentication tokens updated successfully. # root用戶可以給自己以及所有其他用戶設定密碼,普通用戶只能設定自己的密碼 [root@localhost ~]# passwd 用戶名 # 非交互式 [root@localhost ~]# echo "密碼" | passwd --stdin 用戶名 # 補充:可以利用系統內置變量生成隨機字符串來充當密碼 [root@localhost ~]# echo $RANDOM|md5sum|cut -c 1-10 70ba11a74b
測試
修改UID
# 查看幫助信息 [root@localhost ~]# usermod --help # 添加用戶darker [root@localhost ~]# useradd darker # 查看darker用戶的信息 [root@localhost ~]# grep 'darker' /etc/passwd darker:x:1000:1000::/home/darker:/bin/bash # 修改darker用戶的UID [root@localhost ~]# usermod -u 2000 darker # 修改darker用戶為不允許登錄 [root@localhost ~]# usermod -s /sbin/nologin darker # 補充,-G在沒有-a的情況下代表覆蓋原有組 # 把用戶darker添加到組group1和group2 [root@localhost ~]# usermod -G group1,group2 darker # 把用戶darker添加到組group3和group4中,此時group3,group4會覆蓋掉之前添加的group1,group2 [root@localhost ~]# usermod -G group3,group4 darker
密碼鎖定、解鎖
# 創建用戶ben [root@localhost ~]# useradd ben # 設置用戶ben的密碼 [root@localhost ~]# passwd ben Changing password for user ben. New password: Retype new password: passwd: all authentication tokens updated successfully. # 查看用戶ben的信息 [root@localhost ~]# grep 'ben' /etc/shadow ben:$6$vjGsM8pS$pjrazHjiagz7oK8vpwzi53nAdg7DaaSlj8fneLxgKeH4wPiAyxJSO58iaRMTuG4LkHuz8Ohak6mR3Z4MYA.8U0:18590:0:99999:7::: # 鎖住用戶ben [root@localhost ~]# usermod -L ben # 再次查看用戶ben的信息(比之前多了1個 ! ) [root@localhost ~]# grep 'ben' /etc/shadow ben:!$6$vjGsM8pS$pjrazHjiagz7oK8vpwzi53nAdg7DaaSlj8fneLxgKeH4wPiAyxJSO58iaRMTuG4LkHuz8Ohak6mR3Z4MYA.8U0:18590:0:99999:7::: # 登錄測試(已加鎖的用戶會顯示:Permission denied) PS C:\Users\Darker> ssh ben@192.168.50.101 ben@192.168.50.101's password: Permission denied, please try again. # 解鎖用戶ben [root@localhost ~]# usermod -U ben # 再一次查看用戶ben的信息 [root@localhost ~]# grep 'ben' /etc/shadow ben:$6$vjGsM8pS$pjrazHjiagz7oK8vpwzi53nAdg7DaaSlj8fneLxgKeH4wPiAyxJSO58iaRMTuG4LkHuz8Ohak6mR3Z4MYA.8U0:18590:0:99999:7::: # 登錄測試(此時用戶ben已解鎖,可以正常登錄) PS C:\Users\Darker> ssh ben@192.168.50.101 ben@192.168.50.101's password: Last failed login: Tue Nov 24 18:09:36 CST 2020 from 192.168.50.1 on ssh:notty There was 1 failed login attempt since the last successful login. [ben@localhost ~]$
設置賬號過期
# 查看當前時間 [root@localhost ~]# date Tue Nov 24 18:12:48 CST 2020 # 設置用戶ben的過期時間 [root@localhost ~]# usermod -e 2020-11-11 ben
useradd 命令參考的文件
# 設置用戶帳號限制的文件 /etc/login.defs # 可以使用命令 useradd -D查看 /etc/default/useradd # 用戶的初始配置文件 /etc/skel/*
擴展
useradd創建用戶時,對於未指定的選項(-u、-g等等),會以/etc/login.defs、/etc/default/useradd兩個配置文件中的配置作為參照物
配置文件/etc/login.defs詳解
# 查看配置文件/etc/login.defs [root@localhost ~]# grep -Ev "^#|^$" /etc/login.defs MAIL_DIR /var/spool/mail PASS_MAX_DAYS 99999 # 密碼最大有效期 PASS_MIN_DAYS 0 # 兩次修改密碼的最小間隔時間 PASS_MIN_LEN 5 # 密碼最小長度,對於root無效 PASS_WARN_AGE 7 # 密碼過期前多少天開始提示 UID_MIN 1000 # 用戶ID的最小值 UID_MAX 60000 # 用戶ID的最大值 SYS_UID_MIN 201 # 系統用戶ID的最小值 SYS_UID_MAX 999 # 系統用戶ID的最大值 GID_MIN 1000 # 組ID的最小值 GID_MAX 60000 # 組ID的最大值 SYS_GID_MIN 201 # 系統用戶組ID的最小值 SYS_GID_MAX 999 # 系統用戶組ID的最大值 CREATE_HOME yes # 使用useradd的時候是可以創建用戶家目錄 UMASK 077 # 創建家目錄時umask的默認控制權限 USERGROUPS_ENAB yes # 刪除用戶的時候是否同時刪除用戶組 ENCRYPT_METHOD SHA512 # #密碼加密規則
配置文件/etc/default/useradd詳解
# 查看配置文件/etc/default/useradd [root@localhost ~]# cat /etc/default/useradd # useradd defaults file GROUP=100 # 依賴於/etc/login.defs的USERGRUUPS_ENAB參數,如果為no,則在此處控制 HOME=/home # #把用戶的家目錄建在/home中 INACTIVE=-1 # 是否啟用賬號過期停權,-1表示不啟用 EXPIRE= # 賬號終止日期,不設置表示不啟用 SHELL=/bin/bash # #新用戶默認所有的shell類型 SKEL=/etc/skel # 配置新用戶家目錄的默認文件存放路徑 CREATE_MAIL_SPOOL=yes # 創建mail文件
當使用useradd創建用戶時,創建的用戶家目錄下會存在.bash_* 環境變量相關的文件,這些環境變量文件 默認從/etc/skel目錄中拷貝
這個默認拷貝環境變量位置是由/etc/default/useradd配置文件中定義的
故障案例
在當前用戶家目錄下執行了rm -rf .*命令,下次登錄系統時出現-bash-4.1$,如何解決?
-bash-4.1$ cp -a /etc/skel/.bash* ./ -bash-4.1$ exit [root@localhost ~]# # 重新連接即可恢復
誤刪家目錄的恢復方式
# (終端1)查看家目錄下有哪些用戶 [root@localhost ~]# ll /home/ total 0 drwx------. 2 ben ben 59 Nov 24 05:30 ben drwx------. 2 darker darker 59 Nov 24 05:30 darker # (終端1)刪除用戶:ben [root@localhost ~]# rm -rf /home/ben/ # (終端1)設置用戶:ben 的密碼 [root@localhost ~]# passwd ben Changing password for user ben. New password: Retype new password: passwd: all authentication tokens updated successfully. # (終端1)在家目錄下創建這個用戶 [root@localhost ~]# mkdir /home/ben # (終端2)遠程連接 PS C:\Users\Darker> ssh ben@192.168.50.101 ben@192.168.50.101's password: -bash-4.2$ pwd /home/ben -bash-4.2$ exit logout Connection to 192.168.50.101 closed. # (終端1)復制老家的文件到要恢復的用戶目錄 [root@localhost ~]# cp -a /etc/skel/.bash* /home/ben/ # (終端2)遠程連接 PS C:\Users\Darker> ssh ben@192.168.50.101 ben@192.168.50.101's password: Last login: Feb Nov 24 11:32 2020 from localhost
四:組管理
1.創建組
# 創建基本組(不指定GID) [root@localhost ~]# groupadd mygroup01 # 查看組信息 [root@localhost ~]# tail -l /etc/group dbus:x:81: polkitd:x:995: dip:x:40: tss:x:59: postdrop:x:90: postfix:x:89: sshd:x:74: darker:x:1000: ben:x:1001: mygroup01:x:1002: # 剛剛創建的組在這里 # 創建基本組(指定GID為7777) [root@localhost ~]# groupadd -g 7777 mygroup02 # 再次查看組信息 [root@localhost ~]# tail -l /etc/group polkitd:x:995: dip:x:40: tss:x:59: postdrop:x:90: postfix:x:89: sshd:x:74: darker:x:1000: ben:x:1001: mygroup01:x:1002: mygroup02:x:7777: # 剛剛創建的組在這里 # 創建基本組(GID從201-999) [root@localhost ~]# groupadd -r mygroup03 # 再一次查看組信息 [root@localhost ~]# tail -l /etc/group dip:x:40: tss:x:59: postdrop:x:90: postfix:x:89: sshd:x:74: darker:x:1000: ben:x:1001: mygroup01:x:1002: mygroup02:x:7777: mygroup03:x:994: # 剛剛創建的組在這里
2.修改組
# 修改組:mygroup01的GID為1234 [root@localhost ~]# groupmod -g 1234 mygroup01 # 查看組信息 [root@localhost ~]# tail -l /etc/group dip:x:40: tss:x:59: postdrop:x:90: postfix:x:89: sshd:x:74: darker:x:1000: ben:x:1001: mygroup01:x:1234: mygroup02:x:7777: mygroup03:x:994: # 修改組:mygroup01的名稱為mygroup001 [root@localhost ~]# groupmod -n mygroup001 mygroup01 # 查看組信息 [root@localhost ~]# tail -l /etc/group dip:x:40: tss:x:59: postdrop:x:90: postfix:x:89: sshd:x:74: darker:x:1000: ben:x:1001: mygroup02:x:7777: mygroup03:x:994: mygroup001:x:1234:
3.刪除組
如果1個組是1個用戶的主組,那么該組不能被刪除,刪掉用戶會默認一起刪掉他的主組
# 創建一個用戶:eve [root@localhost ~]# useradd eve # 創建一個組:human [root@localhost ~]# groupadd human # 將用戶:eve加入到組:human [root@localhost ~]# usermod -G human eve # 查看用戶:eve的信息 [root@localhost ~]# id eve uid=1002(eve) gid=1002(eve) groups=1002(eve),7778(human) # 附加組可以直接刪除 [root@localhost ~]# groupdel human # 再次查看用戶:eve,可以發現:它的附加組不見了 [root@localhost ~]# id eve uid=1002(eve) gid=1002(eve) groups=1002(eve) # 無法刪除組:eve,因為組:eve屬於用戶:eve的主組 [root@localhost ~]# groupdel eve groupdel: cannot remove the primary group of user 'eve'
組成員管理
對於用戶來說,組也是分類的
| 組 | 個數 | 作用 |
|---|---|---|
| 基本組 / 主組 | 有且僅有1個 | 創建時可通過-g指定 如未指定則創建一個默認 的組(與用戶同名) |
| 附加組 | 0個或多個 | 基本組不能滿足授權要求,創建附加組 將用戶加入該組 就擁有了該組的權限 |
gpasswd可以將用戶添加到組或從組中刪除,只針對已存在的用戶[root@localhost ~]# gpasswd -a user07 it # 將某個用戶加入到某個組 [root@localhost ~]# gpasswd -M user02,user03,user04 it # 將多個用戶加入到it組 [root@localhost ~]# gpasswd -A lhf it # 指定lhf為組it的組長,除了root用戶外lhf用戶也可以采用第一條命令往it組里添加成員 [root@localhost ~]# grep 'it' /etc/group # 查看it組中的成員 it:x:505:user02,user03,user04 [root@localhost ~]# gpasswd -d user07 it # 刪除用戶usr07從it組可以為組設置密碼
讓一些非組成員的用戶通過命令
newgrp 組臨時切換到組內並輸入密碼 的方式獲取用戶組的權限和特性# 創建一個組:group101 [root@localhost ~]# groupadd group101 # 給組:group101設置一個密碼 [root@localhost ~]# gpasswd group101 Changing the password for group group101 New Password: Re-enter new password: # 在臨時目錄下創建一個文件:1.txt [root@localhost ~]# touch /tmp/1.txt # 查看文件:1.txt的詳情信息 [root@localhost ~]# ll /tmp/1.txt -rw-r--r--. 1 root root 0 Nov 24 05:59 /tmp/1.txt # 設置文件:1.txt的屬組為:group101 [root@localhost ~]# chown .group101 /tmp/1.txt # 查看並執行上一次的命令ll(等同於:ll /tmp/1.txt) [root@localhost ~]# !ll ll /tmp/1.txt -rw-r--r--. 1 root group101 0 Nov 24 05:59 /tmp/1.txt # 給文件:1.txt所在的組添加w寫的權限 [root@localhost ~]# chmod g+w /tmp/1.txt # 修改組:group101的密碼 [root@localhost ~]# gpasswd group101 Changing the password for group group101 New Password: Re-enter new password: # 切換到用戶:ben,同時切換到新用戶的工作環境中 [root@localhost ~]# su - ben # 此時沒有權限 [ben@localhost ~]$ echo 1234 >> /tmp/1.txt -bash: /tmp/1.txt: 權限不夠 # 臨時切換到組group1下,擁有其權限 [ben@localhost ~]$ newgrp group101 # 此時擁有權限了,向1.txt中寫入內容:1234 [ben@localhost ~]$ echo 1234 >> /tmp/1.txt # 查看1.txt [ben@localhost ~]$ cat /tmp/1.txt 1234chown - 修改屬主 屬組信息
五:手動創建用戶
1.在
/etc/passwd中添加用戶# 用vim打開/etc/passwd [root@localhost ~]# vim /etc/passwd # 按i進入:插入模式 i # 在最后一行輸入數據 nancy:x:2020:2020::/home/nancy:/bin/bash # 退出編輯模式,保存並強制退出 Esc :wq! # 查看/etc/passwd的末行信息(默認是10條) [root@localhost ~]# tail -l /etc/passwd systemd-network:x:998:996:systemd Network Management:/:/sbin/nologin dbus:x:81:81:System message bus:/:/sbin/nologin polkitd:x:997:995:User for polkitd:/:/sbin/nologin tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin postfix:x:89:89::/var/spool/postfix:/sbin/nologin sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin darker:x:1000:1000::/home/darker:/bin/bash ben:x:1001:1001::/home/ben:/bin/bash eve:x:1002:1002::/home/eve:/bin/bash nancy:x:2020:2020::/home/nancy:/bin/bash # 有這一行,就表示成功插入了數據2.在
/etc/shadow中設置密碼# 先用openssl生成一個隨機密碼 [root@localhost ~]# openssl passwd -1 -salt 'Hello World' Password: $1$Hello Wo$r0sA58H9bZ8C3Z5VZRiRo1 # 這個就是隨機生成的密文的密碼 # 用vim打開/etc/shadow [root@localhost ~]# vim /etc/shadow # 按i進入:插入模式 i # 在最后一行輸入數據 nancy:$1$Hello Wo$r0sA58H9bZ8C3Z5VZRiRo1:18303:::::: # 退出編輯模式,保存並強制退出 Esc :wq! # 查看/etc/shadow的末行信息(默認是10條) [root@localhost ~]# tail -l /etc/shadow systemd-network:!!:18584:::::: dbus:!!:18584:::::: polkitd:!!:18584:::::: tss:!!:18584:::::: postfix:!!:18584:::::: sshd:!!:18584:::::: darker:$6$NVQVgbXv$nCaM9zQ72TgC.RrREcvFr95arQdbKmw/idwNlSqzNamE31djv3IqqronbKOxwNN8UrtVSjeAd6/9ISqtYtGtp.:18590:0:99999:7::: ben:$6$oeDpPj5s$d8pHt3I2uIvKkDiaQCgHVpdJy2dXzbul9I9Cpko5Z80Lbsx5fu4sO5FDzS7BDQamVvw05XkiFDxOmncFajd/S0:18590:0:99999:7::: eve:!!:18590:0:99999:7::: nancy:$1$Hello Wo$r0sA58H9bZ8C3Z5VZRiRo1:18303:::::: # 有這一行,就表示成功插入了數據3.在
/etc/group中添加組# 用vim打開/etc/group [root@localhost ~]# vim /etc/group # 按i進入:插入模式 i # 在最后一行輸入數據 nancy:x:2020: # 退出編輯模式,保存並強制退出 Esc :wq! # 查看/etc/group的末行信息(默認是10條) [root@localhost ~]# tail -l /etc/group postfix:x:89: sshd:x:74: darker:x:1000: ben:x:1001: mygroup02:x:7777: mygroup03:x:994: mygroup001:x:1234: eve:x:1002: group101:x:7778: nancy:x:2020: # 有這一行,就表示成功插入了數據4.在
/etc/gshadow中添加組的密碼# 用vim打開/etc/gshadow [root@localhost ~]# vim /etc/gshadow # 按i進入:插入模式 i # 在最后一行輸入數據 nancy:!:: # 退出編輯模式,保存並強制退出 Esc :wq! # 查看/etc/gshadow的末行信息(默認是10條) [root@localhost ~]# tail -l /etc/gshadow postfix:!:: sshd:!:: darker:!:: ben:!:: mygroup02:!:: mygroup03:!:: mygroup001:!:: eve:!:: group101:$6$KctoH/FxL$hjcmvdoaTBH36wkb/10.jyBW0tNwDlf4r9w.oVa1fEgPwI6Dzl.VFwg6ERZcQfiP.I9Dij9w3ZCTng5NeFHfu.:: nancy:!:: # 有這一行,就表示成功插入了數據5.創建用戶家目錄,並用用戶老家的模板
/etc/skel/裝修一下,注意權限# 在家目錄中創建用戶的目錄:nancy [root@localhost ~]# mkdir /home/nancy # 將/etc下的skel作為模板,復制到新的用戶目錄中 [root@localhost ~]# cp -r /etc/skel/.[!.]* /home/nancy/ # 設置該目錄的權限:僅創建者擁有所有權限 [root@localhost ~]# chmod 700 /home/nancy/ # 將該用戶添加到之前創建的組中(主組) [root@localhost ~]# chown -R nancy.nancy /home/nancy/6.在
/var/spool/mail/nancy中創建用戶郵箱文件# 在/var/spool/mail/下創建一個文件,名為:nancy [root@localhost ~]# touch /var/spool/mail/nancy # 修改該文件的權限 [root@localhost ~]# chmod 660 !$ chmod 660 /var/spool/mail/nancy # 修改郵箱的屬主/屬組 [root@localhost ~]# chown nancy.mail /var/spool/mail/nancy7.開始測試賬號
# 用ssh連接 PS C:\Users\Darker> ssh nancy@192.168.50.101 nancy@192.168.50.101's password: # 查看當前登錄的用戶 [nancy@localhost ~]$ whoami nancy擴展知識
堡壘機
什么是堡壘機?
堡壘機 又名“跳板機(Jump Server)”
可作為跳板批量操作遠程設備的網絡設備,是系統管理員或運維人員常用的操作平台之一
堡壘機的特點
- 可以動態地獲取密碼
- 可以記錄各種操作(申請了賬號,登錄跳板機執行了某些命令等)
- 以錄像的性是記錄操作:X登錄了XXX,進行了XXX操作
