參考:https://blog.csdn.net/love20165104027/article/details/82386271linux
跟用戶相關的文件:shell
/etc/passwdbash
/etc/shadow測試
跟組相關的文件:編碼
/etc/group加密
/etc/gshadowspa
/etc/passwd的文件內容:.net
root:x:0:0:root:/root:/bin/bash命令行
第一個字段:帳號名稱code
第二個字段:密碼。(密碼信息加密放在/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指令時無需輸入密碼。