用戶和組管理命令
- 用戶和組管理命令
- 1. getent
- 2. useradd
- 3. usermod
- 4. userdel
- 5. id
- 6. su
- 7. passwd
- 8. chage
- 9. groupadd
- 10. groupmod
- 11. groupdel
- 12. gpasswd
- 13. groupmems
用戶和組管理命令
用戶和組的主要配置文件
- /etc/passwd:用戶及其屬性信息(名稱、UID、主組ID等)
- /etc/shadow:用戶密碼及其相關屬性
- /etc/group:組及其屬性信息
- /etc/gshadow:組密碼及其相關屬性
1. getent
# 根據用戶名查看配置項
getent passwd|shadow|group|gshadow [uname]
2. useradd
★ 創建新的Linux用戶
useradd [options] LOGIN
useradd -D
useradd -D [options]-u|--uid UID # 指定UID
-g|--gid GID # 指定用戶組,-g groupname|--gid GID
-c|--comment COMMENT # 新賬戶的 GECOS 字段
-d|--home-dir HOME_DIR # 指定家目錄,可以是不存在的,指定家目錄,并不代表創建家目錄
-s|--shell SHELL # 指定 shell,可用shell在/etc/shells 中可以查看
-r|--system # 創建系統用戶,CentOS 6之前 ID<500,CentOS7 以后ID<1000,不會創建登錄用戶相關信息
-m|--create-home # 創建家目錄,一般用于登錄用戶
-M|--no-create-home # 不創建家目錄,一般用于不用登錄的用戶
-p|--password PASSWORD # 設置密碼,這里的密碼是以明文的形式存在于/etc/shadow 文件中
-o|--non-unique # 允許使用重復的 UID 創建用戶
-G|--groups GROUP1[,GROUP2,...] # 為用戶指明附加組,組須事先存在
-N|--no-user-group # 不創建同名的組,使用users組做主組
-D|--defaults # 顯示或更改默認的 useradd 配置,默認配置文件是/etc/default/useradd
-e|--expiredate EXPIRE_DATE # 指定賬戶的過期日期 YYYY-MM-DD 格式
-f|--inactive INACTIVE # 密碼過期之后,賬戶被徹底禁用之前的天數,0 表示密碼過期立即禁用,-1表示不使用此功能
-k|--skel SKEL_DIR # 指定家目錄模板,創建家目錄,會生成一些默認文件,如果指定,就從該目錄復制文件,默認是/etc/skel/,要配合-m
-K|--key KEY=VALUE # 不使用 /etc/login.defs 中的默認值,自己指定,比如 -K UID_MIN=100
-l|--no-log-init # 不將用戶添加到最近登錄和登錄失敗記錄,前面講到的3a認證審計,就在此處lastlog|lastb|cat /var/log/secure[root@rocky8 ~]# useradd tom
[root@rocky8 ~]# getent passwd tom
tom:x:1001:1001::/home/tom:/bin/bash
[root@rocky8 ~]# getent shadow tom
tom:!!:19752:0:99999:7:::
[root@rocky8 ~]# getent group tom
tom:x:1001:
[root@rocky8 ~]# getent gshadow tom
tom:!::# 新建用戶的相關文件
/etc/default/useradd
/etc/skel/*
/etc/login.defs
3. usermod
★ 修改用戶屬性
usermod [options] LOGIN-c|--comment COMMENT # 修改注釋
-d|--home HOME_DIR # 修改家目錄
-e|--expiredate EXPIRE_DATE # 修改過期的日期,YYYY-MM-DD 格式
-f|--inactive INACTIVE # 密碼過期之后,賬戶被徹底禁用之前的天數,0 表示密碼過期立即禁用,-1表示不使用此功能
-g|--gid GROUP # 修改組
-G|--groups GROUPS # groupName|GID... 新附加組,原來的附加組將會被覆蓋;若保留原有,則要同時使用-a選項
-a|--append GROUP # 將用戶追加至上邊 -G 中提到的附加組中,并不從其它組中刪除此用戶
-l|--login LOGIN # 新的登錄名稱
-L|--lock # 鎖定用戶帳號,在/etc/shadow 密碼欄的增加 !
-m|--move-home # 將家目錄內容移至新位置,和 -d 一起使用
-o|--non-unique # 允許使用重復的(非唯一的) UID
-p|--password PASSWORD # 修改密碼,這里是明文,如果要在此處修改密碼,則要用加密后的字符串
-s|--shell SHELL # 修改 shell
-u|--uid UID # 修改 UID
-U|--unlock # 解鎖用戶帳號,將 /etc/shadow 密碼欄的!拿掉[root@rocky8 ~]# getent shadow nan
nan:$6$bqKkb17ECiAyoWFn$s8rd8DYDLWMBL1TGczKMjg1D18B4nDYHY84mNMetEwFC6tr1WIPyvVVorN68Dq1U/rNNhpeNkltZ2DAqZPk9R0::0:99999:7:::
[root@rocky8 ~]# usermod -L nan
[root@rocky8 ~]# getent shadow nan
nan:!$6$bqKkb17ECiAyoWFn$s8rd8DYDLWMBL1TGczKMjg1D18B4nDYHY84mNMetEwFC6tr1WIPyvVVorN68Dq1U/rNNhpeNkltZ2DAqZPk9R0::0:99999:7:::
[root@rocky8 ~]# usermod -U nan
[root@rocky8 ~]# getent shadow nan
nan:$6$bqKkb17ECiAyoWFn$s8rd8DYDLWMBL1TGczKMjg1D18B4nDYHY84mNMetEwFC6tr1WIPyvVVorN68Dq1U/rNNhpeNkltZ2DAqZPk9R0::0:99999:7:::
4. userdel
★ 刪除Linux 用戶
userdel [options] LOGIN-f|--force # 強制刪除,哪怕用戶正在登錄狀態
-r|--remove # 刪除家目錄和郵件目錄
5. id
★ 查看用戶的UID,GID等信息
id [OPTION]... [USER]-a # 顯示詳細信息,默認選項
-Z|--context # 僅顯示安全上下文信息,要開啟selinux 配置才有
-g|--group # 僅顯示GID,就是只顯示主組ID
-G|--groups # 顯示主組和附加組ID,就是所有組ID
-n|--name # 顯示用戶名或組名,要組合使用 -nu|-ng|-nG
-u|--user # 僅顯示UID[root@rocky8 ~]# id
uid=0(root) gid=0(root) groups=0(root) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
[root@rocky8 ~]# id -a
uid=0(root) gid=0(root) groups=0(root) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
[root@rocky8 ~]# id -nu
root
[root@rocky8 ~]# id postfix
uid=89(postfix) gid=89(postfix) groups=89(postfix),12(mail)
[root@rocky8 ~]# id -G postfix
89 12
[root@rocky8 ~]# id -nG postfix
postfix mail
6. su
★ 切換用戶或以其他用戶身份執行命令
su [options...] [-] [user [args...]]-m|-p|--preserve-environment # 不重置環境變量
-g|--group group # 指定主組,只有root 切普通用戶才能指定此參數
-|-l|--login # 完全切換
-c|--command command # 不切換用戶,而是臨時使用該用戶權限和環境執行命令
--session-command command # 使用上同 -c 選項,但不會創建會話
-f|--fast # 向shell 傳遞 -f 選項(csh 或 tcsh)
-s|--shell shell # 切換用戶后,指定新環境的shell環境,必須在 /etc/shells 中存在
-P|--pty # 開一個新的終端切換用戶的方式:su UserName:非登錄式切換,即不會讀取目標用戶的配置文件,不改變當前工作目錄,即不完全切換su - UserName:登錄式切換,會讀取目標用戶的配置文件,切換至自已的家目錄,即完全切換
說明:root su至其他用戶無須密碼;非root用戶切換時需要密碼
注意:su 切換新用戶后,使用 exit 退回至舊的用戶身份,而不要再用 su 切換至舊用戶,否則會生成很多的bash子進程,環境可能會混亂。★ 完全切換和不完全切換的區別
[nan@rocky8 ~]$ pwd
/home/nan
[nan@rocky8 ~]$ su root
Password:
[root@rocky8 nan]# pwd
/home/nan
[root@rocky8 nan]# exit
exit
[nan@rocky8 ~]$ pwd
/home/nan
[nan@rocky8 ~]$ su - root
Password:
[root@rocky8 ~]# pwd
/root★ 直接以另一個用戶執行命令,而不切換用戶
[root@rocky8 ~]# su - nan
[nan@rocky8 ~]$ touch nan1.txt
[nan@rocky8 ~]$ exit
logout
三步變一步
[root@rocky8 ~]# su - nan -c "touch nan2.txt"
[root@rocky8 ~]# ll /home/nan/nan*
-rw-rw-r--. 1 nan nan 0 Jan 30 16:18 /home/nan/nan1.txt
-rw-rw-r--. 1 nan nan 0 Jan 30 16:20 /home/nan/nan2.txt
7. passwd
★ 修改用戶密碼
passwd [OPTION...] <accountName>-k|--keep-tokens # 保持身份驗證令牌不過期
-d|--delete # 刪除用戶密碼,也刪除密碼鎖,僅root有權限操作
-l|--lock # 鎖定用戶密碼,僅root有權限操作
-u|--unlock # 解鎖用戶密碼,僅root有權限操作
-e|--expire # 終止用戶密碼,此操作完成后,用戶下次登錄成功后要立馬修改,僅root有權限操作
-f|--force # 強制執行操作
-x|--maximum=DAYS # 指定用戶密碼最長有效期,僅root有權限操作
-n|--minimum=DAYS # 指定用戶密碼最短有效期,僅root有權限操作
-w|--warning=DAYS # 在密碼過期前多少天開始提醒用戶,僅root有權限操作
-i|--inactive=DAYS # 當密碼過期后經過多少天該用戶賬號會被禁用,僅root有權限操作
-S|--status # 查詢用戶的密碼狀態,僅root有權限操作
--stdin # 從標準輸入接收密碼,Ubuntu無此選項★ 普通用戶修改自己密碼
[nan@rocky8 ~]$ passwd
Changing password for user nan.
Current password:
New password:
Retype new password:
passwd: all authentication tokens updated successfully.★ root修改其它用戶密碼
[root@rocky8 ~]# passwd nan
Changing password for user nan.
New password:
BAD PASSWORD: The password is shorter than 8 characters
Retype new password:
passwd: all authentication tokens updated successfully.
8. chage
★ 修改用戶密碼策略
chage [options] LOGIN-d LAST_DAY # 更改密碼的時間
-m|--mindays MIN_DAYS
-M|--maxdays MAX_DAYS
-W|--warndays WARN_DAYS
-I|--inactive INACTIVE # 密碼過期后的寬限期
-E|--expiredate EXPIRE_DATE # 用戶的有效期
-l # 顯示密碼策略[root@rocky8 ~]# chage -l nan
Last password change : Jan 30, 2024
Password expires : never
Password inactive : never
Account expires : never
Minimum number of days between password change : 0
Maximum number of days between password change : 99999
Number of days of warning before password expires : 7
9. groupadd
★ 創建組
groupadd [options] GROUP-f|--force # 如果組已經存在則成功退出
-g|--gid GID # 新建組時指定組ID,默認是系統分配,指定值不要超過[GID_MIN,GID_MAX]
-K|--key KEY=VALUE # 不使用 /etc/login.defs 中的默認值,自己指定,比如 -K GID_MIN=100
-o|--non-unique # 允許創建有重復 GID 的組
-p|--password PASSWORD # 為新組使用此加密過的密碼,這里要用加密后的密文,不然就是直接是明文在/etc/gshadow 里面
-r|--system # 創建一個系統組 CentOS 6之前: ID<500,CentOS 7以后: ID<1000[root@rocky8 ~]# groupadd -g 48 -r apache
[root@rocky8 ~]# getent group apache
apache:x:48:
★ 不加 -f 會提示己存在,加 -f 直接結束
[root@rocky8 ~]# groupadd apache
groupadd: group 'apache' already exists
[root@rocky8 ~]# groupadd -f apache
10. groupmod
★ 修改組屬性
groupmod [options] GROUP-g|--gid GID # 將組 ID 改為 GID
-n|--new-name NEW_GROUP # 改名為 NEW_GROUP
-o|--non-unique # 允許使用重復的 GID
-p|--password PASSWORD # 將密碼更改為(加密過的) PASSWORD[root@rocky8 ~]# getent group apache
apache:x:48:
[root@rocky8 ~]# groupmod -g 123 apache
[root@rocky8 ~]# getent group apache
apache:x:123:
[root@rocky8 ~]# groupmod -n apache2 apache
[root@rocky8 ~]# getent group apache
[root@rocky8 ~]# getent group apache2
apache2:x:123:
11. groupdel
★ 刪除組
groupdel [options] GROUP-f|--force # 強制刪除,即使是用戶的主組也強制刪除組,但會導致無主組的用戶不可用無法登錄
強制刪除之后,顯示該組名的地方,只能顯示該組ID,如果此時新建與組ID相同的新組,則被刪除的組的數據會被新組關聯[root@rocky8 ~]# groupdel apache2
[root@rocky8 ~]# getent group apache2刪除組:如果該組下有用戶將組作為主組,則不能刪除
刪除用戶:會把與其同ID的主組也給刪了,前提是該組下沒有其它用戶
12. gpasswd
★ 更改組密碼,也可以修改附加組的成員關系組沒有密碼的情況下,加組只能由root來操作
gpasswd [option] GROUP-a|--add USER # 向組中添加用戶
-d|--delete USER # 從組中移除用戶
-r|--delete-password # 刪除組密碼
-R|--restrict # 向其成員限制訪問組 GROUP
-M|--members USER,... # 批量加組
-A|--administrators ADMIN,... # 批量設組管理員[root@rocky8 ~]# groupadd group1
[root@rocky8 ~]# getent gshadow group1
group1:!::
[root@rocky8 ~]# groups nan
nan : nan
[root@rocky8 ~]# id nan
uid=1000(nan) gid=1000(nan) groups=1000(nan)
[root@rocky8 ~]# gpasswd -a nan group1
Adding user nan to group group1
[root@rocky8 ~]# getent gshadow group1
group1:!::nan
[root@rocky8 ~]# groups nan
nan : nan group1
[root@rocky8 ~]# id nan
uid=1000(nan) gid=1000(nan) groups=1000(nan),1002(group1)★ 設置組密碼
[root@rocky8 ~]# gpasswd group1
Changing the password for group group1
New Password:
Re-enter new password:
[root@rocky8 ~]# getent gshadow group1
group1:$6$7rWweq0F$UQKecLT2gfpuXMg1pzdcchuUjAaQdVKvRXxcbqB2rw2wYKmaBBPSFl9aQSy0p9/WkqGZK6Jq1gpXdjnX3gOSl0::nan★ 移除組成員
[root@rocky8 ~]# gpasswd -d nan group1
Removing user nan from group group1
[root@rocky8 ~]# groups nan
nan : nan★ 補充:groups 可查看用戶組關系(查看用戶所屬組列表)groups [OPTION].[USERNAME]...
13. groupmems
★ 管理附加組的成員關系(更改和查看組成員)
groupmems [options] [action]-g|--group groupname # 更改為指定組 (只有root)
-a|--add username # 指定用戶加入組
-d|--delete username # 從組中刪除用戶
-p|--purge # 從組中清除所有成員
-l|--list # 顯示組成員列表★ 列出以group1 組為附加組的用戶
[root@rocky8 ~]# groupmems -g group1 -l★ 將jose 加到group1 組
[root@rocky8 ~]# groupmems -g group1 -a jose
[root@rocky8 ~]# groupmems -g group1 -l
jose
[root@rocky8 ~]# id jose
uid=1000(jose) gid=1000(jose) groups=1000(jose),1004(group1)