使用者識别碼:UID與GID
使用者ID:UID
群組ID:GID
#檢視系統裡面有沒有名為dmtsai的使用者
id dmtsai
/etc/passwd檔案結構:記錄賬号資訊
每一行都代表一個賬号,有幾行就代表有幾個賬号在你的系統中。不過需要特别留意的是,
裡頭很多賬号本來就是系統正常運作所必須要的。我們可以簡稱他為系統賬号,例如bin,
daemon,adm,nobody…
head -n 4 /etc/passwd

content | |
---|---|
root | 賬号名稱 |
x | 密碼 |
UID;系統管理者UID是0,1-999UID系統賬号,1000~60000給一般使用者 | |
GID,與/etc/group有關 | |
root | 使用者資訊說明欄 |
/root | 家目錄 |
/bin/bash | shell目錄 |
/etc/shadow檔案結構:記錄賬号密碼
head -n 4 /etc/shadow
content | |
---|---|
root | 賬号名稱 |
$ 6$tbCCce… | 經過編碼的密碼 |
16559 | 最近更改密碼的日期 |
密碼不可被改動的天數 | |
99999 | 密碼需要變更的天數,你必須要這個天數内重新設定密碼 |
7 | 密碼需要變更期限前的警告天數;密碼到期前7天之内,系統會警告使用者 |
- | 密碼過期後賬号寬限時間;密碼過期賬号還能工作 |
- | 賬号失效日期 |
- | 保留 |
這裡Linxu的日期是以1970年1月1日作為1而累加的,1971年1月1日則為366。
計算累積日期:
(1)你想要計算的日期 (2)一天的秒數 (3)+1:補齊1970/01/01當天
/etc/group檔案結構:記錄群組資訊
head -n 4 /etc/group
content | |
---|---|
root | 群組名稱 |
x | 群組密碼 |
GID | |
- | 此群組内的賬号名稱。例如将dmtsai和alex加入群組root,這裡寫成 dmtsai,alex |
Q:假如我同時加入多個群組,那麼我在作業時,到底是以那個群組為準?
有效群組(effective group)與初始群組(initial group)
初始群組:使用者/etc/passwd中第四欄GID所對應的組
我們該如何知道所有支援群組呢?
groups
我們如何切換有效群組?
newgrp 切換組名
切換後輸入exit傳回原來的群組
/etc/gshadow
head -n 4 /etc/gshadow
content | |
---|---|
root | 群組名稱 |
- | 密碼欄,如果開頭為!表示無合法密碼,所有無群組管理者 |
- | 群組管理者的賬号 |
- | 加入該群組支援的所屬賬号 |
賬号管理
useradd:新增使用者
useradd [-u UID] [-g 初始群組] [-G 次要群組] [-mM] [-c 說明欄] [-d homedictory ] [-s shell] 使用者賬号名
option | mean |
---|---|
-u | 後面接UID,指定一個特定UID給這個賬号 |
-g | 指定initial group,/etc/passwd的第四個欄目 |
-G | 指定次要群組,/etc/group |
-d | 指定某個目錄做家目錄,用絕對路徑表達 |
-s | 預設/bin/bash |
-c | /etc/passwd第五欄的說明内容 |
-m | 強制,建立使用者的家目錄 |
-M | 強制,不建立使用者的節目錄 |
-r | 建立一個系統賬号 |
#完成參考預設值建立一個使用者,名稱為vbird1
useradd vbird1
grep vbird1 /etc/passwd /etc/shadow /etc/group
#以users為初始群組,uid為1500建立一個名為vbird2的賬号
useradd -g users -u 1500 vbird2
#建立一個系統賬号,名稱為vbird3
useradd -r vbird3
所有系統賬号不會主動建立家目錄
useradd參考檔
呼叫出useradd的預設值
useradd -D
title | mean |
---|---|
GROUP=100 | 建立賬号的初始群組使用的GID為100,在CentOS上面預設的群組為與賬号名相同的群組 |
HOME=/home | 使用者家目錄的basedir |
INACTIVE=-1 | 密碼過期後是否會失效的設定值。0代表密碼過期立刻失效;-1代表永遠不會失效;數字n代表過期n天後會失效 |
EXPIRE=:賬号失效日期 | |
SHELL=/bin/bash | 預設使用的shell程式檔名 |
SKEL=/etc/skel | 使用者家目錄參考基準目錄 |
CREATE_MAIL_SPOOL=yes | 建立使用者的mailbox |
UID/GID密碼參數參考
/etc/login.defs
passwd
所有人均可使用來改自己的密碼:passwd [–stdin] 賬号名稱
root功能:passwd [-l] [-u] [–stdin] [-S] [-n day] [-x day] [-w day] [-i day] 賬号
option | mean |
---|---|
–stdin | 可以通過來自前一個管線的資料,作為密碼輸入 |
-l | lock,/etc/shadow第二欄最前面加上!使密碼失效 |
-u | unlock |
-S | 列出密碼的相關參數 |
-n | 多久可以修改密碼的天數 |
-x | 多久内必須修改密碼 |
-w | 密碼過期前的警告天數 |
-i | 密碼時效天數 |
要幫一般賬号建立密碼需要使用 “passwd 賬号” 格式,使用“passwd”是修改自己的密碼
#root給予vbird2密碼
passwd vbird2
#用vbird2登入後,修改VBird2自己的密碼
passwd
設定密碼的要求
(1)密碼不能與賬号相同
(2)需要超過8個字元
(3)密碼不要使用個人資訊
(4)密碼不要使用簡單關系式
(5)密碼盡量使用大小寫字元、數字和特殊字元組合
#使用standard input建立使用者密碼
echo "abc543CC" | passwd --stdin vbird2
#管理vbird2密碼具有60天變更,密碼過期10天後失效的設定
passwd -x 60 -i 10 vbird2
passwd -S vbird2
#讓vbird2的賬号失效并觀察 再生效
passwd -l vbird2
passwd -S vbird2
passwd -u vbird2
chage
如何顯示更詳細的密碼參數顯示功能?
passwd -S
chage
chage [-ldElmMW] 賬号名
option | mean |
---|---|
-l | 列出該賬号的詳細密碼參數 |
-d | 修改shadow第三欄目(最近一次更改密碼的日期)後面接日期,格式為YYYY-MM-DD |
-E | 後接日期,修改shadow第八欄目(賬号失效日) |
-l | 後接天數,修改密碼失效日期 |
-m | 後接天數,修改密碼最短保留天數 |
-M | 後接天數,修改密碼多久需要進行變更 |
-W | 後接天數,修改密碼過期前警告日 |
#列出vbird2的詳細密碼參數
chage -l vbird2
#建立一個agetest的賬号,該賬号第一次登入後使用預設密碼,但必須要更改密碼後才能夠登入系統使用bash環境
useradd agetest
echo "agetest" | passwd -stdin agetest
chage -d 0 agetest 密碼建立時間被改為1970/1/1
usermod
usermod [-cdegGlsuLU] username
option | mean |
---|---|
-c | 修改賬号的說明 |
-d | 修改家目錄 |
-e | 修改失效日期,格式YYYY-MM-DD |
-g | 修改初始群組 |
-G | 修改次要群組 |
-l | 修改賬号名稱 |
-s | 修改shell |
-u | 修改UID |
-L | 當機密碼 |
- U | 解凍密碼 |
#修改使用者vbird2的說明欄,加上 VBird's test
usermod -c "VBird's test" vbird2
#使用者vbird2在2015/12/31失效
usermod -e "2015-12-31" vbird2
#建立vbird3這個系統賬号時沒有給予家目錄,請建立他的家目錄
ll -d ~vbird3 确認家目錄不存在
cp -a /etc/skel /home/vbird3
chown -R vbird3:vbird3 /home/vbird3 連同家目錄底下的一起變更
chmod 700 /home/vbird3
ll -a ~vbird3
userdel
userdel [-r] username
-r:連同使用者家目錄一并删除
一般使用者功能(非root)
id:查詢某人或自己相關UID/GID資訊
id username
#查閱root自己的相關id資訊
id
#查閱vbird1
id vbird1
finger:查閱使用者相關資訊
finger [-s] username
-s:僅列出使用者的賬号、全名、終端代号與登入時間等
#觀察vbird1的使用者相關賬号屬性
finger vbird1
title | content |
---|---|
Login | 使用者賬号(/etc/passwd 第一欄目) |
Name | 全名(/etc/passwd 第五欄目的注解) |
Directory | 家目錄 |
Shell | shell檔案所在 |
Never logged in | 使用者登入主機的情況 |
No mail | 調查/var/spool/mail當中的信箱資料 |
No plan | 調查~username/.plan檔案,并讀取其中說明 |
#利用vbird1建立自己的計劃檔
echo "i will study Linux during this year." > ~/.plan
finger vbird1
#找出目前在系統上面登入的使用者與登入時間
finger
chfn:change finger
chfn [-foph] username
option | mean |
---|---|
-f | fullname,後面接完整大名 |
-o | office,辦公室的房間号碼 |
-p | phone,辦公室的電話号碼 |
-h | homephone,家裡的電話号碼 |
#vbird1更改一下自己的相關資訊 chfn
chsh:change shell
chsh [-ls]
option | mean |
---|---|
-l | 列出目前系統上面可用的shell |
-s | 設定修改自己的shell |
#用vbid1的身份列出系統上所有合法的shell,并且制定csh為自己的shell
chsh -l
chsh -s /bin/csh ; grep vbird1 /etc/passwd
chsh -s /bin/bash
新增與移除群組
groupadd:增加群組
groupadd [-g gid] [-r] 群組名稱
option | mean |
---|---|
-g | 給予群組一個GID |
-r | 建立系統群組 |
groupmod:修改group相關參數
groupmod [-g gid] [-n group_name] 群組名
option | mean |
---|---|
-g | 修改GID |
-n | 修改群組名稱 |
将group1的名稱改為mygroup,GID為201
groupmod -g 201 -n mygroup group1
groupdel:删除群組
groupdel groupname
gpasswd:群組管理者功能
關于root做的動作:
gpasswd groupname
gpasswd [-A user1] [-M user3] groupname
gpasswd [-rR] groupname
option | mean |
---|---|
-A | 将groupname的主要權交由user1管理 |
-M | 将某些賬号加入這個群組中 |
-r | 将groupname的密碼移除 |
-R | 将groupname的密碼欄失效 |
- | 若沒有參數,表示給予groupname一個密碼 |
關于群組管理者做的動作:
gpasswd [-ad] user groupname
option | mean |
---|---|
-a | add, 将使用者加入到groupname這個群組當中 |
-d | del,将使用者移除groupname這個群組當中 |
建立一個新群則,名稱為testgroup,且群組交由vbird1管理
groupadd testgroup 建立群組
gpasswd testgroup 設定密碼
gpasswd -A vbird1 testgroup
su:身份切換指令
su [-lm] [-c command] username
option | mean |
---|---|
- | su - 代表切換root身份 |
-l | 後接username |
-m | 使用目前環境設定 |
-c | 僅進行一次指令,後面接指令 |
#切換root身份 觀察變數
su -
env|grep root
exit
# 執行指令
su --c "head -n 3 /etc/shadow"
#切換身份vbird1
su -l vbird1
sudo:相比su需要知道新切換使用者的密碼,sudo執行僅需要自己的密碼即可
sudo [-b] [-u username]
option | mean |
---|---|
-b | 将後續的指令方到背景中讓系統自動執行 |
-u | 後面接欲切換的使用者,預設為root |
#以sshd身份在/tmp底下建立一個mysshd文檔
su -u sshd touch /tmp/mysshd