Linux帳號與身份管理
1. linux帳號與使用者組
使用者識別碼:UID與GID
雖然我們平時在登入linux主機的時候,會輸入帳號,但是linux並不會直接認識我們的帳號,它認識的僅僅是ID。ID是一串數字,儲存在/etc/passwd中。而帳號僅僅是為了方便我們記憶而已。
Linux一共有兩種ID,即UID和GID,UID是使用者身份的標識,GID是群組的標識,它存在/etc/shadow中。
2. 使用者帳號
當我們登入主機時,會出現一個login介面提示我們登入,這時輸入我們的帳號和密碼後,linux會做什麼呢?
1) 先尋找/etc/passwd看是否有這個帳號,如果沒有則退出,反之讀出該使用者的UID,GID,shell以及家目錄等資訊。
2) Linux進入/etc/shadow中尋找對應的帳號與UID,判斷使用者輸入的密碼與裡面的密碼是否一致。
3) 如果一切相符,則進入shell的掌控階段。
由上面的流程可以得知,與帳號有關的最重要的兩個檔案就是/etc/passwd以及/etc/shadow,一個管帳號,一個管密碼。
/etc/passwd檔案結構
root:x:0:0:root:/root:/bin/bash
huli:x:500:500:huli:/home/huli:/bin/bash
其中每一行代表一個欄位,有一些帳號是系統正常運行所必須得,我們稱它們為系統帳號,每一行共有7個欄位,使用’:’分隔開
1)使用者名稱稱
2)密碼,一般是一個’x’,由於安全起見,現在的版本中密碼都移到了/etc/shadow中。
3)UID
4)GID
5)賬戶描述資訊
6)使用者家目錄
7)該使用者預設的shell
注意:當UID是0時,表示這個賬戶是系統管理員,因此,要使一個帳號變成系統管理員,可以將它的UID設成0。
/etc/shadow檔案結構
root:$1$3FuRYPZx$CxcC2ghSgPjp7MzbWAal:15251:0:99999:7:::
同樣,shadow的每一行也代表一個賬戶,也是以’:’分隔,但是它有9個欄位。
1)使用者名稱稱,與passwd對應
2)密碼:這是真正的密碼,經過加密,如果密碼欄的第一個字元是’*’或者是’!’,表示這個帳號並不會用來登入。
3)最近更改密碼的日期,這是距離1970年1月1日的天數。
4)密碼不可更改的天數:這個欄位表示這個帳號的密碼需要經過幾天后才能更改,如果是0的話,表示密碼隨時可以更改。
5)密碼需要重新更改的天數:如果為99999的話,表示密碼不需要更改
6)密碼更改期限前的警告期限
7)密碼到期的寬限時間:如果密碼失效了,還可以用這個密碼在這個欄位設定的天數內進行登入,如果在這個天數後還沒有更改密碼,那麼帳號將無法再進行登入。
8)帳號失效日期,這個欄位是自1970年以來的總日數。
9)保留
有效使用者組與初始使用者組
初始使用者組:新增加一個賬戶時的預設使用者組
有效使用者組:建立立一個檔案時,檔案所屬的使用者組
可以使用groups來查看目前使用者所屬的使用者組,在輸出地訊息中,第一個輸出的使用者組就為有效使用者組。我們可以使用newgrp來改變我們的有效使用者組。
帳號管理:useradd、相關設定檔案、passwd、usermod、userdel
Useradd username
參數:
-u : 後面接UID,是一組數字。直接給這個帳號制定一個特定的UID
-g : 後面接的使用者組名稱就是上面提到的初始使用者組。
-G: 後面接的使用者組名稱是這個帳號還可以支援的使用者組
-M: 強制,不要建立使用者家目錄。
-m : 強制,要建立使用者家目錄。
-c : 這個是/etc/passwd第5欄的說明內容。
-d : 指定某個目錄稱為家目錄,而不要使用預設值。
-r : 建立一個系統帳號,這個帳號的UID會有限制(/etc/login.defs)
-s : 使用的預設shell
這個命令可能會更改的檔案有:
/etc/passwd
/etc/shadow
/etc/group
/etc/gshadow
/home/username
這個命令參考的檔案有:
/etc/default/useradd
/etc/login.defs
/etc/skel/*
passwd(更改密碼)
passwd [-lunxwS] username
參數:
-l : 將username帳號的密碼鎖住(lock),在/etc/shadow內的密碼欄修改。
-u: 將-l的lock解開
-n: 後面接天數,/etc/shadow內的第四欄
-x: 後面接天數,/etc/shadow內的第五欄
-w: 後面接天數,/etc/shadow內的第六欄
-S: 顯示當前這個username的相關資訊
注意:所有的使用者均可使用passwd來修改自己的密碼,但只有root可以使用該命令修改別人的密碼。
usermod(用於修改帳號相關的資訊)
usermod [-cdegGlsuLU] username
參數:
-c : 後面接帳號的說明,/etc/passwd的第5欄
-d : 後面接帳號的家目錄,/etc/passwd的第6欄
-e : 後面接日期,格式是YYYY-MM-DD,/etc/shadow的第8欄
-g : 後面接group name,/etc/passwd的第4欄
-G : 修改該使用者所支援的使用者組,修改的是/etc/group
-l :後面接帳號名稱,/etc/passwd的第一欄
-s :後面接shell的實際檔案,如果/bin/bash
-u :後面接UID,/etc/passwd第3欄
-L :暫時凍結使用者,即修改/etc/shadow的密碼欄
-U :將/etc/shadow密碼欄的!去掉,解凍。
Userdel(刪除賬戶)
Userdel [-r] username
參數:
-r : 連同使用者的家目錄一起刪除
切換使用者身份(su,sudo)
su可以切換到root身份,不過需要root密碼。如果直接使用su,那麼MAIL/PATH/USER等環境變數還是原來登陸者的(注意HOME變數會切換),如果希望在切換身份時環境變數也跟著變,那麼建議使用su -。
su [-lmc] [username]
參數:
- : 如果執行su –時,表示該使用者想要變換身份成為root,且使用root的環境參數檔案,如/root/.bash_profile等
-l : 後面可以接使用者,例如su –l huli,這個-l的好處是,可使用變換身份者
的所有相關環境設定檔案。
-m :-m與-p是一樣的,表示“使用當前環境設定,而不重新讀取新使用者的設定檔案”
-c :僅進行一次命令,-c後面接命令。
sudo的一個弊端是普通使用者必須知道管理員的密碼,當系統中有許多使用者時,
如果每個使用者都知道管理員密碼,便存著者安全隱患。這個時候,可以使用
sudo,sudo是如何工作呢?
當使用者執行sudo時,系統會先尋找/etc/sudoers檔案,判斷使用者是否有sudo。
如果有許可權,便提示使用者輸入自己的密碼來確認。
若密碼輸入成功,便可執行命令。
sudo [-u [username|#uid]] command
參數:
-u : 後面接使用者帳號名稱,或者是UID。
手動增加使用者
如果要手動增加使用者,必須清楚得瞭解到所有相關的設定檔案。
一般,手動增加使用者會涉及到以下幾個檔案的修改:
/etc/passwd
/etc/shadow
/etc/group
/etc/gshadow
/home/username
系統提供了一些工具來保證手動添加使用者的安全性
peck
它能夠檢查/etc/passwd帳號設定檔案內的資訊,以及實際的家目錄是否存在
等資訊,還可以比較/etc/passwd、/etc/shadow的資訊是否一致,另外,如果
/etc/passwd內德資料欄位錯誤,也會提示修改。
pwconv
這個命令的目的是將/etc/passwd內的帳號與密碼移到/etc/shadow中。
pwunconv
這個命令的目的是將/etc/shadow內的密碼欄資料寫回到/etc/passwd中。
grpconv
這個命令的目的是將/etc/group內的帳號與密碼移動到/etc/gshadow中
chpasswd
這個命令可以讀入未加密前的密碼,並且經過加密後,將加密後的密碼寫入
/etc/shadow中。它可以由標準輸入讀入資料,每個資料的格式是:
“username:password”
例:echo “skind:user!@#” | chpasswd