用戶和組

UID 和 GID

雖然我們登陸 Linux 系統(tǒng)時(shí),輸入的是帳號(hào),但是其實(shí)電腦并不會(huì)直接識(shí)別帳號(hào)名稱,它僅認(rèn)識(shí) ID 而已。
每個(gè)登陸用戶至少都會(huì)取得兩個(gè) ID,一個(gè)是用戶ID(User ID ),一個(gè)是群組ID(Group ID)。文件是如何知道它是屬于哪個(gè)用戶和群組呢?其實(shí)就是通過(guò) UIDGID

用戶

/etc/passwd

這個(gè)文件的結(jié)構(gòu):每一行代表一個(gè)用戶帳號(hào),每一行的內(nèi)容使用冒號(hào) : 隔開(kāi),總共有 7 項(xiàng)內(nèi)容:
1.用戶名稱
2.密碼,由于歷史原因,密碼欄都是 x,真正的密碼在 /etc/shadow 中;
3.UID,特別的,root 用戶的 UID0,1-999 是系統(tǒng)帳號(hào);
4.GID,對(duì)應(yīng) /etc/group 中的 GID
5.備注
6.家目錄
7.Shell

/etc/shadow

這個(gè)文件主要與用戶密碼相關(guān),結(jié)構(gòu)和 /etc/passwd 類似,每一行代表一個(gè)用戶密碼和限制條件:
1.用戶名稱;
2.密碼,注意是經(jīng)過(guò)加密的密碼;
3.最近更換密碼的日期;
4.密碼不可更換的天數(shù);
5.密碼需要更換的天數(shù);
6.密碼需要更換期限前的警告天數(shù);
7.密碼過(guò)期后的帳號(hào)寬限時(shí)間;
8.帳號(hào)失效日期;
9.保留;

群組

/etc/group

這個(gè)文件記錄 GID 與群組名稱的對(duì)應(yīng)關(guān)系。

vi /etc/group

root:x:0:
bin:x:1:
daemon:x:2:
sys:x:3:

每一行代表一個(gè)群組,以冒號(hào) : 作為分隔符,總共有 4 欄,每個(gè)欄位的意義是:

  1. 群組名稱
  2. 群組密碼
  3. GID
  4. 該群組所包含的用戶名稱,如果有多個(gè)用戶,用逗號(hào) , 隔開(kāi),不要有空格

有效群組和初始群組

初始群組(Initial group)

當(dāng)用戶一登陸系統(tǒng),立刻就擁有這個(gè)群組的相關(guān)權(quán)限。
可以通過(guò)查看 /etc/passwd 文件里面用戶的 GID 確定初始群組。使用者一登陸就會(huì)主動(dòng)取得,不需要在 /etc/group 文件的第 4 個(gè)欄位中寫(xiě)入該群組。

CentOS 用 useradd <username> 命令創(chuàng)建用戶時(shí)默認(rèn)會(huì)創(chuàng)建一個(gè)和 username同名的用戶組,所以一般用戶的初始群組就是和用戶名同名的群組。

有效群組(Effective group)

假如有一個(gè)用戶 lc,由于是使用 useradd <username> 命令創(chuàng)建的,現(xiàn)在 lc 這個(gè)用戶的初始群組是 lc。如果它要加入到 users 組中,那么必須要在 /etc/group 文件中找到 users 那一行,將 lc 這個(gè)用戶加到第 4 欄當(dāng)中,這樣 lc 就加入了 users 群組中。如果一個(gè)用戶不止加入一個(gè)群組,用逗號(hào) , 隔開(kāi)即可。

切換有效群組

groups

如何知道一個(gè)用戶屬于哪些群組呢?可以使用命令 groups ,結(jié)果如下:

[lc@localhost~]$ groups
lc users

上面輸出的信息顯示用戶 lc 同時(shí)屬于 lcusers 兩個(gè)群組。同時(shí),還有一個(gè)隱含的信息:第一個(gè)輸出的群組為有效群組。也就是說(shuō), 目前用戶 lc 的有效群組是 lc。此時(shí),如果我以 touch <filename> 新建一個(gè)文件,這個(gè)文件的擁有者是 lc,群組也是 lc

[lc@localhost~]$ touch test
[lc@localhost~]$ ll test
-rw-rw-r-- lc lc test

通常有效群組的作用就是新建文件時(shí)。

newgrp

那么有效群組是否可以切換呢?
我想把有效群組切換到 users,此時(shí)可以使用 newgrp 命令,這個(gè)命令可以變更目前用戶的有效群組。

[lc@localhost~]$ newgrp users
[lc@localhost~]$ groups
users lc
[lc@localhost~]$ touch test2
[lc@localhost~]$ ll
-rw-rw-r-- lc lc test
-rw-r--r-- lc users test2
[lc@localhost~]$ exit # !!!注意,要離開(kāi) newgrp 的環(huán)境!

上面輸出的信息顯示有效群組已經(jīng)變更為 users

newgrp 命令也是有限制的,切換的群組必須是該用戶所屬的群組。如果想切換的 sshd 群組,但是因?yàn)?lc 并不屬于 sshd 群組,此時(shí)是無(wú)法完成切換的。
另外,newgrp 命令是以另外一個(gè) shell 來(lái)提供功能的,這個(gè)新的 shell 中用戶 lc 的有效 GIDusers。所以想要回到原來(lái)的環(huán)境中,輸入 exit 即可回到原來(lái)的 shell

/etc/gshadow

這個(gè)文件的作用是建立群組管理員,和 /etc/group 一樣也是使用冒號(hào) : 作為分隔符,每一欄的含義如下:
1.群組名稱
2.密碼欄。密碼欄為嘆號(hào) ! 或者為表示該群組沒(méi)有群組管理員
3.群組管理員的帳號(hào)
4.該群組所屬的用戶

由于目前有類似 sudo 這樣的工具,所以群組管理員的功能已經(jīng)很少使用了。

帳號(hào)管理

新增和刪除用戶

新增用戶

使用系統(tǒng)默認(rèn)值新增用戶,操作如下:

useradd <username>

默認(rèn)值內(nèi)容包括:

  • /etc/passwd 裡面建立一行與帳號(hào)相關(guān)的資料,包括建立 UID/GID/家目錄等;
  • /etc/shadow 裡面將此帳號(hào)的密碼相關(guān)參數(shù)填入,但是尚未有密碼;
  • /etc/group 裡面加入一個(gè)與帳號(hào)名稱一模一樣的群組名稱;
  • /home 底下建立一個(gè)與帳號(hào)同名的目錄作為使用者家目錄,且權(quán)限為 700

useradd -D 命令可以查看默認(rèn)值

有特殊需求的新增用戶操作如下:

useradd -u <uid> -g <groupname> <username>

這里我們指定了新增用戶的 uid,指定了一個(gè)已經(jīng)存在的群組作為使用者的初始群組。

密碼設(shè)定

以上新增了用戶之后,在默認(rèn)情況下,該用戶是鎖定無(wú)法登陸的,需要使用 passwd 命令設(shè)定密碼才可以使用

passwd <username>

特別的,如果 passwd 不加參數(shù),意思是修改 root 用戶的密碼。

設(shè)置密碼校驗(yàn):PAM模塊

Pluggable Authentication Modules
PAM 是獨(dú)立的 API,任何程序有驗(yàn)證需求時(shí),都可以向 PAM 發(fā)出驗(yàn)證請(qǐng)求,PAM 經(jīng)過(guò)一系列的驗(yàn)證之后,將驗(yàn)證結(jié)果返回給程序。
passwd 使用的就是 pam_cracklib.so 模塊,如果我們輸入字典中可以找到的字符串, passwd 就會(huì)有報(bào)錯(cuò)提示。

passwd 驗(yàn)證執(zhí)行流程:
1.執(zhí)行 /usr/bin/passwd 命令;
2.passwd 調(diào)用 PAM 模塊進(jìn)行驗(yàn)證;
3.PAM 模塊會(huì)到 /etc/pam.d/ 尋找與 passwd 同名的配置文件;
4.根據(jù) /etc/pam.d/passwd 內(nèi)的配置,引用相關(guān)的 PAM 模塊逐步進(jìn)行驗(yàn)證;
5.將驗(yàn)證結(jié)果會(huì)傳給 passwd
6.passwd 程序會(huì)根據(jù) PAM 會(huì)傳的結(jié)果決定下一步動(dòng)作(重新設(shè)置密碼或者通過(guò)驗(yàn)證)。

pam.pwquality.so 已經(jīng)取代 pam_cracklib.so,完全兼容,并且提供 /etc/security/pwquality.conf 配置文件額外提供默認(rèn)值。

設(shè)置密碼復(fù)雜度

pam_cracklib.so 支持的部分選項(xiàng):
retry=N:定義登錄/修改密碼失敗時(shí),可以重試的次數(shù)
minlen=N:新密碼的最小長(zhǎng)度
dcredit=N:當(dāng) N>0 時(shí)表示新密碼中數(shù)字出現(xiàn)的最多次數(shù);當(dāng)N<0時(shí)表示新密碼中數(shù)字出現(xiàn)最少次數(shù);
ucredit=N: 當(dāng) N>0 時(shí)表示新密碼中大寫(xiě)字母出現(xiàn)的最多次數(shù);當(dāng)N<0時(shí)表示新密碼中大寫(xiě)字母出現(xiàn)最少次數(shù);
lcredit=N: 當(dāng)N>0 時(shí)表示新密碼中小寫(xiě)字母出現(xiàn)的最多次數(shù);當(dāng)N<0時(shí)表示新密碼中小寫(xiě)字母出現(xiàn)最少次數(shù);
ocredit=N:當(dāng)N>0 時(shí)表示新密碼中特殊字符出現(xiàn)的最多次數(shù);當(dāng)N<0時(shí)表示新密碼中特殊字符出現(xiàn)最少次數(shù);
maxrepeat=N:拒絕包含多于N個(gè)相同連續(xù)字符的密碼。 默認(rèn)值為0表示禁用此檢查
maxsequence=N:拒絕包含長(zhǎng)于N的單調(diào)字符序列的密碼。默認(rèn)值為0表示禁用此檢查。實(shí)例是 '12345''fedcb'。除非序列只是密碼的一小部分,否則大多數(shù)此類密碼都不會(huì)通過(guò)簡(jiǎn)單檢查。
enforce_for_root: 如果用戶更改密碼是root,則模塊將在失敗檢查時(shí)返回錯(cuò)誤。默認(rèn)情況下,此選項(xiàng)處于關(guān)閉狀態(tài),只打印有關(guān)失敗檢查的消息,但 root 仍可以更改密碼。不要求root用戶輸入舊密碼,因此不會(huì)執(zhí)行比較舊密碼和新密碼的檢查

修改 /etc/pam.d/system-auth 文件:

[root@localhost~]$ vi /etc/pam.d/system-auth

#%PAM-1.0
# This file is auto-generated.
# User changes will be destroyed the next time authconfig is run.
auth        required      pam_env.so
auth        required      pam_faildelay.so delay=2000000
auth        sufficient    pam_unix.so nullok try_first_pass
auth        requisite     pam_succeed_if.so uid >= 1000 quiet_success
auth        required      pam_deny.so

account     required      pam_unix.so
account     sufficient    pam_localuser.so
account     sufficient    pam_succeed_if.so uid < 1000 quiet
account     required      pam_permit.so

password    requisite     pam_pwquality.so try_first_pass local_users_only retry=3 authtok_type= minlen=8 ucredit=-1 lcredit=-1 ocredit=-1 dcredit=-1 enforce_for_root
password    sufficient    pam_unix.so sha512 shadow nullok try_first_pass use_authtok
password    required      pam_deny.so

session     optional      pam_keyinit.so revoke
session     required      pam_limits.so
-session     optional      pam_systemd.so
session     [success=1 default=ignore] pam_succeed_if.so service in crond quiet use_uid
session     required      pam_unix.so

找到 pam_pwquality.so 后面加上需要驗(yàn)證的參數(shù):
password requisite pam_pwquality.so try_first_pass local_users_only retry=3 authtok_type= minlen=8 ucredit=-1 lcredit=-1 ocredit=-1 dcredit=-1 enforce_for_root

設(shè)置密碼到期時(shí)間

修改 /etc/login.defs 文件:

PASS_MAX_DAYS   180  #密碼最長(zhǎng)過(guò)期天數(shù)
PASS_MIN_DAYS   0  #密碼最小過(guò)期天數(shù)
PASS_MIN_LEN    8  #密碼最小長(zhǎng)度
PASS_WARN_AGE   7   #密碼過(guò)期警告天數(shù)

以上是針對(duì)新增用戶的設(shè)置,如果是已有用戶不受影響,需要使用以下命令修改已有用戶的密碼到期時(shí)間:

# 先查看密碼過(guò)期和失效策略
passwd -S lc
# 也可以使用 chage 命令查看
chage -l lc
# 修改密碼過(guò)期時(shí)間,設(shè)置180天過(guò)期
passwd -x 180 lc
設(shè)置多次輸入密碼錯(cuò)誤鎖定用戶

編輯 /etc/pam.d/sshd 文件:

[root@localhost~]$ vi /etc/pam.d/sshd

#%PAM-1.0  
auth required pam_tally2.so deny=5 unlock_time=1200 even_deny_root root_unlock_time=1200
...

參數(shù)說(shuō)明:

even_deny_root:也限制 root 用戶;

deny:設(shè)置普通用戶和root用戶連續(xù)錯(cuò)誤登陸的最大次數(shù),超過(guò)最大次數(shù),則鎖定該用戶

unlock_time:設(shè)定普通用戶鎖定后,多少時(shí)間后解鎖,單位是秒;

root_unlock_time:設(shè)定root用戶鎖定后,多少時(shí)間后解鎖,單位是秒;

注意,配置需要寫(xiě)在第一行

$ ssh root@120.25.226.1
# 錯(cuò)誤密碼
root@120.25.226.1's password:
Permission denied, please try again.
root@120.25.226.1's password:
Permission denied, please try again.
root@120.25.226.1's password:
Permission denied, please try again.
root@120.25.226.1's password:
Permission denied, please try again.
root@120.25.226.1's password:
Permission denied, please try again.
# 正確密碼
root@120.25.226.1's password:
Permission denied, please try again.

從上面的輸出信息可以看到 ,在嘗試 5 次錯(cuò)誤密碼登錄之后,幾十使用正確密碼也無(wú)法登錄了,需要的等待 20 分鐘解鎖。

設(shè)置終端連接超時(shí)時(shí)間

設(shè)置 TMOUT 環(huán)境變量,30 分鐘超時(shí):

[root@localhost~]$ echo $TMOUT # 先確定是否有該環(huán)境變量
[root@localhost~]$ vi /etc/profile
export TMOUT=1800 # 30分鐘超時(shí)
[root@localhost~]$ source /etc/profile
鎖定和解鎖用戶
# 使某個(gè)用戶失效,無(wú)法登陸
passwd -l lc
# 恢復(fù)
passwd -u lc

修改用戶資料

usermod [-cdegGlsuLU] <username>
參數(shù):
-c  :後面接帳號(hào)的說(shuō)明,即 /etc/passwd 第五欄的說(shuō)明欄,可以加入一些帳號(hào)的說(shuō)明。
-d  :後面接帳號(hào)的家目錄,即修改 /etc/passwd 的第六欄;
-e  :後面接日期,格式是 YYYY-MM-DD 也就是在 /etc/shadow 內(nèi)的第八個(gè)欄位資料啦!
-f  :後面接天數(shù),為 shadow 的第七欄位。
-g  :後面接初始群組,修改 /etc/passwd 的第四個(gè)欄位,亦即是 GID 的欄位!
-G  :後面接次要群組,修改這個(gè)使用者能夠支援的群組,修改的是 /etc/group 囉~
-a  :與 -G 合用,可『增加次要群組的支援』而非『設(shè)定』喔!
-l  :後面接帳號(hào)名稱。亦即是修改帳號(hào)名稱, /etc/passwd 的第一欄!
-s  :後面接 Shell 的實(shí)際檔案,例如 /bin/bash 或 /bin/csh 等等。
-u  :後面接 UID 數(shù)字啦!即 /etc/passwd 第三欄的資料;
-L  :暫時(shí)將使用者的密碼凍結(jié),讓他無(wú)法登入。其實(shí)僅改 /etc/shadow 的密碼欄。
-U  :將 /etc/shadow 密碼欄的 ! 拿掉,解凍啦!

刪除用戶

userdel [-r] <username>
參數(shù):
-r :同時(shí)刪除用戶的家目錄

# 刪除用戶 `lc`,同時(shí)刪除家目錄
[root@localhost~]$ userdel -r lc

想要徹底清除某個(gè)用戶留下的痕跡,可以在刪除之前通過(guò) find / -user <username> 命令查找整個(gè)系統(tǒng)中數(shù)據(jù)該用戶的文件,然后再刪除,這樣可以比較徹底地刪除用戶文件。

新增和刪除群組

新增群組

groupadd [-g] [-r] <groupname>
參數(shù):
-g : 指定特定的 GID
-r : 新增系統(tǒng)群組

groupadd lcgroup

刪除群組

groupdel <groupname>
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容