linux用戶和組詳解

一、用戶

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

linux用戶和組詳解

改變用戶 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 同樣以『:』作為分隔符,共有九個字段。

linux用戶和組詳解

linux用戶和組詳解

二、組

1. /etc/group 和/etc/gshadow

linux用戶和組詳解

也是以冒號『:』作為字段的分隔符,共分為四欄,每一字段的意義是:

linux用戶和組詳解

2. 有效群組(effective group)與初始群組(initial group)

還記得每個使用者在他的 /etc/passwd 裡面的第四欄有所謂的 GID 吧?那個 GID 就

是所謂的『初始群組 ( initial group ) 』了!也就是說,當使用者一登入系統,立刻就

擁有這個群組的相關權限的意思。舉例來說,我們上面提到 dmtsai 這個使用者的

/etc/passwd 與 /etc/group 還有 /etc/gshadow 相關的內容如下:

linux用戶和組詳解

在 /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運維方面的內容,感興趣的朋友可以關注下!!

linux用戶和組詳解


分享到:


相關文章: