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 [email protected]
[email protected]'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 [email protected]
[email protected]'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 [email protected]
[email protected]'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 [email protected]
[email protected]'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
1234
chown - 修改屬主 屬組資訊
五:手動建立使用者
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/nancy
7.開始測試賬號
# 用ssh連線
PS C:\Users\Darker> ssh [email protected]
[email protected]'s password:
# 檢視當前登入的使用者
[nancy@localhost ~]$ whoami
nancy
擴充套件知識
堡壘機
什麼是堡壘機?
堡壘機 又名“跳板機(Jump Server)”
可作為跳板批量操作遠端裝置的網路裝置,是系統管理員或運維人員常用的操作平臺之一
堡壘機的特點
- 可以動態地獲取密碼
- 可以記錄各種操作(申請了賬號,登入跳板機執行了某些命令等)
- 以錄影的性是記錄操作:X登入了XXX,進行了XXX操作