習(xí)筆記(用戶管理篇):用戶、組與權(quán)限的鑰匙)
在 Linux 常用命令學(xué)習(xí)筆記高級篇 里我們把文本處理這條線推到了深水區(qū)用正則給grep裝上瞄準(zhǔn)鏡再請出 Vim / Emacs 讓你能直接在終端里改文件。但那篇結(jié)尾我打了個包票下一篇正式進入「用戶和管理」。今天就來兌現(xiàn)。你可能會想我天天sudo apt install敲得飛起還要專門學(xué)用戶管理答案是——只要你在用 Linux你就活在一個多用戶、權(quán)限隔離的世界里。為什么cat /etc/shadow會被拒絕為什么sudo之后就能看useradd一聲令下系統(tǒng)悄悄改了哪幾個文件這篇一次講清。學(xué)完你會發(fā)現(xiàn)所謂權(quán)限底層就是用戶 組 文件屬主屬組三個東西在博弈。先把用戶和組搞明白下一篇講chmod/chown才會順理成章。前情回顧本篇要「接」上哪些舊工具之前學(xué)過的本篇怎么接上它whoami基礎(chǔ)篇它只告訴你「我是誰」本篇講清楚「我是哪個UID、屬于哪個組、為什么root的 UID 永遠是 0」cat/less/ls -la基礎(chǔ)、進階本篇用它們翻/etc/passwd、/etc/shadow、/etc/group并用ls -la看文件的屬主與屬組grep進階、高級本篇用它從幾百號用戶里精準(zhǔn)撈出某人grep ^bob: /etc/passwdVim / Emacs高級篇本篇鄭重提醒改用戶文件千萬別手賤用 Vim 直接改/etc/passwd要用useradd/usermod這類專用命令記住一個核心心法用戶和組是「權(quán)限的主體」文件屬主屬組是「權(quán)限的客體」。Linux 先把主體認清楚才談得上給客體分配權(quán)限。一、為什么要有用戶和組在任何多用戶操作系統(tǒng)里管理用戶和組都是基礎(chǔ)概念Linux 尤其把這事做成了訪問控制和權(quán)限管理的核心。每個用戶有獨立主目錄通常在/home/用戶名用來存你自己的文件和配置不同發(fā)行版路徑可能略有差異。系統(tǒng)靠數(shù)字認人用戶名只是給人看的可讀標(biāo)簽真正干活的是UID用戶 ID和GID組 ID。所有權(quán)限判斷都基于這兩個數(shù)字。組是用戶的集合把一堆人歸到一個組就能一次性給這一組人授權(quán)不用一個個配。進程也分身份你跑起來的進程是以「啟動它的那個用戶」的身份在運行文件訪問同樣按權(quán)限防止 A 用戶翻看 B 用戶的私貨。在這個層級的最頂端站著一個凌駕于所有人之上的人root也就是超級用戶。它的 UID 永遠為0擁有無限權(quán)限——能讀任何文件、管任何進程。但一直用 root 操作很危險一個手滑就可能把系統(tǒng)搞崩。所以 Linux 的設(shè)計哲學(xué)是平時用普通用戶需要時用sudo臨時提權(quán)。小實驗試著看一眼存著加密密碼的文件cat /etc/shadow # 報錯Permission denied權(quán)限拒絕 ls -la /etc/shadow # -rw-r----- 1 root shadow 847 Jun 30 22:48 /etc/shadow # 只有 root 用戶和 shadow 組的成員能讀 sudo cat /etc/shadow # 輸入密碼后內(nèi)容就顯示出來了這個「被拒絕 → 加 sudo → 放行」的過程正是用戶與權(quán)限管理最直觀的體現(xiàn)了。二、root 與 sudo提權(quán)要有節(jié)制2.1sudo臨時以 root 身份跑單條命令sudosuperuser do讓你不用登錄 root 賬戶就能以超級用戶身份執(zhí)行某一條命令。這是日常管理的首選方式sudo cat /etc/shadow # 以 root 權(quán)限查看受保護文件 sudo apt update # 以 root 權(quán)限更新軟件源系統(tǒng)會提示你輸入當(dāng)前用戶的密碼認證通過后才放行。2.2su切換用戶含切到 root除了sudo你還能用susubstitute user切換用戶來獲取別的身份。不帶用戶名時它默認切到rootsu # 開啟一個 root 的 shell要輸入 root 密碼 su bob # 切到用戶 bob要輸入 bob 的密碼2.3 為什么不建議常駐 root shell用su打開一個 root shell 看起來很爽但隱患不小持續(xù)以 root 操作犯系統(tǒng)級錯誤的風(fēng)險陡增root shell 里的操作不會記在你個人用戶名下出事后很難審計「是誰改的」。所以最佳實踐明確需要超級權(quán)限的單條命令用sudo別長期泡在 root shell 里。2.4sudoers文件誰能 sudo 由它說了算系統(tǒng)怎么決定「你能不能用 sudo」答案在/etc/sudoers這個配置文件里——它列出了被授權(quán)以超級用戶身份運行命令的用戶和組。永遠用visudo來編輯它而不是拿 Vim 直接改sudo visudovisudo會在保存前做語法檢查能防止你把配置寫錯、結(jié)果把自己鎖在 sudo 權(quán)限之外那種「改完 sudoers 然后 sudo 用不了」的慘劇八成就是手改惹的禍。三、三個核心文件Linux 把用戶、組的信息分散在幾個純文本文件里像三本賬本。理解它們的字段用戶管理就通透了。3.1/etc/passwd用戶信息總表7 個字段cat /etc/passwd # root:x:0:0:root:/root:/bin/bash # 1 2 3 4 5 6 7每一行代表一個用戶7 個字段用冒號:隔開字段含義說明1 用戶名登錄名如root2 密碼占位符x表示真密碼在/etc/shadow*表示賬戶被鎖、不能登錄空白表示無密碼3 UID用戶 IDroot永遠是0普通用戶從 1000 起4 GID主組 ID用戶主組的數(shù)字標(biāo)識5 GECOS注釋傳統(tǒng)存放全名、電話、辦公室等逗號分隔6 主目錄家目錄絕對路徑如/root、/home/bob7 Shell默認登錄 shell如/bin/bash/sbin/nologin表示禁止登錄你會注意到文件里有一大堆系統(tǒng)賬戶如daemon、www-data它們不是給人登錄用的而是以低權(quán)限跑特定服務(wù)/進程專門用來增強系統(tǒng)安全性。?? 編輯警告技術(shù)上你可以用 Vim 或vipw直接改/etc/passwd但強烈不建議。手改極易引入語法錯誤可能把自己鎖在系統(tǒng)外。請用下面要講的useradd/usermod/userdel專用命令。3.2/etc/shadow密碼保險柜9 個字段/etc/shadow存的是加密密碼和密碼老化策略。它和全局可讀的/etc/passwd分開而且必須 sudo 才能看——這樣非特權(quán)用戶連密碼哈希都摸不到更別提拿去離線破解。sudo cat /etc/shadow # root:MyEPTEa$6Nonsense:15000:0:99999:7:::每行 9 個字段仍以冒號分隔字段含義1 用戶名登錄名2 加密密碼哈希后的密碼*或!表示賬戶被鎖3 最后改密日期距 1970-01-01 的天數(shù)0表示下次登錄強制改密4 最小密碼年齡改密后必須等多久才能再改5 最大密碼年齡密碼有效的最大天數(shù)過期必須改6 密碼警告期過期前幾天開始提醒7 不活躍期過期后賬戶被禁用前的寬限天數(shù)8 賬戶過期日絕對過期日期同樣按 1970 起算天數(shù)9 保留字段留作未來擴展現(xiàn)代發(fā)行版還會疊加 PAM可插拔認證模塊等更靈活的認證機制但/etc/shadow的基礎(chǔ)地位不動搖。3.3/etc/group組信息表4 個字段cat /etc/group # root:*:0:pete每行一個組4 個字段字段含義1 組名組的唯一名稱2 組密碼遺留功能幾乎不用通常*或x占位3 GID組的數(shù)字 ID4 成員列表屬于該組的用戶名逗號分隔示例root:*:0:pete表示組名root、無密碼、GID0、成員里有用戶pete。四、用戶管理三板斧useradd / usermod / userdel理論講完上實操。管理用戶有專用命令比手改文件安全可靠得多。4.1 添加用戶useraddsudo useradd [選項] 用戶名常用選項日常幾乎必加-m和-s參數(shù)作用實例-m自動創(chuàng)建家目錄/home/用戶名sudo useradd -m -s /bin/bash bob-s /bin/bash指定登錄 shell/sbin/nologin禁止登錄sudo useradd -m -s /bin/bash bob-u UID指定用戶 UIDsudo useradd -m -u 1200 myuser-g 組/GID指定主組初始登錄組sudo useradd -m -u 1200 -g 1001 myuser-G 組1,組2指定附屬組逗號隔開sudo useradd -m -s /bin/bash testuser -G sudo-c 備注寫入/etc/passwd第 5 字段GECOSsudo useradd -m -c Bob Lee bob-d /path手動指定家目錄路徑sudo useradd -m -d /data/bob bob-e YYYY-MM-DD設(shè)置賬號過期時間sudo useradd -m -e 2026-12-31 bob-M不創(chuàng)建家目錄服務(wù)賬號常用sudo useradd -M -s /sbin/nologin appuser一條綜合示例sudo useradd -m -s /bin/bash -u 1200 -g 1001 -G sudo testuser # -m 建家目錄 -s 用 bash -u 指定 UID -g 主組 1001 -G 追加 sudo 附屬組useradd是低級標(biāo)準(zhǔn)工具部分發(fā)行版還提供交互性更好的adduser腳本但useradd是通用寫法。4.2 刪除用戶userdelsudo userdel 用戶名 # 刪用戶保留家目錄 sudo userdel -r 用戶名 # -r連家目錄一起刪徹底刪除4.3 改密碼passwdpasswd # 普通用戶改自己的密碼 sudo passwd bob # root 改別人密碼不用輸入舊密碼五、組管理主組 vs 附屬組最容易混淆Linux 里每個用戶一定屬于1 個主組初始組 0 到多個附屬組附加組。/etc/passwd第 4 字段的 GID → 對應(yīng)用戶的主組 ID/etc/group存所有組信息/etc/gshadow存組密碼很少用5.1 主組與附屬組的區(qū)別主組primary group-g每個用戶有且只有一個。用戶新建文件/目錄時文件的默認屬組就是主組。創(chuàng)建用戶時默認會生成一個同名私有組如user:x:1001:1001::/home/user:/bin/bashGID1001 就是同名私有組。附屬組supplementary group-G可以有 0 個或多個。用來獲取額外權(quán)限比如加入sudo、docker組。它不影響新建文件的默認屬組。5.2 查看用戶所屬組groups # 當(dāng)前登錄用戶的所有組 groups 用戶名 # 查看指定用戶的所有組 id 用戶名 # 輸出 UID、主組 GID、以及全部附屬 GID示例輸出id user1 # uid1000(user1) gid1000(user1) 組1000(user1),27(sudo) # gid1000 → 主組逗號后面的是附屬組這里 user1 還屬于 sudo 組5.3 創(chuàng)建 / 刪除組groupadd webgrp # 創(chuàng)建組 webgrp自動分配 GID groupadd -g 2000 webgrp # 指定 GID 創(chuàng)建 groupdel webgrp # 刪除組 # 注意不能刪除某個用戶的「主組」要先改掉該用戶的主組才能刪5.4 修改用戶組usermod# -g 修改主組 usermod -g webgrp user1 # -G 設(shè)置附屬組不帶 -a 會直接覆蓋全部原有附屬組 usermod -G sudo,docker user1 # -aG 追加附屬組保留原有附屬組最常用、最安全 usermod -aG docker user1大坑usermod -G docker user1如果忘了加-a會把 user1 從sudo等其他附屬組里一腳踢出去要追加永遠用-aG。六、文件屬主與屬組文件有兩個關(guān)鍵屬性屬主哪個用戶和屬組哪個組。ls -la # -rw-r--r-- 1 user1 webgrp 123 test.txt # 屬主:user1 屬組:webgrp幾條關(guān)鍵規(guī)律用戶新建文件時文件默認屬組 當(dāng)前用戶的主組如果用戶只是某個組的附屬組成員新建文件的屬組不變還是主組只是該用戶擁有這個組對應(yīng)的權(quán)限。這正好引出下一篇的核心問題那一串-rw-r--r--到底是什么意思怎么用chmod改讀寫執(zhí)行權(quán)限、用chown/chgrp改屬主屬組——也就是我們常說的「文件權(quán)限管理」。小結(jié)這一篇我們把「用戶和管理」這根線立了起來為什么要有用戶和組多用戶、權(quán)限隔離的世界靠 UID / GID 認人rootUID0是頂端但別常駐root 與 sudosudo臨時提權(quán)最安全su切用戶有常駐 root 的風(fēng)險sudoers用visudo改三本賬/etc/passwd7 字段、/etc/shadow9 字段密碼保險柜、/etc/group4 字段用戶三板斧useradd-m -s -u -g -G 等、userdel-r 連家目錄、passwd組管理主組 vs 附屬組——groups/id查看groupadd/groupdel增刪usermod -aG追加別漏-a文件屬主屬組新建文件默認屬組主組這正好接上下一篇的chmod/chown。如果在練手時想有個能隨手敲命令的環(huán)境基礎(chǔ)篇、進階篇、高級篇都推薦過的Linux Journeyhttps://labex.io/linuxjourney同樣適合本篇網(wǎng)頁里就能實操useradd、翻/etc/passwd邊學(xué)邊練印象最深。 Linux 學(xué)習(xí)系列 · 全部文章Linux 常用命令學(xué)習(xí)筆記基礎(chǔ)篇基礎(chǔ)命令Linux 常用命令學(xué)習(xí)筆記進階篇I/O重定向和文本處理Linux 常用命令學(xué)習(xí)筆記高級篇正則表達式與 Vim / Emacs 編輯器習(xí)筆記Linux 常用命令學(xué)習(xí)筆記用戶管理篇用戶、組與權(quán)限的鑰匙Linux 常用命令學(xué)習(xí)筆記權(quán)限管理篇看懂 rwx管好每一份文件的生殺大權(quán)