1. 概述
在Linux環境下,用戶組可以讓多個用戶具有相同的權限,也就是說,一個用戶可以屬於多個用戶組,並同時擁有這些用戶組的權限,這就有了主組(也稱初始組)和附加組的概念,使用 groups
命令可以查看該用戶的用戶組。
codedancing@Ubuntu:~$ groups
codedancing adm cdrom sudo dip plugdev lpadmin sambashare docker
/etc/passwd
文件中每個用戶信息分爲 7 個字段,其中第 4 字段(GID)指的就是每個用戶所屬的主組,也就是說,當用戶一登陸系統,立刻就會擁有這個用戶組的相關權限,每個用戶的主組只有一個。
# /etc/passwd
codedancing:x:1000:1000:CodeDancing,,,:/home/codedancing:/bin/bash
# /etc/group
codedancing:x:1000:
docker:x:999:codedancing
codedancing 用戶組是添加 codedancing 用戶時默認創建的用戶組,在 root 管理員使用 useradd 命令創建新用戶時,若未明確指定該命令所屬的主組,useradd 命令會默認創建一個同用戶名相同的羣組,作爲該用戶的主組。
codedancing 用戶組是 codedancing 用戶的主組,不需要在 /etc/group 的第 4 個字段額外標註,docker 用戶組是 codedancing 的附加組,所以 docker 用戶組的第四個字段會添加 codedancing 這個用戶。
2. 用戶組管理
1)groupadd
groupadd 用於添加用戶組。
格式:
groupadd [-g GID] groupname
-g
:用於指定 GID,默認爲使用當前最大的 GID 加 1
codedancing@Ubuntu:~$ sudo groupadd group1
codedancing@Ubuntu:~$ grep group1 /etc/group
group1:x:1001:
2)groupmod
groupmod 用於修改系統已存在的用戶組。
格式:
groupmod [options] groupname
常用選項:
-g
GID:重新指派 GID
-n
new_group:更改組名爲 new_group
codedancing@Ubuntu:~$ sudo groupmod -n group2 group1
codedancing@Ubuntu:~$ grep group2 /etc/group
group2:x:1001:
3)groupdel
groupdel 用於刪除系統已存在的用戶組。
格式:
groupdel groupname
注意:在刪除用戶組之前,按規範需要將該用戶組中的用戶移除
codedancing@Ubuntu:~$ sudo groupdel group2
codedancing@Ubuntu:~$ grep group2 /etc/group
codedancing@Ubuntu:~$ sudo grep group2 /etc/gshadow
4)gpasswd
gpasswd 用於把指定用戶從用戶組移除。
格式:
gpasswd -d username groupname
user1@Ubuntu:~$ groups
user1 group1 group2
user1@Ubuntu:~$ grep group /etc/group
group1:x:1002:user1
group2:x:1003:user1
codedancing@Ubuntu:/home$ sudo gpasswd -d user1 group1
Removing user user1 from group group1
user1@Ubuntu:~$ groups
user1 group2
3. 用戶管理
1)useradd
useradd 用於添加用戶,useradd是一個 linux 命令,但是它提供了很多參數在用戶使用的時候根據自己的需要進行設置。
useradd這個命令創建的是普通賬號,並不能用來登錄系統。
當使用參數"-m"的時候,系統會自動地在/home目錄下建立一個與新建用戶同名的用戶主文件夾;如果不使用"-m"的話,默認不創建主文件夾,即使使用了"-d"這個參數。所以,"-d" 這個參數是跟 “-m” 一起使用的,讓用戶自己選擇主文件夾的路徑。
格式:
useradd [options] username
常用選項:
-u
: UID 指定新用戶的 UID,默認爲使用當前最大的 UID 加1
-g
: GROUP 指定新用戶的主組
-G
: GROUP1,GROUP2 … 指定新用戶的附加組
-m
: 強制建立用戶主文件夾,並將/etc/skel/當中的文件複製到用戶的根目錄下(重要)
-d
home_dir: 指定新用戶的Home目錄(重要)
-s
shell:用戶登錄所使用的shell (重要,通常設置爲 /bin/bash)
-p
password:輸入該帳號的密碼
codedancing@Ubuntu:~$ sudo useradd -m -d /home/user1 -s /bin/bash user1
codedancing@Ubuntu:/home$ sudo passwd user1
Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully
codedancing@Ubuntu:~$ grep user1 /etc/group
user1:x:1002:
2)adduser
adduser 是一個 perl 腳本,在使用的時候會出現類似人機交互的界面,提供選項讓用戶填寫和選擇。
在使用adduser命令的時候,系統會添加這個用戶名,並且還會自動地創建與這個用戶名名字一樣的用戶組作爲這個用戶的主組。此外,還會自動地在/home目錄下面創建一個與用戶同名的目錄,接着執行"cp /etc/skel /home/用戶名"的操作,實現新增用戶的主目錄的初始化。
用adduser這個命令創建的賬號是系統賬號,可以用來登錄到我們的系統。
codedancing@Ubuntu:/home$ sudo adduser user3
Adding user `user3' ...
Adding new group `user3' (1004) ...
Adding new user `user3' (1003) with group `user3' ...
Creating home directory `/home/user3' ...
Copying files from `/etc/skel' ...
Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully
Changing the user information for user3
Enter the new value, or press ENTER for the default
Full Name []:
Room Number []:
Work Phone []:
Home Phone []:
Other []:
Is the information correct? [Y/n] y
codedancing@Ubuntu:/home$ su - user3
Password:
user3@Ubuntu:~$
3)usermod
usermod 用於修改系統已存在用戶。
格式:
usermod [options] username
常用選項:
-a
:追加用戶組
-L
:鎖定用戶賬號
-U
:解除用戶賬號鎖定
-l
new_username:更改用戶名爲 new_username
-G
groupname:將用戶添加到附加組 groupname 中
codedancing@Ubuntu:~$ sudo usermod -l user2 user1
codedancing@Ubuntu:~$ sudo usermod -G group1 user2
codedancing@Ubuntu:~$ grep group1 /etc/group
group1:x:1001:user2
注意:如果只使用 -G
選項,則該用戶會從以前的附加組移出,並添加到 -G
指定的附加組,如果需要保留以前的附加組,必須使用 -a
選項。
codedancing@Ubuntu:/home$ sudo usermod -a -G group3 user1
4)userdel
userdel 用於刪除系統已存在的用戶。
格式:
userdel [-r] username
常用選項:
-r
:同時刪除用戶的自家目錄和 mail 的假脫機文件
codedancing@Ubuntu:/home$ sudo userdel -r user1
注意:刪除用戶時,如果該用戶組的主組中沒有其他用戶,則該主組也會被刪除。
5)passwd
passwd 用於修改用戶登錄密碼。
格式:
passwd [username]
常用選項:
-d
: --delete,刪除用戶密碼,僅能以root權限操作
-l
: --lock,鎖住用戶無權更改其密碼,僅能通過root權限操作
說明:如果沒有 username,則修改當前用戶的登錄密碼