linux 基礎(7)賬號和群組的管理

Ofnoname發表於2023-02-10

瞭解賬號和群組的基本資訊

賬號使用

如何檢視 linux 計算機上有哪些賬號呢?賬號的資訊儲存在/etc/passwd中,開啟就可以看到:

less /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
...
lighthouse:x:1000:1000::/home/lighthouse:/bin/bash
...

每一行代表一個賬號的相關資訊,用冒號分隔。除了安裝時註冊的個人賬號和 root,還有 bin, daemon, adm, nobody 等各種系統賬號,一般不需要管他。

第一列是賬號名稱,第二列是一個“x”,在老版本用來儲存密碼,現在密碼移動到了/etc/shadow中,這一列就不再使用。

第三列代表這個使用者的 UID。在 linux 中,使用者名稱只是給人看的,機器儲存使用者資料都使用 UID。比如你修改了自己的 UID,而你的檔案裡儲存的所有者還是原來的 UID,此時你的檔案就不在屬於你了。root 的 UID 是 0。普通使用者的 UID 一般從 1000 開始。

第四列代表使用者所屬主要群組的群組 GID。第五列是該賬號的文字說明(給人看的)。

第六列代表這個使用者的主資料夾。第七列代表該使用者登入後取得的 shell 是哪個。其中有個特殊的/sbin/nologin,代表沒有 shell,所以這些使用者即使輸入了賬號密碼也無法登陸。

接下來再看看管理密碼的/etc/shadow

root:$1$GEIBZMzb$PEV.S1LMYYkII.YBGBOvL/:19370:0:99999:7:::
bin:*:17834:0:99999:7:::
daemon:*:17834:0:99999:7:::
adm:*:17834:0:99999:7:::
lp:*:17834:0:99999:7:::
sync:*:17834:0:99999:7:::

在這個檔案中,第一列仍然是使用者名稱,第二列就是密碼了。不過這個密碼是雜湊加密過的,即使能看到,你也不能反推原文(不同distribution 和版本的加密演演算法有所不同)。如果一般使用者忘記了密碼,可以讓 root 進行重置;如果忘記了 root 的密碼,就只能使用單人維護模式登入重置了,但你並不能知道原來的密碼。

之後幾列都和密碼過期提示有關,第三列代表最近更改密碼的日期(Unix紀日法),第四列是密碼更改的冷卻時間,第五列表示密碼強制更改的時間,第六列代表密碼強制更改的時間的提醒時間。第七列代表密碼過期的寬限時間。當密碼時間到期時,再登陸會要求強制修改密碼才能使用,如果寬限時間也到期,那這個密碼就失效,再也不能登入了。99999天是273年,相當於永不過期。

第八列是賬號失效日期,賬號失效日期以後這個賬號將被停用。

群組使用

群組記錄在/etc/groups

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

第一列代表群組名稱,第二列代表群組密碼(仍然用 x 代替),第三列代表這個群組的 GID,第四列代表這個群組的成員。

一個群組包含多個使用者,一個使用者也可以加入多個群組,在/etc/passwd裡,每個使用者只記錄了一個 GID,這個就是使用者的初始組(initial group),預設和使用者名稱相同,只有你一個人。而/etc/groups中這個群組第四列也不需要記錄這個成員。

有效群組(effective group)則表示當前使用哪一個群組工作,它控制你新建立的檔案屬於哪個群組。使用groups命令可以檢視你屬於那些群組,其中第一個就是當前的有效群組。切換有效群組使用newgrp命令,這個命令會開啟一個新shell,其中你的有效群組可以變更為其他群組。

賬號和群組的增刪改查

增加和刪除使用者

各種指令可以用來建立新使用者,需要 root 才能操作。useradd可以新增新使用者。passwd可以給使用者賦予密碼

useradd test # 新增賬號test

useradd 會寫入/etc/passwd,shadow,group並建立主資料夾。在大部分 distribution 中,新使用者預設會建立一個只有自己的群組作為初始群組。

useradd的引數可以配置使用者的所有資訊,包括 UID GID,主資料夾,shell等。

剛建立的賬號暫時不可登入,用passwd可以給使用者賦予密碼。

passwd test
# 接下來鍵盤輸入密碼,或者使用--stdin接受管線輸入

使用者一般只能修改自己的密碼,先輸入舊密碼,在輸入新密碼,PAM驗證模組會保證你的密碼強度(限制密碼長度,限制密碼和賬號相同,限制常見單詞)。root無需舊密碼就可以修改,且沒有任何限制。

usermod用於編輯已存在的使用者配置,引數和新增使用者基本相同。

usermod [-cdegGlsuLU] test
-c: 賬號說明
-d: 主資料夾
-L: 凍結密碼
...

userdel可以刪掉一個使用者。移除 passwd, shadow, group裡的資訊,清除主資料夾。

userdel test

輸入id檢視一個使用者的資訊。

id root
uid=0(root) gid=0(root) groups=0(root)

增加和刪除群組

和使用者類似,相應的命令可以新增,編輯,刪除群組

groupadd tgroup
groupmod -n tgroupnew
groupdel tgroupnew

使用 su 和 sudo 切換賬號

su 和 sudo 用來切換成其他賬號身份執行命令。

su # 切換為 root(non-login)
su - # 切換為 root(login)
su test # 切換為 test(non-login)
su - test # 切換為 test(login)

接下來 su 需要對應使用者的密碼。sudo 則只需要自己的密碼

sudo cat /etc/shadow # 以 root 身份執行命令
# 輸入自己的密碼

sudo -u www touch default # 以 www 身份建立檔案
sudo -i # 登入 root 使用者

sudo又不用輸入root密碼,有了 sudo,豈不是就跟root沒區別了?實際上,sudo 的相關資訊儲存在/etc/sudoer中。這裡寫明瞭“哪些使用者可以用sudo,用sudo可以做哪些指令,哪些指令需要密碼確認”。

sudo vim /etc/sudoers
root    ALL=(ALL)       ALL

## Allows members of the 'sys' group to run networking, software,
## service management apps and more.
# %sys ALL = NETWORKING, SOFTWARE, SERVICES, STORAGE, DELEGATING, PROCESSES, LOCATE, DRIVERS

## Allows people in group wheel to run all commands
%wheel  ALL=(ALL)       ALL

## Same thing without a password
# %wheel        ALL=(ALL)       NOPASSWD: ALL

lighthouse ALL=(ALL) NOPASSWD: ALL

#代表註釋,橫排則代表一條資訊。在我這裡 root 可以隨機執行sudo做任何事,lighthouse 也可以隨意使用sudo,且不需要密碼。%wheel代表 wheel 群組,這個群組的成員也可以隨意執行sudo。有大量的資訊被註釋掉了備用,如果需要可以取消註釋。

相關文章