用戶管理
用戶賬號#
/etc/passwd#
Linux 使用 /etc/passwd
文件嚟保存用戶賬號信息。
因為好多服務進程需要讀取用戶賬號嘅信息,可以見到呢個文件嘅權限都係可讀嘅。
查看某個用戶嘅賬號信息。
KEY | VALUE |
---|
用戶名 | kuga |
用戶密碼 | x |
用戶 ID | 1000 |
用戶組 ID | 1000 |
備註字段 | ,,, |
目錄位置 | /home/kuga |
默認 Shell | /bin/bash |
系統會預留一定嘅 UID 範圍,Ubuntu 新添加嘅用戶 ID 由 1000 開始。
下面嘅命令會按第 3 個字段 UID 逆序排序,然後輸出前 10 行,只顯示 136 字段(用戶名,UID,目錄位置)。
/etc/shadow#
由於歷史原因,早期嘅用戶密碼使用 /etc/passwd
存儲,所以文件名係 passwd。
後來因為密碼容易被暴力破解,依家嘅密碼已經搬到新文件 /etc/shadow
。
呢個文件只有 root 同 shadow 組可讀。
可以粗略睇睇呢個文件嘅內容。
呢啲字段一般都係管理密碼嘅(如幾多日後必須更改),呢度唔展開。
Useradd#
HOME 目錄#
默認唔創建用戶目錄。
使用 -m
參數會創建用戶目錄。
使用 -M
參數不會創建用戶目錄。
查看默認配置#
使用 -D 選項可以查看添加用戶時采用嘅默認配置。
- GROUP:用戶默認組 ID。
- HOME:用戶目錄位置。
- INACTIVE:密碼過期後多少天禁用賬號。
- EXPIRE:賬號過期日期。
- SHELL:默認使用嘅登錄 Shell。
- SKEL:Skeletal,該目錄內容會複製到用戶主目錄。
- CREATE_MAIL_SPOOL:是否創建郵件存儲文件。
/etc/default/useradd#
useradd
命令嘅默認配置文件。
如果把 SHELL 改成 /bin/bash
,那麼 useradd -D
就會自動更新。
/etc/login.defs#
用戶賬號同登錄管理嘅核心配置文件。
功能包括:密碼策略、UID/GID 範圍、HOME 目錄管理、用戶同組管理、登錄設置等等。
文件中嘅設置會影響著如 useradd
、usermod
、passwd
等命令嘅行為,修改前建議提前備份。
單獨睇一下 USERGROUPS_ENAB
參數。
如果 USERGROUPS_ENAB
嘅值為 yes:
userdel
:刪除用戶嘅時候,會同時刪除空嘅用戶用。useradd
:創建用戶嘅時候,會同時創建同用戶名一樣嘅組。
這就係為咗緊上面創建用戶嘅時候,沒有使用 GROUP=100
呢個默認參數。
使用命令修改配置#
修改默認登錄 Shell。
修改默認組 ID。
修改默認嘅 HOME 目錄。
執行命令後,你會發現,文件嘅權限由 644
-> 600
。
權限更正如下。
翻一下源碼,在 set_defaults(void)
方法中,執行過程大致如下:
- 使用
mkstemp
函數創建臨時文件 A。 - 處理
/etc/default/useradd
文件並複製到 A 中。 - 備份原來嘅
useradd
文件,重命名為 useradd-
。 - 把 A 文件覆蓋原來嘅
useradd
文件。 mkstemp
函數創建嘅文件權限係 0600
。
查看 useradd
同它嘅備份 useradd-
。
如果使用執行命令修改默認登錄 Shell。
再次查看兩個文件嘅 inode。
不難發現 useradd-
嘅 inode 就係修改前 useradd
嘅 inode。
關於權限被修改嘅問題,顯然係唔合理嘅,命令唔應該修改文件嘅權限。
在 GitHub 上可以查看這個 pull request。
Usermod#
更改用戶嘅登錄名#
將用戶添加到一個組#
-a
表示追加到組,而唔係替換當前組列表。
更改用戶嘅默認 Shell#
usermod
唔會檢查 Shell 嘅合法性,可用 chsh
代替。
更改用戶 ID#
Passwd#
修改當前用戶嘅密碼#
唔加參數就係修改當前用戶嘅密碼。
修改指定用戶嘅密碼#
登錄管理#
禁止密碼登錄#
下面兩種方法係一樣嘅,而且唔會禁止 SSH 公鑰認證。
執行後,/etc/shadow
文件嘅密碼字段前面會加 !
。
恢復密碼登錄#
下面兩種方法係一樣嘅,可以混著用。
執行後,/etc/shadow
文件嘅密碼字段前面會刪除 !
。
禁止 SSH 公鑰認證#
沒有了登錄 Shell,自然密碼也係唔能登錄。
恢復 SSH 公鑰認證#
Userdel#
僅刪除用戶#
呢種方法只刪除用戶,保留主目錄。
主目錄同郵件#
不但刪除用戶,還要刪除主目錄同郵件。
如果文件或目錄沒不存在,會在終端提示。
Adduser Package#
呢個包提供兩個實用命令,adduser
同 deluser
,屬於上層封裝好嘅工具。