useradd 與 usermod:使用者帳號管理 文章首圖

useradd 與 usermod:使用者帳號管理

useradd 與 usermod:使用者帳號管理

在 Linux 系統管理的世界裡,使用者帳號是權限控制的基石。無論是伺服器維護還是開發環境搭建,正確管理使用者帳號是每位系統管理員的基本功。雖然現代 Linux 發行版提供了如 adduser 這類更友善的互動式腳本,但底層核心的 useraddusermod 指令才是真正掌控帳號細節的利器。這篇文章將深入解析這兩個指令的用法、選項與實際應用場景,幫助你精準掌控系統使用者。

useradd:建立使用者的底層機制

useradd 是一個非互動式的指令,它直接修改系統檔案(如 /etc/passwd/etc/shadow 等)來建立新帳號。由於它不進行任何確認對話,因此非常適合寫入腳本中自動化執行。

基本語法與選項

最基礎的用法僅需指定使用者名稱:

sudo useradd newuser

執行後,系統會自動建立該使用者,並根據 /etc/login.defs 的設定分配 UID、建立家目錄(若配置允許)及設定預設 Shell。然而,預設情況下新建立的使用者並沒有設定密碼,無法直接登入。

常見選項解析

  1. 指定家目錄路徑 (-d): 預設家目錄通常位於 /home/使用者名稱。若你想將家目錄放在其他位置,可使用 -d 參數:

    sudo useradd -d /opt/custom_home devuser

    注意:-d 僅指定路徑,並不會自動建立該目錄,需手動執行 mkdir 並設定權限。

  2. 指定 Shell (-s): 預設 Shell 通常為 /bin/bash/bin/sh。若需指定其他 Shell(如 zsh 或限制權限的 /usr/sbin/nologin):

    sudo useradd -s /usr/bin/zsh zshuser
  3. 建立家目錄 (-m): 在某些發行版或配置中,useradd 預設不會建立家目錄。加上 -m 可強制建立,並複製 /etc/skel 下的預設設定檔:

    sudo useradd -m -s /bin/bash -G sudo webadmin

    這裡我們同時使用了 -G 將使用者加入 sudo 群組,賦予其管理員權限。

  4. 設定密碼 (-p)強烈建議不要直接使用 -p 參數,因為它接受的是加密後的字串,且密碼會出現在歷史紀錄中,極度不安全。正確做法是建立帳號後,使用 passwd 指令設定。

usermod:修改現有用者屬性

當系統運行一段時間後,你可能需要調整現有使用者的屬性,例如變更家目錄、加入新群組或鎖定帳號。usermod 正是為此設計。

實際操作範例

  1. 變更使用者名稱: 若發現帳號名稱拼寫錯誤,可使用 -l 選項:

    sudo usermod -l correct_name old_name

    注意:這不會自動更新家目錄名稱,需手動配合 usermod -dmv 處理。

  2. 加入次要群組: 若需將使用者加入多個群組,使用 -aG(append groups):

    sudo usermod -aG docker,devops deployer

    務必加上 -a,否則會覆蓋掉該使用者原本所屬的其他次要群組。

  3. 鎖定與解鎖帳號: 對於暫時不需要登入的使用者(如維護期間),可使用 -L 鎖定,-U 解鎖:

    sudo usermod -L temp_user
    # 檢查狀態,密碼欄位會多出 '!'
    sudo passwd -S temp_user
  4. 變更 Shell 與家目錄: 同時修改多個屬性:

    sudo usermod -s /bin/zsh -d /home/zshuser -m zshuser

    -m 選項會將舊家目錄內容移動到新指定的 -d 路徑,確保資料不遺失。

常見問題與解決方案

Q1: 為什麼 useradd 建立的使用者無法登入?

這是新手最常遇到的問題。useradd 僅建立帳號記錄,並不會自動設定密碼。若未設定密碼,該帳號處於「無效」狀態。 解決方法:建立帳號後,立即執行 passwd 指令:

sudo useradd testuser
sudo passwd testuser
# 此時輸入兩次新密碼即可

Q2: useraddadduser 有何不同?

adduser 是 Perl 腳本(Debian/Ubuntu 特有),它會引導你進行互動式設定,包括自動建立家目錄、設定密碼、填寫使用者資訊(GECOS)等,對人類更友善。而 useradd 是原始的二進位程式,適合非互動式腳本。 建議:手動管理時使用 adduser 較不易出錯;撰寫自動化腳本時則使用 useradd 並搭配參數。

小結

掌握 useraddusermod 是深入理解 Linux 權限架構的關鍵。記住,useradd 重在「建立」,需搭配 -m-G 等選項確保環境完整;usermod 重在「調整」,使用 -aG 避免覆蓋既有群組成員。在實際操作中,始終記得在建立帳號後使用 passwd 設定密碼,並利用 idgroups 指令驗證最終配置是否如預期。透過這些基礎指令的靈活運用,你將能更高效、安全地管理 Linux 系統的使用者資源。