# /etc/passwd、/etc/shadow 上課講義 ## `/etc/passwd` - ![](https://hackmd.io/_uploads/SkuCP_Tt3.png) - 不用 sudo 就可以查看 - 每行代表一個帳號 - 有些帳號是為了系統正常運作而存在的,不可以亂刪 - 例如:nobody - 欄位架構 - 使用者名稱 - 密碼 - 使用者 id (uid) - 在 Linux 中,是透過 uid 來辨別使用者 - 使用者名稱只是參考用的 XD - 使用者所在的群組 id (gid) - `cat /etc/group` 可以查看結果是不是對得起來 - 使用者的資訊 - 在 `adduser` 指令中輸入的資訊都會存在這個欄位 - 用 `,` 隔開 - ![](https://hackmd.io/_uploads/HyckuO6Fn.png) - 登入後的起始目錄 (家目錄) - 登入後 shell 的路徑 - ![](https://hackmd.io/_uploads/SkxbuOaY2.png) ## `/etc/shadow` - ![](https://hackmd.io/_uploads/rJMf_OpYh.png) - 要用 sudo 才可以查看 - 欄位架構 - 使用者名稱 - 加密後的密碼 - 上一次密碼變更的天數 - 從 1970 年 1 月 1 日算起的天數 - [Unix Time](https://en.wikipedia.org/wiki/Unix_time) - 密碼最短使用期限 - 兩次變更密碼最短需要間隔多久,單位為天 - 如果此欄位為 0 則表示隨時可更改密碼 - 密碼最長使用期限 - 密碼最多可以使用多久,單位為天 - 如果此欄位是空的則代表關閉此功能 :::info **如果 `密碼最短使用期限` 大於 `密碼最長使用期限`** - 使用者就不能改密碼 - 例如 - `密碼最短使用期限` 設定 100 天 - `密碼最長使用期限` 設定 10 天 - 密碼 `123` 最長可以使用 10 天,但我需要等 100 天才可以改密碼 ::: - 密碼過期前發出警告的期限 - 密碼過期前多久,系統會對使用者發出警告,單位為天 - 如果此欄位是 0 則代表關閉此功能 - 密碼過期後的放寬天數 - 當密碼過期後,使用者還有多久的時間可以登入更改密碼,單位為天 - 如果此欄位是空的則代表關閉此功能 - 帳號過期時間 - 此帳號過期的時間點 - 從 1970 年 1 月 1 日算起的天數 - 如果此欄位是空的則代表關閉此功能 ## 密碼的欄位 - `x`:`/etc/passwd` 中的密碼都顯示為 `x` - 對應到存在 `/etc/shadow` 的密碼 - `!`:此帳號被鎖定,不能用密碼登入 - 用於使用者 - `*`:此帳號被鎖定,不能用密碼登入 - 用於服務 - ` `:沒有密碼 - 如果此時 `passwd` 會直接進入設定密碼的環節 - 有些讀取 `/etc/shadow` 的檔案,可能會因為此欄位是空的,就不提供服務 --- ## 實作 :::danger **注意事項** 要清楚自己下什麼指令,並做好改壞要重裝的決心 ::: - 玩之前先建立一個 user - `sudo adduser <使用者名稱>` - `cat /etc/passwd` - `sudo cat /etc/shadow` ### `/etc/shadow` - 密碼欄位 - 刪掉一個字 - 變成 `*`、`!` - 變成 ` ` ### `/etc/passwd` - 密碼欄位 - 變成 `*`、`!` - 變成 ` ` - uid - 變成 ` ` - 變成別人的 id - 可以到其他使用者的家目錄底下 `touch` 檔案 - `ls -al` 查看 owner - 起始目錄 - 改成不存在的路徑 - 改成 `/etc` - `pwd` 查看當前路徑 - shell 路徑 - 改成不存在的路徑 - 改成 `/bin/false` - 使用者無法登入 - 不會提供任何提示,然後狠狠地把你甩到一邊去 - 改成 `/usr/sbin/nologin` - 使用者無法登入 - 會給你提示,`This account is currently not available.` - 然後狠狠地把你甩到一邊去 - 改成 `/usr/game/sl` - `sudo apt install sl`