一. 用戶配置文件
用戶配置文件主要包括
-
/etc/passwd
用戶信息文件 -
/etc/shadow
用戶密碼文件 -
/etc/group
用戶組信息文件 -
/etc/gshadow
用戶組密碼文件
1. 用戶信息文件
用戶信息配置文件為/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
...
test:x:502:505::/home/test:/bin/bash
tony:x:503:506::/home/tony:/bin/bash
tom:x:504:507::/home/tom:/bin/bash
lw:x:505:509::/home/lw:/bin/bash
uar:x:506:510::/home/uar:/bin/bash
各字段含義:
- 名稱
- 密碼占位符x(配置文件在
/etc/shadow
) - UID(用戶id, 系統(tǒng)主要通過UID識(shí)別用戶, 系統(tǒng)用戶0-500, 其他用戶>500, 將UID手動(dòng)改成0, 該用戶會(huì)變成超級(jí)管理員)
- GID(用戶組id, 系統(tǒng)通過GID識(shí)別該用戶初始組)
- 用戶描述
- 用戶家目錄
- 用戶登錄shell, /sbin/nologin, 不允許登陸
2. 密碼配置文件(影子文件)
用戶密碼配置文件為/etc/shadow
, 權(quán)限為000, 只有root能對(duì)其進(jìn)行修改
root:$6$AZ76b/wn$jw8/5ZnecagBeRrt3j3hLGK5aLlBuoHHH/PRBViVNwG8rvYENmdTMEXpCcEiG8/MlmkGh1ART2S/xnkrzhpbC0:17230:0:99999:7:::
bin:*:15980:0:99999:7:::
.....
uar:$6$ALNMp7A9$EMdZzzClqH0bS4M1z3KpcWNuQvY9Q1Mxivu3DF3S68il0pkxvPqEsiHZnvyV235Eetd6LY3ob9PFCYV1V9kEv.:17525:10:20:7:5::
各字段含義:
- 用戶名
- 加密后的密碼, 如果密碼為是*或者!!, 表示沒有密碼, 不能登錄
- 添加的時(shí)間戳, 單位天, 以1970-01-01為起始時(shí)間, 到添加用戶時(shí)所間隔的天數(shù)
- 兩次密碼修改的間隔時(shí)間, 和第三個(gè)字段相比較, 0表示沒有間隔, 設(shè)置為10, 表示10天之內(nèi)不能改密碼, 10天之后才能改
- 密碼有效期, 和第三個(gè)字段相比, 99999天約等于200多年, 可以理解為無限制, 如過設(shè)置為20, 大于20天沒有修改密碼, 就不讓其登陸(和第六, 第七字段相關(guān))
- 密碼修改時(shí)間到期前的提示天數(shù), 如uar用戶, 提前七天給提示, 讓其修改密碼
- 密碼過期后的寬限天數(shù), 0和不設(shè)表示密碼過期后, 立即失效, -1永久生效, 如uar用戶, 延后五天給提示, 讓其修改密碼
- 賬號(hào)失效時(shí)間, 時(shí)間戳表示
- 保留字段
3. 用戶組配置文件
用戶組配置文件為/etc/group
root:x:0:
bin:x:1:bin,daemon
..
uar:x:510:
各字段含義
- 組名
- 組密碼(x占位符, 對(duì)應(yīng)組密碼文件
/etc/gshadow
) - 組id
- 組附加用戶(擴(kuò)展組)
4. 用戶管理相關(guān)文件
- 用戶家目錄(700, 添加用戶自動(dòng)生成)
# 添加用戶生成, 生成文件模板目錄為/etc/skel
-rw------- 1 uar uar 78 12月 26 23:10 .bash_history
-rw-r--r-- 1 uar uar 18 7月 18 2013 .bash_logout
-rw-r--r-- 1 uar uar 176 7月 18 2013 .bash_profile
-rw-r--r-- 1 uar uar 124 7月 18 2013 .bashrc
- 用戶家目錄模板目錄(
/etc/skel
), 添加用戶時(shí), 默認(rèn)在用戶家目錄創(chuàng)建一下文件
. .. .bash_logout .bash_profile .bashrc .gnome2
- 添加用戶時(shí)會(huì)在
/etc//var/spool/mail
創(chuàng)建一個(gè)同戶名同名的郵箱文件
二. 用戶管理命令
1. 用戶添加命令useradd
- useradd命令格式 useradd [選項(xiàng)] 用戶名
- -u UID: 指定用戶UID
- -d 家目錄: 指定用戶家目錄
- -c 用戶說明
- -g 組名: 指定用戶初始組(不建議更改)
- -G 組名: 指定用戶擴(kuò)展組(多個(gè)用逗號(hào)分隔)
- -s shell: 手工指定登陸shell
執(zhí)行
useradd -u 666 -d /hello -c "helloworld" -G root,uar -s /bin/bash hello
[root@localhost ~]# ll -d /hello/
drwx------ 3 hello hello 4096 1月 6 10:18 /hello/
[root@localhost ~]# grep hello /etc/passwd
hello:x:666:666:helloworld:/hello:/bin/bash
[root@localhost ~]# grep hello /etc/group
root:x:0:hello #hello用戶的擴(kuò)展組
uar:x:510:hello
hello:x:666:
[root@localhost ~]# grep hello /etc/shadow
hello:!!:17537:0:99999:7:::
-
用戶默認(rèn)配置文件
/etc/default/useradd
- GROUP=100 : 不生效
- HOME=/home : 家目錄
- INACTIVE=-1 : 密碼過期寬限天數(shù)(shadow第七字段)
- EXPIRE= : 密碼失效時(shí)間(shadow第八字段)
- SHELL=/bin/bash : 初始登陸shell
- SKEL=/etc/skel: 默認(rèn)模板目錄
- CREATE_MAIL_SPOOL=yes: 是否建立郵箱
-
/etc/login.defs
- PASS_MAX_DAYS 99999 密碼有效時(shí)間(第5字段)
- PASS_MIN_DAYS 0 密碼修改間隔(第4字段)
- PASS_MIN_LEN 5 密碼最小5位(不生效)
- PASS_WARN_AGE 密碼到期警告(第6字段)
- UID_MIN 500 最小UID范圍
- UID_MAX 60000
- UID_MIN 500
- GID_MAX 60000
- ENCRYPT_METHOD SHA512 加密算法
2. 設(shè)定密碼passwd
格式 passwd [選項(xiàng)] [用戶名]
- 用戶名
- 不加用戶名, 是給當(dāng)前登錄用戶設(shè)定密碼
- 加用戶名, 給指定用戶設(shè)定密碼, 超級(jí)管理員可用
- 選項(xiàng)
-S: 查詢用戶密碼狀態(tài)
-l: 暫時(shí)鎖定用戶
-u: 解鎖用戶
--stdin: 通過管道符給用戶設(shè)定密碼(shell腳本批量給用戶初始化密碼)
示例:
[root@localhost ~]# passwd -S hello
hello PS 2018-01-06 0 99999 7 -1 (密碼已設(shè)置带饱,使用 SHA512 加密毡代。)
[root@localhost ~]# passwd -l hello
鎖定用戶 hello 的密碼 。
passwd: 操作成功
#鎖定密碼, 其實(shí)就是在密碼前加入 '!!'
[root@localhost ~]# grep hello /etc/shadow
hello:!!$6$hYvSf3tE$66xZYlCTuTLdGa7RtFXZUVfx1GOgseUSwbmb1sTa3uzgPa.a5Iv6RhJCM0zkUlqE3PwvBoeYoFVv5Q4Ln4JA61:17537:0:99999:7:::
#解鎖用戶, 就是移除密碼前的'!!'
[root@localhost ~]# passwd -u hello
解鎖用戶 hello 的密碼 勺疼。
passwd: 操作成功
[root@localhost ~]# grep hello /etc/shadow
hello:$6$hYvSf3tE$66xZYlCTuTLdGa7RtFXZUVfx1GOgseUSwbmb1sTa3uzgPa.a5Iv6RhJCM0zkUlqE3PwvBoeYoFVv5Q4Ln4JA61:17537:0:99999:7:::
# 使用--stdin設(shè)定密碼
[root@localhost ~]# echo 1234 | passwd --stdin hello
更改用戶 hello 的密碼 教寂。
passwd: 所有的身份驗(yàn)證令牌已經(jīng)成功更新。
[root@localhost ~]# grep hello /etc/shadow
hello:$6$WqbpYyC8$Er8ytu9jGFvXplyBfim32SRMb.e8EspoBJKRdiH5sl8VhsuEBjt8ZmQGtIsupU.5hh42SNdbNvssUCv.Z75A00:17537:0:99999:7:::
3. 修改用戶信息 usermod
useradd是添加新用戶, usermod是修改已經(jīng)存在的用戶
格式 usermod [選項(xiàng)] 用戶名
- 選項(xiàng)
- -u UID: 修改用戶的UID
- -c 用戶說明: 修改用戶的說明信息
- -G 組名: 修改用的附加組
- -L 鎖定用戶
- -U 解鎖用戶鎖定
4. 修改用戶密碼狀態(tài) chage
格式 chage [選項(xiàng)] 用戶名
- 選項(xiàng):
- -l 列出用戶的詳細(xì)密碼狀態(tài)
- -d 天數(shù), 修改密碼最后一次更改日期(shadow3字段)
- -m 天數(shù): 兩次密碼修改間隔(4字段)
- -M 天數(shù): 密碼有效期(5字段)
- -W 天數(shù): 密碼過期前警告天數(shù)(6字段)
- -I 天數(shù): 密碼過期后寬限天數(shù)(7字段)
- -E 天數(shù): 賬號(hào)失效時(shí)間(8字段)
示例:
chage -d 0 hello
這個(gè)命令時(shí)把密碼日期歸0為(shadow第三字段), 用戶已登錄, 就要提示其修改密碼, 在shell腳本中, 可以給很多用戶設(shè)定一個(gè)初始密碼, 然后將其密碼修改日期歸檔為0, 用戶登陸后, 必須修改密碼
[root@localhost ~]# chage -d 0 hello
# 將其第三字段改為0
[root@localhost ~]# grep hello /etc/shadow
hello:$6$WqbpYyC8$Er8ytu9jGFvXplyBfim32SRMb.e8EspoBJKRdiH5sl8VhsuEBjt8ZmQGtIsupU.5hh42SNdbNvssUCv.Z75A00:0:0:99999:7:::
[root@localhost ~]# su - uar
[uar@localhost ~]$ su - hello
密碼:
您需要立即更改密碼(root 強(qiáng)制)
為 hello 更改 STRESS 密碼恢口。
(當(dāng)前)UNIX 密碼:
新的 密碼:
5 刪除用戶
userdel [選項(xiàng)] 用戶名
- 選項(xiàng)
-r : 刪除用戶的同時(shí), 將用戶家目錄也刪除掉 - 手動(dòng)刪除用戶, 需要做如下操作:
- vi
/etc/passwd
, 將用戶刪掉 - vi
/etc/shadow
, 將密碼刪除,wq!
強(qiáng)制保存退出 - vi
/etc/group
, 將用戶組刪掉 - vi
/etc/gshadow
, 將用戶組密碼刪掉 - rm -rf
/var/spool/mail/hello
刪掉 - rm -rf
/home/hello
家目錄刪掉
- vi
- id , 查看當(dāng)前用戶信息
[hello@localhost ~]$ id
uid=666(hello) gid=666(hello) 組=666(hello),0(root),510(uar)
6 切換用戶身份
格式: su [選項(xiàng)] 用戶名
- 選項(xiàng)
- -: 選項(xiàng)'-'代表用戶切換時(shí)連帶用戶的環(huán)境變量一起切換, 推薦加su - hello, 不要直接su hello, 如果直接su hello, 自己還會(huì)停留在hello目錄里, 在退出hello家目錄, 就進(jìn)不來了, 此處有疑問
- -c: 僅執(zhí)行一次命令, 而不切換用戶身份
su - root -c "useradd usertest"
- su root, 切換到root, 查看env, 發(fā)現(xiàn)用戶環(huán)境變量并沒有發(fā)生改變, 不要這樣寫, 應(yīng)該寫成
su - root
三. 用戶組管理
1.添加用戶組
groupadd [選項(xiàng)] 組名
- 選項(xiàng)
- -g GID: 執(zhí)行組ID
2. 修改用戶組
groupmod [選項(xiàng)] 組名
- 選項(xiàng)
- -g GID 修改組GID
- -n 新組名 原始組名: 修改組名
- `groupmod -n newgrp oldgrp
3. 刪除組
groupdel 組名
- 如果組里有初始用戶, 就不能刪除
- 如果組沒有初始用戶, 僅僅是附加用戶, 則不受影響, 直接刪除
[root@localhost ~]# groupadd gtest
[root@localhost ~]# grep gtest /etc/group
gtest:x:511:
[root@localhost ~]# useradd -g gtest anny
[root@localhost ~]# grep anny /etc/passwd
anny:x:507:511::/home/anny:/bin/bash
[root@localhost ~]# useradd -G gtest jack
[root@localhost ~]# grep gtest /etc/group
# 會(huì)將jack放在gtest附加組里
gtest:x:511:jack
# 如果有初始用戶, 則不能刪除
[root@localhost ~]# groupdel gtest
groupdel: cannot remove the primary group of user 'anny'
[root@localhost ~]# userdel jack
[root@localhost ~]# grep gtest /etc/group
gtest:x:511:
[root@localhost ~]# userdel anny
# 刪除anny用戶后, 再刪除gtest組, 和jack是否存在沒關(guān)系
[root@localhost ~]# groupdel gtest
4. 把用戶添加入組或者從組中刪除
gpasswd 選項(xiàng) 組名
- 選項(xiàng):
- -a 用戶名: 把用戶加入組
- -d 用戶名: 把用戶從組中刪除
- 示例:
[root@localhost ~]# gpasswd -a lw,uar gtest
gpasswd: user 'lw,uar' does not exist
[root@localhost ~]# gpasswd -a lw gtest
Adding user lw to group gtest
[root@localhost ~]# gpasswd -a uar gtest
Adding user uar to group gtest
[root@localhost ~]# grep gtest /etc/group
gtest:x:511:lw,uar
[root@localhost ~]# gpasswd -d lw gtest
Removing user lw from group gtest
[root@localhost ~]# gpasswd -d uar gtest
Removing user uar from group gtest
[root@localhost ~]# grep gtest /etc/group
gtest:x:511: