Linux用戶管理詳解
1、Linux中用戶和組的標識
說明:Linux系統是基於用戶身份對系統的資源進行管理的操作系統
(1)用戶帳號:UID(User Identity,用戶標識號)
(2)超級用戶在任何Linux系統中UID=0
(3)系統用戶在不同版本Linux中的UID範圍:UID:1-499或UID:1-999
(4)普通用戶在不同版本Linux中的UID範圍:UID:500-65535或UID:1000-65535
(5)組帳號:GID(Group Identify,組標識號)
組可以分為:初始組(私有組)和附加組(公共組)
(6)組的GID範圍和上面的普通用戶UID範圍相同,每創建一個普通用戶,默認會生成一個和用戶名相同的用戶組且
2、用戶和組相關文件
(1)用戶信息文件 /etc/passwd
[root@localhost ~]# vim /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
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
…………………………………
(2)用戶信息文件/etc/passwd詳細介紹
用戶信息文件內容全部是以冒號進行分割的,詳細介紹如下:
第一列:用戶名
第二列:密碼占位符
第三列:用戶 ID (UID)
0 :超級用戶的 UID,只要 UID 是 0 就是超級用戶。
1-499:系統用戶的範圍,此範圍的用戶不能用於登錄系統,只能用於軟件服
務運行使用,其中 1-99 是系統保留的賬戶,系統自動創建。100-499 是預留給用戶創建系統用戶的。
500-65535:普通用戶 UID。建立的普通用戶 UID 從 500 開始,最大到 65535。
這些用戶足夠使用了,但是如果不夠也不用害怕,2.6.x 內核以後的 Linux 系統用戶 UID 已經可以支持
第四列:組 ID(GID),添加用戶時,如果不指定用戶的初始組,則會自動創建和用戶名相同的組。
第五列:用戶描述信息
第六列:用戶家目錄,例如超級級管理員 root 的家目錄為/root/ ;普通用戶的家目錄 為/home/***
第七列:登錄 shell 類型 ,/bin/bash 能登錄系統;/sbin/nologin不能登錄系統
(3)用戶密碼文件/etc/shadow
[root@localhost ~]# vim /etc/shadow
root:$6$OmNu6a62J4t2sFEP$7FzLpbcwSs4TKRAtC9KOgTWvmX/dSphwBJnWOtLjG.sHgn4iMrEmL.T.dlC9am66i3xC4s4Mu5ENpxBEcTe6y1::0:99999:7:::
bin:*:17110:0:99999:7:::
daemon:*:17110:0:99999:7:::
adm:*:17110:0:99999:7:::
lp:*:17110:0:99999:7:::
sync:*:17110:0:99999:7:::
shutdown:*:17110:0:99999:7:::
…………………………………省略若幹
(4)用戶密碼文件/etc/shadow文件詳細介紹
用戶密碼文件/etc/shadow文件內容也是以冒號分割的,詳細介紹如下:
第一列:用戶名
第二列:加密密碼我們也可以在密碼前人為的加入“!”或“*”改變加密值讓密碼暫時失效,使這個用戶無法登陸,達到暫時禁止用戶登錄的效果。註意所有偽用戶的密碼都是“!!”或“*”,代表沒有密碼是不能登錄的。當然我新創建的用戶如果不設定密碼,它的密碼項也是“!!”,代表這個用戶沒有密碼,不能登錄。
第三列:密碼最近更改時間的時間戳( 1970 年 1 月 1 日作為標準時間)
時間戳轉換日期方法:
[root@localhost ~]# date -d "1970-01-01 17110 days"
2016年 11月 05日 星期六 00:00:00 CST
日期轉換時間戳方法:
[root@localhost ~]# echo $(($(date --date="2017-11-21" +%s)/86400+1))
17491
第四列:密碼最短有效期
第五例:密碼最長有效期
第六列:密碼到期前的警告天數
第七列:密碼過期後的寬限天數
第八列:密碼失效時間,這裏同樣要寫時間戳,也就是用 1970 年 1 月 1日進行時間換算。如果超過了失效時間,就算密碼沒有過期,用戶也就失效無法使用了
第九列:保留
(5)組信息文件/etc/group
[root@localhost ~]# vim /etc/group
root:x:0:
bin:x:1:
daemon:x:2:
sys:x:3:
adm:x:4:
tty:x:5:
disk:x:6:
lp:x:7:
…………………………………省略若幹
(6)組信息文件/etc/group文件詳細介紹
組信息文件/etc/group文件內容也是以冒號分割的,詳細介紹如下:
第一列: 組名
第二列: 組密碼占位符
第三列: 組 ID 號(GID)
第四列: 組內成員列表
(7)組密碼文件/etc/gshadow
[root@localhost ~]# vim /etc/gshadow
root:::
bin:::
daemon:::
sys:::
adm:::
tty:::
…………………………………省略若幹
(8)組密碼文件/etc/gshadow文件詳細介紹
組密碼文件/etc/gshadow文件內容也是以冒號分割的,詳細介紹如下:
第一列:用戶組
第二列:用戶組密碼,這個段可以是空的或!,如果是空的或有!,表示沒有密碼
第三列:用戶組管理者,這個字段也可為空,如果有多個用戶組管理者,用逗號分割
第四列:組成員,如果有多個成員,用逗號分割
(9)用戶的基本目錄
1、用戶的家目錄
超級用戶家目錄是 ’/root’
普通用戶家目錄是 ’/home/xxx’
2、用戶郵箱目錄 ‘/var/spool/mail/xxx’
3、用戶模板目錄 ‘/etc/skel/’
3、用戶和組相關命令
(1)添加用戶命令useradd
格式:useradd [選項] 用戶名
選項如下:
-u UID 指定 UID 創建用戶
-g 組名 指定初始組,盡量不要手動指定
-G 組名 指定附加組,將用戶加入到所指定組內。
-c 說明 添加描述信息
-d 目錄 手動指定家目錄,目錄不需要事先創建
-s shell類型 指定用戶是否能登錄系統
-M 創建時不生成用戶家目錄
例 1:
useradd -M –s /sbin/nologin zhangsan
創建 zhangsan 用戶,不創建用戶家目錄,並且不能登錄系統
例 2:
先執行“groupadd a1“,預先創建好需要的組
useradd –u 521 –g a1 –G root –d /home/b1 –c “test user” –s /bin/bash abc
-u 指定UID是521;-g指定初始組是a1;-G指定了附加組為 root組;-d指定了家目錄叫/home/b1;-c添加了“test user”作為描述信息;-s指定了登錄 shell類型為/bin/bash,允許登陸系統。
(2)useradd 創建用戶時默認規則及相關文件介紹
useradd 創建用戶時默認參考兩個配置文件,分別是/etc/default/useradd和/etc/login.defs
1、/etc/default/useradd文件介紹
[root@localhost ~]# vim /etc/default/useradd
# useradd defaults file
GROUP=100
新創建用戶時默認初始組的 GID 號(公共組)現在使用的是私有組機制(根據創建用戶名稱創建組)
HOME=/home 新創建用戶的家目錄的默認位置
INACTIVE=-1 密碼過期後寬限天數(過期停權),-1代表永不過期,0代表立即失效
EXPIRE= 密碼失效時間,此處寫時間戳,到期後立刻失效,不填寫表示用戶密碼永不過期。
SHELL=/bin/bash 此選項是創建用戶時默認的 shell 類型,/bin/bash 表示可以登錄系統
SKEL=/etc/skel 此選項是創建用戶時使用的模板目錄,/etc/skel 中的文件在用戶創建時
都會被復制到用戶家目錄下。
CREATE_MAIL_SPOOL=yes 此選項是是否給新用戶創建郵件緩沖(即新郵箱)
2、/etc/login.defs文件介紹
[root@localhost ~]# vim /etc/login.defs
MAIL_DIR /var/spool/mail 指定新用戶的默認郵箱位置
PASS_MAX_DAYS 99999 這行指定的是密碼的有效期
PASS_MIN_DAYS 0 這行指定的是兩次密碼的修改間隔時間
PASS_MIN_LEN 5 密碼的最小長度,現在驗證已經被 PAM 模塊取代
PASS_WARN_AGE 7 這行代表密碼修改到期前的警告天數
UID_MIN 1000 創建普通用戶的時候默認的起始 UID 號
UID_MAX 60000 創建普通用戶,不用 -u 指定時,默認最大的 UID 號
# System accounts
SYS_UID_MIN 201 創建系統用戶時默認的最小UID
SYS_UID_MAX 999 創建系統用戶時默認的最大UID
GID_MIN 1000 創建組的時候默認的起始 GID 號
GID_MAX 60000 創建組的時候默認的最大的 GID 號
# System accounts
SYS_GID_MIN 201 默認最小系統GID
SYS_GID_MAX 999 默認最大系統GID
CREATE_HOME yes 創建用戶時是否創建用戶家目錄 默認 yes 創建
UMASK 077 建立的用戶家目錄的默認權限
USERGROUPS_ENAB yes 使用命令 userdel 刪除用戶時,是否刪除用戶的初始組
ENCRYPT_METHOD SHA512 指定 Linux 用戶的密碼使用 SHA512 散列模式加密
(3)添加和修改密碼命令passwd
格式:passwd [選項] 用戶名
選項:
-l 用戶名 鎖定用戶的密碼,使之無法登錄到系統
-u 用戶名 解鎖用戶密碼
-S(大) 用戶名 查看用戶帳號的狀態(是否被鎖定)
第一次對一個用戶使用時是為此用戶創建密碼,第二次使用時是修改密碼。
例:root身份執行 passwd
[root@localhost ~]# passwd root root用戶修改自己的密碼
更改用戶 root 的密碼 。
新的 密碼:
無效的密碼: 密碼少於 8 個字符
重新輸入新的 密碼:
passwd:所有的身份驗證令牌已經成功更新。
[root@localhost ~]# passwd a1 root用戶修改普通用戶a1的密碼
更改用戶 a1 的密碼 。
新的 密碼:
無效的密碼: 密碼少於 8 個字符
重新輸入新的 密碼:
passwd:所有的身份驗證令牌已經成功更新。
註:root可以修改任意用戶密碼,普通用戶只能修改自己的密碼,當普通用戶沒有密碼時,自己是修改不了自己的密碼的!
非交互式密碼設置:
--stdin 使用 echo和|實現密碼非交互式創建
例:為普通用戶a1創建或修改密碼
[root@localhost ~]# echo '123456'|passwd --stdin a1
更改用戶 a1 的密碼 。
passwd:所有的身份驗證令牌已經成功更新。
(4)用戶信息修改命令usermod(必須是已存在的用戶)
格式:usermod [選項] 用戶名
選項:
-u UID 修改用戶的指定 UID
-g 組名 修改用戶的指定初始組(盡量不修改)
-G 組名 修改用戶的附加組(不管之前設置了多少附加組,都替換掉)
-c 說明 修改用戶的描述信息
-d 目錄 結合-m 選項直接對源家目錄進行改名實現修改家目錄
例:usermod –m –d /home/u4 user4(用戶user的原家目錄是/home/user4)
-s shell類型 修改用戶的登錄 shell 類型
-L(大)用戶名 鎖定用戶的密碼
-U(大)用戶名 解鎖用戶密碼
-l 新用戶名 舊用戶名 修改用戶名
(5)刪除用戶命令userdel
格式:userdel [選項] 用戶名
選項
-r 刪除用戶時,連帶家目錄一起刪除
(6)添加組命令groupadd
格式:groupadd 組名
(7)刪除組命令groupdel
格式:groupdel 組名
註意:被刪除的組盡量是空組
(8)向組內添加成員命令gpasswd
格式:gpasswd [選項] 用戶名 組名
選項:
-a 向指定組內添加一個成員
-d 把指定用戶從組內刪除
-M 定義組內成員列表,用戶之間用,分隔 (覆蓋式)
(9)其他相關命令
1. id 用戶名
顯示用戶的 UID、初始組、附加組列表
2. su 用戶名
切換用戶身份
su - 用戶名
連帶環境變量一起切換
3. newgrp 組名
修改用戶的有效組,切換到普通用戶之後,執行命令
有效組定義:用戶創建文件或目錄時使用哪個組作為文件的所屬組,就是有效組。
註:初始組、附加組:是用戶和組之間的關系
有效組:用戶和文件之間的關系
Linux用戶管理詳解