如何在 Linux 中添加、修改和刪除用戶?
已發表: 2022-01-11任何操作系統中的用戶管理都是系統管理員的基本日常任務之一。
對於基於 Linux 的操作系統,它通常涉及創建用戶帳戶、修改現有帳戶(例如更改其主目錄、默認 shell、鎖定/解鎖一個或多個帳戶以及刪除用戶帳戶)。
在我們研究執行這些任務的命令和進程之前,讓我們簡要地研究一下如何在 Linux 中對用戶帳戶進行分類。 另外,請注意,除非明確指定,否則給定的命令將在大多數常見的 Linux 發行版中工作。
用戶類型
根用戶
root
用戶是操作系統的管理員,具有執行操作的所有權限。 通常,只有root
可以安裝/卸載或更新基本的系統程序和庫。 它是唯一具有系統範圍權限的用戶帳戶。
因此,root 用戶是系統中最強大的用戶。
特殊用戶
這些是沒有登錄的用戶。 他們沒有root
用戶的所有權限。 根據帳戶,他們承擔不同的專業角色。
這些是在任何應用程序安裝時自動創建的。 bin
、 sync
、 lp
、 mail
、 operator
、 squid
是特殊用戶的一些示例。
普通用戶
普通用戶僅在他們的工作目錄(通常是他們的主目錄)中擁有完全權限。 他們沒有權限管理系統或安裝軟件。 如果沒有通過sudo
的特殊權限,他們將無法執行這些任務。
添加用戶
Debian/Ubuntu
在基於 Debian 或 Ubuntu 的系統上,有幾個選項可以從 CLI 添加用戶。 第一個命令是adduser
,它是一個 Perl 腳本,在後端使用useradd
命令,我們稍後會看到它的用法。
由於添加用戶是一項特權任務,因此您需要使用sudo
作為前綴和username
作為參數。 其他細節可根據提示指定。 除用戶名和密碼外,其餘詳細信息都是可選的。 我們可以使用id
命令驗證用戶是否已創建。
$ sudo adduser johndoe Adding user `johndoe' ... Adding new group `johndoe' (1003) ... Adding new user `johndoe' (1003) with group `johndoe' ... Creating home directory `/home/johndoe' ... Copying files from `/etc/skel' ... New password: Retype new password: passwd: password updated successfully Changing the user information for johndoe Enter the new value, or press ENTER for the default Full Name []: John Doe Room Number []: Work Phone []: Home Phone []: Other []: Is the information correct? [Y/n] Y $ $ id johndoe uid=1003(johndoe) gid=1003(johndoe) groups=1003(johndoe) $
CentOS/RHEL/Fedora(包括 Debian/Ubuntu)
下一個命令useradd
將適用於基於 RHEL 的操作系統發行版,並且在 Ubuntu/Debian 主機上同樣適用。 創建新用戶的最簡單語法(沒有任何額外選項)是:
$ sudo useradd <username>
例子:
$ sudo useradd janedoe
useradd
命令支持在創建用戶時可以指定的多個選項,最常見的是用戶 ID (UID)、組 ID (GID)、默認 shell 和主目錄等。下面給出了一個這樣的示例:
$ sudo useradd -s /bin/sh -d /data/newhome -c "Jane Doe" -u 1005 janedoe
您可以使用id
命令驗證新創建的用戶:
$ id janedoe uid=1005(janedoe) gid=1005(janedoe) groups=1005(janedoe) $
修改用戶
人們經常需要根據組織要求、用戶請求或系統遷移來修改現有用戶的某些屬性。 儘管我們需要確保它將如何影響用戶環境以及對用戶擁有或訪問的文件的訪問,但這些屬性中的大多數都很容易修改。
默認外殼
默認 shell 是用戶在本地或通過 SSH 啟動新 CLI 會話時創建的 CLI shell。 大多數現代系統都有一個默認用戶Bash
,儘管它可能因 Linux 發行版或用戶環境而異。 要修改用戶的默認 shell,請使用:
$ sudo usermod -s <shell> <username>
例子:
$ getent passwd janedoe janedoe:x:1005:1005::/data/newhome:/bin/sh $ sudo usermod -s /bin/bash janedoe $ getent passwd janedoe janedoe:x:1005:1005::/data/newhome:/bin/bash $
正如您在上面的輸出中看到的,用戶janedoe
的 shell 已從/bin/sh
更改為/bin/bash
。
主目錄
與默認 shell 一樣,可以使用以下命令將用戶的主目錄修改到不同的位置:
$ sudo usermod -d <new_directory_path> <username>
在下面的示例中,用戶janedoe
的用戶主目錄已更改為/data/janedoe
:
$ getent passwd janedoe janedoe:x:1005:1005::/data/newhome:/bin/bash $ sudo usermod -d /data/janedoe janedoe $ getent passwd janedoe janedoe:x:1005:1005::/data/janedoe:/bin/bash $
在進行切換之前,請確保新目錄具有正確的所有權和權限。 否則,用戶在登錄或在新的主目錄中工作時可能會遇到問題。
用戶身份
您可以使用以下方法更改現有用戶的用戶 ID:
$ sudo usermod -u <new_uid> <username>
例子:
$ getent passwd janedoe janedoe:x:1005:1005::/data/janedoe:/bin/bash $ sudo usermod -u 1010 janedoe $ getent passwd janedoe janedoe:x:1010:1005::/data/janedoe:/bin/bash $
同樣,更改 UID 會更改 Linux 文件系統將所有權和權限映射到文件或目錄的方式。 確保用戶的主目錄及其內容以及系統中任何位置的所有其他文件,最初由用戶擁有(使用舊 UID),已更改為 UID 映射。 不這樣做可能會導致用戶在 CLI 會話和文件訪問中出現問題。

默認組
默認組通常是用戶的默認組 ID,它在用戶創建期間創建,除非指定了另一個 GID。 Linux 還允許您使用usermod
命令修改用戶的默認組。 這是要使用的語法:
$ sudo usermod -g <new_gid or group_name> <username>
這是一個例子:
$ getent passwd janedoe janedoe:x:1010:1005::/data/janedoe:/bin/bash $ sudo usermod -g 1001 janedoe $ getent passwd janedoe janedoe:x:1010:1001::/data/janedoe:/bin/bash $
同樣,確保在用戶的主目錄、內容和所有其他適用於正確遷移其所有權權限的文件或目錄上設置了新組 ID。
添加/刪除組
除了默認組之外,Linux 中的用戶還可以是輔助組的一部分。 我們總是可以使用usermod
命令添加或刪除用戶所屬的其他組。
$ sudo usermod -a -G <group_id or group_name> <username>
例子:
$ id janedoe uid=1005(janedoe) gid=1005(janedoe) groups=1005(janedoe) $ sudo usermod -a -G docker janedoe $ id janedoe uid=1005(janedoe) gid=1005(janedoe) groups=1005(janedoe),1001(docker) $
同樣,要從其中一個輔助組中刪除用戶,請使用gpasswd
命令,如下所示:
$ sudo gpasswd -d <username> <groupname>
例子:
$ id janedoe uid=1005(janedoe) gid=1005(janedoe) groups=1005(janedoe),1001(docker) $ sudo gpasswd -d janedoe docker Removing user janedoe from group docker $ id janedoe uid=1005(janedoe) gid=1005(janedoe) groups=1005(janedoe) $
GECOS 評論
/etc/passwd
中的 GECOS 字段包含用戶信息或評論。 我們可以將現有用戶的此信息修改為:
$ sudo usermod -c <comment> <username>
例子:
$ getent passwd janedoe janedoe:x:1005:1005::/data/janedoe:/bin/bash $ sudo usermod -c "Jane Doe - System Admin" janedoe $ getent passwd janedoe janedoe:x:1005:1005:Jane Doe - System Admin:/data/janedoe:/bin/bash $
請注意,如果您的評論或用戶詳細信息包含空格,請將該字段括在引號中,如上例所示。
登錄名
用戶的登錄名也可以通過使用-l
標誌使用usermod
命令更改:
$ sudo usermod -l <new_username> <old_username>
例子:
$ id janedoe uid=1005(janedoe) gid=1005(janedoe) groups=1005(janedoe) $ sudo usermod -l jane_doe janedoe $ id jane_doe uid=1005(jane_doe) gid=1005(janedoe) groups=1005(janedoe) $
請記住根據使用的新名稱更新用戶參考。 即使在像id
這樣的命令中,也應該指定新的用戶名。
刪除用戶
可以使用userdel
命令從 Linux 中刪除用戶。
$ sudo userdel <username>
例子:
$ id janedoe uid=1005(janedoe) gid=1005(janedoe) groups=1005(janedoe) $ sudo userdel janedoe $ id janedoe id: 'janedoe': no such user $
要刪除用戶及其主目錄和郵件假脫機,請添加-r
標誌。
$ sudo userdel -r <username>
特別是對於基於 Ubuntu 的系統,您還可以使用deluser
命令刪除用戶:
$ sudo deluser <username>
同樣,要刪除主目錄和郵件假脫機,請使用:
$ sudo deluser --remove-home <username>
有關詳細信息和其他支持的選項,請使用以下命令參考各種命令的主頁:
$ man adduser $ man useradd $ man usermod $ man deluser $ man userdel
結論
本文展示了 Linux 系統中用戶管理的各個方面。 這包括對各種用戶類別以及如何添加和刪除它們的說明。 它還涵蓋了有助於修改現有用戶參數的各種選項。 雖然它沒有涵蓋各種命令支持的所有可能性,但它涵蓋了系統管理員在日常工作中會遇到的許多常見管理任務。
您可能還有興趣閱讀:如何在 Linux 中刪除文件和目錄?