參考:https://blog.csdn.net/love20165104027/article/details/82386271
跟用戶相關的文件:
/etc/passwd
/etc/shadow
跟組相關的文件:
/etc/group
/etc/gshadow
/etc/passwd的文件內容:
root:x:0:0:root:/root:/bin/bash
第一個字段:賬號名稱
第二個字段:密碼。(密碼信息加密放在/etc/shadow中,因此這里為x)
第三個字段:UID。(0表示賬號為系統管理員,1-999表示賬號為系統賬號,1000-6000表示賬號為一般使用者)
第四個字段:GID。(用戶所在初始群組的ID號)(每個賬號被創建后,都會被分配到一個初始組中)
第五個字段:用戶名全稱或賬號意義說明。(可理解為賬號的注釋說明)
第六個字段:家目錄。(默認為/home/賬號名稱)
第七個字段:賬號登錄系統之后取得的shell。(賬號通過該shell跟linux進行交流)
/etc/shadow的文件內容:
root:$6$BOzhx0mUbB97BizQ$34NhP3GsdbmnzvLwbRqY.kU0X.qUeAC02RQJSf::0:99999:7:::
第一個字段:賬號名稱。
第二個字段:密碼。(這里存的是加密后的密碼。若密碼以 "!" 開頭,表示密碼失效,賬號被鎖,暫時無法登錄。)
(1)如果為空,則對應賬號沒有密碼,登錄時不需要密碼。
(2)星號("*")代表賬號被鎖定。
(3)雙嘆號表示這個密碼已經過期了。
(4)$6$開頭的,表明是用SHA-512加密的。
(5)$1$開頭的,表明是用MD5加密的。
(6)$2$開頭的,表明是用Blowfish加密的。
(7)$5$開頭的,表明是用SHA-256加密的。
雖然這些加密過的密碼很難被解出來, 但是『很難』不等於『不會』,所以,這個檔案的預設權限是『-rw-------』或者是『-r--------』,亦只有 root 才可以讀寫就是了!你得隨時注意,不要不小心更動了這個檔案的權限呢!
由於固定的編碼系統產生的密碼長度必須一致,因此『當你讓這個字段的長度改變后,該密碼就會失效(算不出來)』。 很多軟件透過這個功能,在此字段前加上 ! 或 * 改變密碼字段長度,就會讓密碼『暫時失效』了。
第三個字段:這個字段記錄了『更改密碼那一天』的日期。計算 Linux 日期的時間是以 1970 年 1 月 1 日作為 1 而累加的日期,1971 年 1
月 1 日則為 366 啦。
1970年1月1日 00:00:00 互聯網的起始時間
echo $(($(date --date="2008/09/04" +%s)/86400+1)) 14126
這是在2008/09/04那天計算的,距離1970/01/01那天有多少天。
2008/09/04 為你想要計算的日期,86400 為每一天的秒數, %s 為 1970/01/01 以來累積總秒數。 由於 bash 僅支持整數,因此最終需要
加上 1 補齊 1970/01/01 當天。
echo $(($(date --date="2019/10/15" +%s)/86400+1)) 18184
這是在2019/10/15那天計算的,距離1970/01/01那天有多少天。
假如最后一次修改密碼是在2019/10/15這天,那么第三個字段這里記錄的就是18184,表示天數。
第四個字段:密碼不可需改的天數。假如你最后一次修改密碼是在2019/10/15這天,該字段設置的是7,那么在2019/10/15到2019/10/22
這段時間之內,你不能修改密碼,也根本無法修改。
第五個字段:密碼需要再次修改的天數。假如你最后一次修改密碼是在2019/10/15,該字段設置的是30,那么在2019/11/15之前,你需要再
次修改你的密碼。過了2019/11/15日,你的密碼就過期了。(2019/11/15就是過期日)
經常變更密碼是個好習慣!
第六個字段:在密碼過期日的前幾天開始發出警告。在密碼過期前,提前多少天提醒用戶。假如你設置的是7,那么系統會從2019/11/08日開
是發出警告,提醒你該修改密碼了。
第七個字段:密碼過期之后的賬號寬限天數。假如該字段設置的是7,那么從過期日2019/11/15日開始,到2019/11/22日這段時間之內,你
依然可以用你的舊密碼登錄,但只是能登錄而已。進入bash后,系統會強制讓你修改密碼,否則不予使用。
如果在這七天內,你依然不聽勸告,堅持不改密碼,那么對不起,7天之后,你的密碼就失效了(等同於作廢)。
在這7天內,你可以不登錄,但我會保留你密碼的有效性。7天之內,你要是想登錄,我可以准許你登錄,但是有一條,登錄后,必須先改密碼,
如果不改,你就無法使用系統。如果你想拖,7天之后,你的密碼就作廢了。
第八個字段:賬號失效日期。這個字段具有專權性,它能讓你的賬號失效或者不失效。【賬號的失效和密碼的失效不是一樣的概念】
2019/11/10對應18179
2019/11/15對應18184 過期日
2019/11/20對應18189
如果該字段設置18179,表示說你的賬號在2019/11/10這天會作廢。雖然你的密碼還沒有過期,但對不起,我是王,得聽我的。
如果該字段設置18189,表示說你的賬號在2019/11/20這天會作廢。雖然給了你7天的緩沖期,但對不起,在我面前,它不起作用。
第九個字段:保留字段。
常用命令:
useradd [-u UID] [-g 初始群組] [-G 次要群組] [-m/M] [-c 賬號意義說明] [-d 家目絕對路徑] [-s shell] [-r] \
[-e 賬號失效日期,格式為YYYY-MM-DD] [-f 密碼是否會失效,0立刻失效,-1永不失效] 賬號名稱
-M表示強制不建立家目錄,-m表示強制建立家目錄,-r表示創建系統賬號
-b選項:
# 創建賬號zhangsan,家目錄創建到/opt/目錄下,也就是/opt/zhangsan
useradd -b /opt zhangsan
-c選項:
# 添加賬號的同時,添加注釋
useradd -b /opt -c "測試" zhangsan
cat /etc/passwd
zhangsan:x:1002:1002:測試:/opt/zhangsan:/bin/bash
-d選項:
# 明確指定家目錄
useradd -c "測試-d選項" -d /home/lisi wangwu
注意:-d不能和-b一起使用。我們創建的賬號是wangwu,但指定的家目錄卻是/home/lisi。也就是說,家目錄的名字不一定要和賬號名一樣。

# 沒有使用-b和-d,則用戶的家目錄創建在/home/wangwu
useradd -c "測試-d選項" wangwu
-D選項:
修改默認值。
-e選項:
賬號失效日期。
useradd -e "2019-12-12" yangsilang
如果沒有用-e,就使用/etc/default/useradd中的EXPIRE變量。要是沒有EXPIRE變量,就使用空字符串。
-f選項:
密碼過期后,再過多少天,賬戶就會永久禁用。
0表示當密碼過期后,賬戶立即禁用。
-1表示不使用這個特性。也就是說,密碼過期后,保留該賬號直到永久。
其他的正數,則表示具體的天數。比如5表示密碼過期后,再過5天,禁用該賬號。
如果沒有使用-f,則使用/etc/default/useradd中的INACTIVE,如果沒有INACTIVE,則使用默認的-1.
-g選項:
組名或組ID。組名必須存在。
如果沒有使用-g,則會參考/etc/login.defs中的USERGROUPS_ENAB變量。如果值為yes,表示創建用戶的時候,同時創建組。組名就是用戶名。等同於在命令行上添加選項
-U。
如果值為no,(等同於添加-N選項)則會參考/etc/default/useradd中的GROUP變量,如果沒有GROUP,則使用100作為GID。
-G選項:
將用戶添加到多個組中。
useradd -G group1,group2,group3 zhangsan
-G后跟的組,要參考-g選項的標准。不符合,就報錯。默認是將用戶放到初始組。
一般來說,我們創建用戶賬號的時候只要指定賬號名稱即可:useradd 賬號名稱,這樣賬號的其他信息都會使用系統為我們設置的默認值。
[root@localhost ~]# useradd -D # 默認值 GROUP=100 # 默認組的ID HOME=/home # 默認家目錄所在目錄 INACTIVE=-1 # 密碼失效日 EXPIRE= # 賬號失效日 SHELL=/bin/bash # 默認shell SKEL=/etc/skel # 使用者家目錄的內容資料參考目錄 CREATE_MAIL_SPOOL=yes # 是否建立郵件信箱,/var/spool/mail/賬號名 # 這些默認參數實際上在文件/etc/default/useradd中。
useradd命令會為我們做以下這些事情:
<1> 在/etc/passwd建立一行與賬號相關的資料。
<2> 在/etc/shadow建立一行與此賬號密碼相關的數據,但是尚未有密碼。
<3> 在/etc/group建立一行此賬號的初始群組信息,群組名稱與賬號名稱一致。
<4> 在/etc/gshadow建立一行此賬號初始群組的密碼信息,但是沒有密碼。
<5> 在/home中建立此賬號家目錄,目錄名稱與賬號名稱一致,權限為700。
初始群組的兩種機制:公共群組機制(SuSE使用)和私有群組機制(RHEL和CENTOS)。
對於公共群組機制:創建的新賬號都會分配給GID為100的群組(組名為users),也就是說多個賬號都在users組中。使用了GROUP=100。
對於私有群組機制:每個賬號都有各自的群組和家目錄,大家並不共用。沒有使用GROUP=100。
/etc/default/useradd這個文件只是設置了一些賬號的基本信息默認值,更多參數默認值可在/etc/login.defs文件中查看。
總結起來,使用useradd命令創建賬號時會參考的文件有:/etc/default/useradd、/etc/login.defs、/etc/skel/*。
usermod
usermod -L # 凍結賬號(在密碼前加 "!")
usermod -U # 解凍賬號(取消密碼前的 "!")
userdel username
userdel -r username # 遞歸刪除(刪除家目錄)
passwd # 修改密碼,修改密碼屬性,凍結密碼,解凍密碼,查看密碼信息
chage # 也能修改密碼信息
chage [-d 最近修改密碼日期,格式為YYYY-MM-DD] [-m 密碼不可修改的天數] [-M 密碼需要再次修改的天數] \
[-W 在密碼過期日前幾天開始發出警告] [-I 密碼過期之后的賬號失效寬限天數] [-E 賬號失效日期,格式為YYYY-MM-DD]
[root@localhost ~]# chage -l yangling
Last password change : never
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
# id yangling
# finger # 查詢當前登錄系統的所有用戶信息
# finger yangling # 查詢某個用戶的屬性
# chfn # 修改finger中的展示信息
[root@localhost ~]# chsh -l # 查看可用的shell,內容來源於/etc/shells
/bin/sh
/bin/bash
/sbin/nologin
/usr/bin/sh
/usr/bin/bash
/usr/sbin/nologin
cat /etc/group
yangling:x:1000:yangling
群組名稱
群組密碼
GID
群組中的成員
cat /etc/gshadow
yangling:!!::yangling
群組名稱
群組密碼:通常給群組管理員使用,少有設置。
群組管理員的賬號。
組中的成員
創建組
groupadd [-g gid] 組名
創建系統組
groupadd -r -g gid 組名
修改組名(原來的名字是A,現在改為B)
groupmod [-g gid] [-n 新組名] 舊組名
不要隨意修改GID
刪除組(如果組內有用戶,則無法刪除)
groupdel 組名
初始群組與有效群組
初始群組:用戶登入系統之后就獲取到並擁有其相關權限的群組。也就是/etc/passwd文件第四個欄位上的GID對應的群組。
用戶可以加入多個群組。但是該用戶在創建新文件或新目錄的時候,新文件或新目錄的群組只能是用戶當前的有效群組。
有效群組:可以使用命令“groups”查看當前用戶加入的所有群組,列表中第一個群組即是當前有效群組,可以使用命令“newgrp 群組名稱”
切換有效群組,但是只能在當前用戶加入的所有群組中切換。切換有效群組之后會進入一個新的shell環境,可以使用“exit”命令來退出,回到原來有效群組和shell環境。
用戶加入群組
方法1:由root將用戶加入到組中。
usermod -a -G 'groupname' username
將username加入到groupname中。
方法2:由群組管理員來添加用戶到組中。
(1)用root指定群組的管理員。
修改群組密碼:gpasswd groupname
設置群組管理員、用戶成員:gpasswd [-A 群組管理員賬號列表] [-M 用戶成員賬號列表] 群組名稱
移除群組名稱:gpasswd -r 群組名稱
使群組密碼失效:gpasswd -R 群組名稱
gpasswd -a username groupname
將username加入到groupname中
su 賬號名 # 以non-login shell方式切換,不切換環境變量
su - # 以login shell方式切換,切換環境變量
su -l # 以login shell方式切換,切換環境變量
su - -c "指令" 賬號名 # 利用新身份執行一條指令,執行后身份恢復為當前用戶,不指定賬號時,表示切換為root身份。
使用su命令切換身份是需要輸入新切換賬號的密碼的(只有root不需要),也就是說,若要使用su切換身份,就必須要知道新切換賬號的密碼
才行。另一個命令sudo也可以切換身份執行命令操作,而且只需要輸入當前賬號密碼即可,無需知道新切換賬號的密碼,只是切換身份執行命令
之后會自動恢復到原來賬號身份。
sudo只是切換身份執行一個命令而已,要知道自己的密碼
su是切換身份,要知道新賬號的密碼
sudo -u 賬號名 指令
以-u后的賬號執行指令
沒有-u時,表示以root身份執行
/etc/sudoers
哪些用戶或群組可在哪些主機登入系統時切換到哪些賬號執行哪些指令,還可以設置執行sudo指令時無需輸入密碼。
