一、用戶
1. UID 和 GID
Linux 是通過 UID(USER ID)和 GID(GROUP ID)來識別用戶的。賬號只是為了方便用戶
記憶。而 ID 與賬號的對應就在 /etc/passwd 當中。登錄 Linux 時,Linux 都幹了些啥?
1) 先找尋 /etc/passwd 裡面是否有這個賬號?如果沒有則跳出,如果有的話則將該
賬號對應的 UID ( User ID )與 GID ( Group ID )讀出來,另外,該賬號的家目錄與 shell
設定也一併讀出;
2) 再來則是核對密碼錶啦!這時 Linux 會進入 /etc/shadow 裡面找出對應的賬號與
UID,然後核對一下你剛剛輸入的密碼與裡頭的密碼是否相符?
3) 如果一切都 OK 的話,就進入 Shell 控管的階段囉!
2. /etc/passwd 和/etc/shadow
1) /etc/passwd
這個檔案的構造是這樣的:
每一行都代表一個賬號, 有幾行就代表有幾個賬號在你的系統中!
不過需要特別留意的是, 裡頭很多賬號本來就是系統中必須要的,我們可以簡稱他為
系統賬號, 例如 bin, daemon, adm, nobody 等等,這些賬號是系統正常運作時所需要的。
我們先來看一下每個 Linux 系統都會有的第一行,就是 root 這個系統管理員那一行
好了, 你可以明顯的看出來,每一行使用『:』分隔開,共有七列,分別是:
root : x : 0 : 0 : root : /root : /bin/bash
改變用戶 ID 的實驗:
root@linux ~]# vi /etc/passwd
.....(前面省略).....
dmtsai:x:501:501::/home/dmtsai:/bin/bash <==將原本的 501:501 改成 3000:501
[root@linux ~]# ls -ld /home/
drwxr-xr-x 3 501 dmtsai 4096 Aug 30 10:37 dmtsai
# 瞧!這裡就能夠知道,其實檔案記錄的是 UID 啦~
2) /etc/shadow
上面約略提到,由於每個程序都需要取得 uid 與 gid 來判斷權限的問題,所以,
/etc/passwd 的權限必須要設定成為只讀的權限。在這樣的情況下,即使這個檔案內的密碼
欄是加密的,壞心腸的朋友也可能利用暴力破解法去找出您的密碼數據...... 因為這樣的
關係,所以後來發展出將密碼移動到 /etc/shadow 這個檔案分隔開來的技術。
root:$1$i9Ejldjfjio389u9sjl$jljsoi45QE/:12959:0:99999:7:::
bin:*:12959:0:99999:7:::
daemon:*:12959:0:99999:7:::
adm:*:12959:0:99999:7:::
基本上, shadow 同樣以『:』作為分隔符,共有九個字段。
二、組
1. /etc/group 和/etc/gshadow
也是以冒號『:』作為字段的分隔符,共分為四欄,每一字段的意義是:
2. 有效群組(effective group)與初始群組(initial group)
還記得每個使用者在他的 /etc/passwd 裡面的第四欄有所謂的 GID 吧?那個 GID 就
是所謂的『初始群組 ( initial group ) 』了!也就是說,當使用者一登入系統,立刻就
擁有這個群組的相關權限的意思。舉例來說,我們上面提到 dmtsai 這個使用者的
/etc/passwd 與 /etc/group 還有 /etc/gshadow 相關的內容如下:
在 /etc/passwd 裡面,dmtsai 這個使用者所屬的群組為
GID=501 , 也就是 /etc/group 裡頭 dmtsai 那個群組啦~因為這是 initial group ,所
以, 使用者一登入就會主動取得,不需要在 /etc/group 的第四個字段寫入該賬號的! 但
是非 initial group 的其它群組可就不同了。
三、有關用戶和組的指令
1. 添加用戶 useradd
[root@oracle ~]# useradd [-u UID] [-g initial_group] [-G other_group] \
> -[Mm] [-c 說明欄] [-d home] [-s shell] username
參數:
-u :後面接的是 UID ,是一組數字。直接指定一個特定的 UID 給這個賬號;
-g :後面接的那個群組名稱就是我們上面提到的 initial group 啦~
該 group ID (GID) 會被放置到 /etc/passwd 的第四個字段內。
-G :後面接的群組名稱則是這個賬號還可以支持的群組。
這個參數會修改 /etc/group 內的相關資料喔!
-M :強制!不要建立使用者家目錄
-m :強制!要建立使用者家目錄!
-c :這個就是 /etc/passwd 的第五欄的說明內容啦~可以隨便我們設定的啦~
-d :指定某個目錄成為家目錄,而不要使用默認值;
-r :建立一個系統的賬號,這個賬號的 UID 會有限制 (/etc/login.defs)
-s :後面接一個 shell ,預設是 /bin/bash
2. 修改用戶 usermod
[root@oracle ~]# usermod [-cdegGlsuLU] username
參數:
-c :後面接賬號的說明,即 /etc/passwd 第五欄的說明欄,可以加入一些賬號的說明。
-d :後面接賬號的家目錄,即修改 /etc/passwd 的第六欄;
-e :後面接日期,格式是 YYYY-MM-DD 也就是在 /etc/shadow 內的第八個字段數據啦!
-g :後面接 group name,修改 /etc/passwd 的第四個字段,亦即是 GID 的字段!
-G :後面接 group name,修改這個使用者能夠支持的群組,修改的是 /etc/group 囉~
-l :後面接賬號名稱。亦即是修改賬號名稱, /etc/passwd 的第一欄!
-s :後面接 Shell 的實際檔案,例如 /bin/bash 或 /bin/csh 等等。
-u :後面接 UID 數字啦!即 /etc/passwd 第三欄的資料;
-L :暫時將使用者的密碼凍結,讓他無法登入。其實僅改 /etc/shadow 的密碼欄。
-U :將 /etc/shadow 密碼欄的 ! 拿掉
3. 修改密碼 passwd
[root@oracle ~]# passwd [useraccount]
[root@oracle ~]# passwd oracle //修改oracle用戶的密碼
要注意的是, passwd 這個指令由於使用者的身份而有兩種用法, 如果是 root ,由於 root 具有至高無上的權力,所以 root 可以利用 passwd[username] 來幫使用者修改他們的密碼!因此,『如果使用者的密碼不見了, root 是可以幫他們進行密碼的修改,而不需要知道舊密碼。』另外,也只有 root 可以隨便設定密碼,即使該密碼並不符合系統的密碼驗證要求~ 假
如我幫 dmtsai 建立的密碼太簡單,所以其實系統是『警告』過 root 的。 但在重複輸入兩次密碼後,嘿嘿!您還是會看到 successfully 這個成功的字樣呢! 那麼如果是一般身份使用者,或者是 root 想要修改自己的密碼時,直接輸入『 passwd 』, 就能夠修改自己的 密 碼 了 。 一 般 身 份 使 用 者 輸 入 的 密 碼 會 經 過 系 統 的 驗 證 , 驗 證 的 機 制 除 了/etc/login.defs 裡頭規定的最小密碼字符數之外,還會受到 /etc/pam.d/passwd 這PAM 模塊的檢驗呢!
一般來說,輸入的密碼最好要符合底下的要求:
密碼不能與賬號相同;
密碼儘量不要選用字典裡面會出現的字符串;
密碼需要超過 8 個字符;
如果無法經過驗證,那麼該密碼就不被接受,當然還是隻能使用舊密碼囉! 此外,僅
能接受三次密碼輸入,如果輸入的密碼都不被接受,那隻好....重新執行一次 passwd 啊!
而, 經過這個 passwd [username] 的動作後,您的賬號就會有密碼了。
4. 刪除用戶 Userdel
[root@oracle ~]# userdel [-r] username
參數:
-r :連同使用者的家目錄也一起刪除
這個指令下達的時候要小心了!通常我們要移除一個賬號的時候,你可以手動的將
/etc/passwd 與 /etc/shadow 裡頭的該賬號取消即可!一般而言,如果該賬號只是『 暫時
不啟用』的話,那麼將 /etc/shadow 裡頭最後倒數一個字段設定為 0 就可以讓該賬號無法
使用,但是所有跟該賬號相關的數據都會留下來! 使用 userdel 的時機通常是『 你真的
確定不要讓該用戶在主機上面使用任何數據了!』 另外,其實使用者如果在系統上面操作過
一陣子了,那麼該使用者其實在系統內可能會含有其它檔案的。
5. 顯示用戶所屬的組 groups
[root@oracle ~]#groups username
後面會分享更多linux運維方面的內容,感興趣的朋友可以關注下!!
閱讀更多 智能運維小講堂 的文章