什么是用戶
用戶賬戶在可以運行命令的不同人員和程序之間提供安全界限。
在Linux系統中,系統通過分配唯一的標識號(用戶ID或UID)來區分不同的用戶帳戶。
在Linux系統中,用戶帳戶有以下三種主要類型:
- 超級用戶
負責管理系統。超級用戶的名稱為root。UID為0,具有完全的系統訪問權限。
- 系統用戶
供提供支持服務的進程使用。用戶無法使用系統用戶帳戶以交互式方式登錄。
- 普通用戶。
普通用戶對系統具有有限的訪問權限。
使用id命令可顯示有關當前已登錄用戶的信息;
[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 ~]# id user
uid=1000(user) gid=1000(user) groups=1000(user)
使用ls命令-l選項可以查看文件的所有者。
對以上字段的說明:
drwxr-xr-x. 表示權限,d表示為文件夾,通常為3段,第一段為user,第二段為group,第三段為others,它們的最高權限位rwx.
1 第二列內容表示鏈接
第三列root表示該文件或者文件夾的擁有者為root,即所屬用戶。
第四列root表示該文件或者文件夾的所屬組為root,即所屬組。
第五列表示文件的大小。
Jul 8 14:10 表示文件或者文件夾的修改時間。
最后一列表示文件名稱或者文件夾名稱。
默認情況下,系統使用/etc/passwd文件存儲有關本地用戶的信息。
user 此用戶的用戶名;
x: 用戶的加密密碼存儲在這里,是一個占位符;
1000: 此用戶帳戶的UID編號;
1000: 此用戶帳戶的主要組的GID編號;
user: 此用戶的簡短注釋、描述;
/home/user: 用戶的主目錄,以及登錄shell啟動時的初始工作目錄;
/bin/bash: 此用戶的默認shell程序,在登錄時運行。
用戶相關文件
/etc/passwd
:存儲用戶賬戶信息的文件。/etc/shadow
:存儲用戶密碼及其相關信息的文件。/etc/group
:存儲組信息的文件。
常用用戶管理命令:
useradd:創建或添加一個新用戶。
useradd 命令可以創建名為username的用戶(username替換為實際創建的用戶名)。它會設置用戶的主目錄和帳戶信息,并為該用戶創建一個私有組。
在rhel9中,useradd命令為新用戶分配第一個大于或等于1000的可用UID,除非通過-u選項進行明確指定。
[root@localhost ~]# useradd user
[root@localhost ~]# id user
uid=1002(user) gid=1005(user) groups=1005(user)
?
usermod用于修改用戶的各項參數信息。
usernod --help命令顯示用于修改帳戶的基本選項。
usermod選項 | 用法 |
-a --append | 與-G選項一起使用將補充組添加到用戶當前的組成員集合中,而不是將補充組集合替換為新的集合。 |
-c --comment COMMENT | 將COMMENT文本添加到 注釋字段。 |
-d,--home HOME_DIR | 為用戶帳戶指定一個主目錄。 |
-g,--gid GROUP | 為用戶帳戶指定主要組。 |
-G | 為用戶帳戶指定補充組的逗號分隔列表。 |
-L, --lock | 鎖定用戶帳戶。 |
-u,--unlock | 解鎖用戶帳戶。 |
-m | 將用戶的主目錄移到新的位置。必須將其與-d選項搭配使用。 |
-s | 為用戶帳戶指定特定的登錄shell。 |
[root@localhost ~]# mkdir /alex_home
[root@localhost ~]# usermod -d /alex_home alex #為用戶指定新的主目錄;[root@localhost ~]# usermod -u 8286 alex #為用戶指定UID
[root@localhost ~]# id alex
uid=8286(alex) gid=1000(alex) groups=1000(alex)
[root@localhost ~]# usermod -L alex #鎖定用戶帳戶
??
[root@localhost ~]# usermod -U alex #解鎖用戶帳戶
[root@localhost ~]# usermod -aG docker alex #將用戶添加到docker組中
userdel 命令從/etc/passwd中刪除用戶的詳細信息,但用戶的主目錄保持不變。userdel -r 命令從/etc/passwd中刪除用戶,同時刪除用戶的主目錄。
[root@localhost ~]# userdel -r alex
[root@localhost ~]# cat /etc/passwd | grep alex
刪除用戶不指定userdel -r選項的情況刪除用戶,會造成信息泄露。
passwd 命令可為username用戶設置初始密碼,或更改其現有的密碼。
root用戶可以將密碼設置為任何值, 普通用戶必須選擇至少八個字符長的密碼。不要使用字典詞語、用戶名或舊密碼。
UID范圍
UID 0: 超級用戶root帳戶UID。
UID 1-200: 靜態分配給系統進程的系統帳戶UID。
UID 201-999: 分配給不擁有此系統上文件的系統進程的UID。需要非特權UID的軟件將會從這個可用池中動態分配UID。
UID 1000+: 分配給普通非特權用戶的UID范圍。
切換用戶
通過使用su命令,用戶可以切換至另外一個用戶帳戶。
如果從一個普通用戶切換到另外一個普通用戶,或者從普通用戶切換到超級用戶root,則需要提供要切換到的帳戶的密碼。以root用戶身份切換普通用戶時,則無需輸入用戶密碼。
[user@localhost ~]$ su - alex
Password:
[alex@localhost ~]$ su root
Password:
[root@localhost alex]# su - user
?如果普通用戶切換用戶時省略用戶名,默認情況下su或su -命令會嘗試切換到root。
[alex@localhost ~]$ su -
Password:
[root@localhost ~]#
su 和 su -區別:
- su 切換用戶但保持當前環境。
- su - 切換用戶并加載新用戶的完整登錄環境。
sudo命令在Linux中用于以超級用戶或另一個用戶的權限執行命令。它允許受限權限的用戶執行需要更高權限的命令,而無需切換到超級用戶身份。
與su命令不同,sudo通常要求用戶輸入其自己的密碼以進行身份驗證,而不是輸入他們正嘗試訪問的用戶帳戶的密碼。
下表總結了su、su - 和sudo命令之間的區別:
su | su - | sudo | |
成為新用戶 | 是 | 是 | 依據升級的命令 |
環境 | 當前用戶的 | 新用戶的 | 當前用戶的 |
需要密碼 | 新用戶的 | 新用戶的 | 當前用戶的 |
特權 | 與新用戶相同 | 與新用戶相同 | 由配置定義 |
記錄的活動 | 僅su命令 | 僅su命令 | 依據升級的命令 |
管理本地組
?組是用戶的集合,用于簡化對多個用戶的權限管理。同一組內的用戶可以共享對某些文件或目錄的訪問權限。
groupadd命令用于創建組。
[root@localhost ~]# groupadd group01
[root@localhost ~]# cat /etc/group | grep group01
group01:x:1000:
groupadd命令-g選項指定供組使用的特定GID。
[root@localhost ~]# groupadd -g 2024 group02
[root@localhost ~]# cat /etc/group | grep group02
group02:x:2024:
groupadd命令-r選項用于創建系統組。
[root@localhost ~]# cat /etc/group | grep group03
group03:x:978:
普通組是由系統管理員創建的,用于將多個用戶組織在一起,以便共享文件和資源。普通組的ID(GID)通常在500(有些系統是1000)以上,這取決于系統配置。
系統組是系統默認創建的,用于分配系統進程和服務的權限。系統組的ID(GID)通常在0到499(或999)之間,這取決于系統配置。
groupmod命令可更改現有組的屬性。
groupmod命令-n選項可指定組的新名稱。
[root@localhost ~]# groupmod -n group22 group01
[root@localhost ~]# cat /etc/group | grep group22
group22:x:1000:
groupmod -g選項可指定新的GID。
[root@localhost ~]# cat /etc/group | grep group02
group02:x:2024:
[root@localhost ~]# groupmod -g 20000 group02
[root@localhost ~]# cat /etc/group | grep group02
group02:x:20000:
groupdel命令可刪除組。
[root@localhost ~]# groupdel group03
[root@localhost ~]# cat /etc/group | grep group03
如果組是現有用戶的主要組,則無法刪除它。與使用userdel命令類似,首先檢查以確保找到該組擁有的文件。
組成員資格通過用戶管理進行控制。使用usermod -g命令來更改用戶的主要組。
[root@localhost ~]# id user02
uid=1002(user02) gid=1002(user02) groups=1002(user02)
[root@localhost ~]# usermod -g group01 user02
[root@localhost ~]# id user02
uid=1002(user02) gid=1003(group01) groups=1003(group01)