一稚矿、前言
對于Linux管理者來說,“帳號管理”是再也普通不過的一個環(huán)節(jié)了捻浦,但每次都要去查一大本的手冊實(shí)在是很浪費(fèi)時間晤揣。我還是老老實(shí)實(shí)地花點(diǎn)心思把這些常用的功能都整理成一份文檔,方便以后的使用和學(xué)習(xí)朱灿,以后也都會繼續(xù)這樣做下去昧识。
本文的所有案例與說明都是基于Ubuntu 16.04.3 LTS 64位操作系統(tǒng),如果你的操作系統(tǒng)與我的不一樣盗扒,可能會出現(xiàn)不一樣的結(jié)果跪楞。但Linux的原理都是通用的,善于使用man可以幫助你更好的管理你的操作系統(tǒng)侣灶。
二甸祭、相關(guān)的文件:
上圖一共列出了9個相關(guān)文件,但這里我只重點(diǎn)講解前三個文件褥影,也即是 /etc/passwd池户、/etc/shadow 與 /etc/group。
1凡怎、/etc/passwd
User account information. --(明文的)用戶賬號信息
這個文件每一行都代表一個帳號校焦,有幾行就代表有幾個帳號在你的系統(tǒng)中!不過需要特別注意的是统倒,里面很多帳號本來就是系統(tǒng)正常運(yùn)行所必須的寨典,我們可以簡稱它為系統(tǒng)帳號。這些帳號都是你不能隨便刪除的房匆!
通過查看passwd(5)手冊可以查看/etc/passwd的文件結(jié)構(gòu):
man 5 passwd
文件結(jié)構(gòu)說明:
1)帳號名稱
2)密碼耸成。這個字段的密碼現(xiàn)在已經(jīng)放到/etc/shadow中了,所以這里只會看到一個‘x’
3)UID浴鸿,用戶標(biāo)志符
4)GID井氢,用戶組標(biāo)志符
5)用戶信息說明,相當(dāng)于一個備注而已
6)主文件夾
7)用戶登錄的默認(rèn)shell赚楚。注意毙沾,有一個shell可以用來替代成讓用戶無法取得shell環(huán)境的登錄操作,它就是/sbin/nologin宠页,這也可以用來制作純pop郵件帳號者的數(shù)據(jù)左胞。
“/etc/passwd” 第二項(xiàng)的內(nèi)容說明
2、/etc/shadow
Secure user account information. --?安全加密的用戶賬號信息
通過查看shadow(5)手冊也可以查看/etc/shadow的文件結(jié)構(gòu):
man 5 shadow
如shadow(5)中所述举户,這個文件中被 “:” 分隔的每項(xiàng)含義如下烤宙。
1)登錄名
2)加密后的密碼(下面會再詳細(xì)說明)
3)最后一次修改密碼的時間,其表示從 1970 年 1 月 1 日起的天數(shù)
4)允許用戶再次修改密碼的天數(shù)間隔(即密碼不可被更動的天數(shù)俭嘁,與第3 個字段相比)
5)用戶必須修改密碼的天數(shù)間隔(與第3 個字段相比)
6)密碼失效前的天數(shù)躺枕,在此期間用戶會被警告 (與第5 個字段相比)
7)密碼失效后的天數(shù),在次期間密碼依舊會被接受 (與第5 個字段相比)
8)賬號失效的時間供填,其表示從 1970 年 1 月 1 日起的天數(shù)(這個帳號在此字段規(guī)定的日期之后拐云,將無法使用,無論你的密碼是否過期近她,通常應(yīng)用在收費(fèi)服務(wù)中)
9)…(保留字段)
3叉瘩、/etc/group
Group account information. ?--?組信息
通過查看group(5)手冊也可以查看/etc/group的文件結(jié)構(gòu):
man 5 group
如group(5)中所述,這個文件中被“:”分隔的每項(xiàng)含義如下粘捎。
1)組名稱
2)加密后的密碼(不會被真正使用)
3)數(shù)字形式的組ID薇缅,即GID
4)使用“,”分隔的用戶名列表
注意:
“/etc/gshadow” 為 “/etc/group” 提供了與 “/etc/shadow” 相似的功能,但沒有被真正地使用攒磨。
4泳桦、/etc/gshadow
Secure group account information. --?安全加密的組信息
5、/etc/default/useradd
Default values for account creation. ?-- 創(chuàng)建用戶時的默認(rèn)設(shè)置
6娩缰、/etc/skel/
Directory containing default files. ?-- 用戶主目錄的默認(rèn)內(nèi)容
7灸撰、/etc/subgid
Per user subordinate group IDs.
8、/etc/subuid
Per user subordinate user IDs.
9拼坎、/etc/login.defs
Shadow password suite configuration.
三梧奢、用戶管理:
1、添加用戶 -- useradd
useradd -- create a new user or update default new user information.
常用參數(shù):
-m ,--create-home?強(qiáng)制演痒!同時創(chuàng)建用戶主文件夾(一般帳號默認(rèn)值)
-s ,--shell 后面接一個shell亲轨,若沒有指定,則使用/etc/default/useradd文件中默認(rèn)設(shè)置的 shell
... ...
更多的使用方法請查看:man useradd
例1:最簡單的例子
useradd nosee ? # 默認(rèn)生成一個nosee用戶與nosee組鸟顺。因?yàn)檫€沒有設(shè)置密碼惦蚊,所以還不可登錄。
例2:創(chuàng)建一個可以使用的帳號
useradd -m nosee
passwd nosee ?# 根據(jù)提示輸入再次相同的密碼讯嫂,設(shè)置密碼后才可以正常登錄蹦锋。
例3:查看useradd默認(rèn)設(shè)置
GROUP=100 ? ? ? ?#默認(rèn)的用戶組 (實(shí)際上一般都不會是這個,具體原因這樣就不說了)
HOME=/home ? ? ? ?#默認(rèn)的主文件夾所在目錄
INACTIVE=-1 ? ? ? ?#密碼失效日欧芽,在shadow文件的第7列
EXPIRE= ? ? ? ?#帳號失效日莉掂,在shadow文件的第8列
SHELL=/bin/sh ? ? ? ?#默認(rèn)的shell
SKEL=/etc/skel ? ? ? ?#用戶主文件夾的,內(nèi)容數(shù)據(jù)參考目錄
CREATE_MAIL_SPOOL=no ? ? ? ?#是否主動幫用戶創(chuàng)建郵件信箱(mailbox)
使用useradd創(chuàng)建用戶時還會參考文件/etc/login.defs的設(shè)置千扔,比如UID/GID的指定數(shù)值憎妙、用戶主文件夾設(shè)置值库正、用戶刪除與密碼設(shè)置值等,這里也不做深入討論了厘唾。
2褥符、用戶密碼管理 -- passwd
passwd - change user password
常用參數(shù):
-l ,--lock 會將/etc/shadow第二列最前面加上!使密碼失效
-u ,--unlock 與-l相反
-S ,--status ?列出密碼相關(guān)參數(shù)抚垃,即shadow文件內(nèi)的大部份信息喷楣。
更多的使用方法請查看:man passwd
3、用戶密碼管理 --?chage
chage - change user password expiry information
-l ,--list 列出該帳號的詳細(xì)密碼參數(shù)(Show account aging information.)
更多的使用方法請查看:man chage
4鹤树、用戶信息修改 -- usermod
usermod - modify a user account
-c, --comment 后面接帳號的說明铣焊,即/etc/shadow第五列的內(nèi)容。
-d, --home 后面接帳號的主文件夾罕伯,即/etc/shadow第六列的內(nèi)容曲伊。(The user's new login directory)
-l, --login 后面接帳號名稱,即修改帳號名稱捣炬,/etc/passwd第一列的內(nèi)容熊昌。
-g, --gid 后面接初始用戶組,修改/etc/passwd的第四個字段湿酸,即GID
-G, --gid 后面接次要用戶組婿屹,修改這個用戶能夠支持的用戶組,修改的是/etc/group
更多的使用方法請查看:man usermod
當(dāng)然推溃,以上的修改你也可以通過手動修改相關(guān)的配置文件來達(dá)到一樣的目的昂利。
5、刪除用戶 -- userdel?
userdel - delete a user account and related files
-r, --remove 連同用戶的主文件夾也一起刪除(?Files in the user's home directory will be removed along with the home directory itself and the user's mail spool. Files located in other file systems will have to be searched for and)
注意:
1)一般而言铁坎,該帳號如果只是暫時不啟用的話蜂奸,那么將/etc/shadow里面帳號失效日期(第八字段)設(shè)置為0就可以讓該帳號無法登錄,但所有相關(guān)的數(shù)據(jù)都會留下來硬萍。使用userdel的時候通常是你真的確定不要該用戶在主機(jī)上面用任何數(shù)據(jù)了扩所!
2)如果想要完整地將某個帳號刪除,最好可以執(zhí)行userdel -r username之前朴乖,先以“find / -user username”查出整個系統(tǒng)內(nèi)屬于username的文件祖屏,然后再進(jìn)行刪除。
四买羞、用戶組管理:
1袁勺、初始用戶組(initial group)與有效用戶組(effective group):
在/etc/passwd里面的第四列有一個所謂的GID,它就是“初始用戶組”畜普。也就是說期丰,當(dāng)用戶登錄系統(tǒng),立刻就擁有這個用戶組的相關(guān)權(quán)限的意思。
有效用戶組:即帳號當(dāng)前(實(shí)時)所使用的用戶組钝荡。
次要用戶組:次要用戶組就是除了用戶的初始用戶組外的其它所屬組街立,在/etc/group的最后一個字段中所設(shè)置,可以有多個(多個用逗號','隔開)化撕。
使用usermod -g可以修改初始用戶組几晤,而使用usermod -G則可以修改次要用戶組约炎。
例1:修改用戶次要用戶組
usermod -G users nosee ? # 也可以通過組管理員使用命令gpasswd來操作植阴。
例2:有效與支持用戶組的查看
groups ? ? ? ?#注意后面有s!
在這個輸出的信息中圾浅,可知道nosee這個用戶同時屬于nosee及users這兩個組掠手,而且,第一個輸出的即為“有效用戶組”狸捕。也就是說喷鸽,上面例子中的有效用戶組為nosee。
2灸拍、有效用戶組的切換 -- newgrp
newgrp users
上面例子中做祝,nosee的有效用戶組從nosee轉(zhuǎn)變成了users。
現(xiàn)在我們來深入討論下newgrp這個命令鸡岗,這個命令可以更改目前用戶的有效用戶組混槐,而且是另外以一個新的shell來提供這個功能。因此如果你想要回到原本的環(huán)境中轩性,只需要輸入exit即可声登。
3、新增用戶組 -- groupadd
groupadd - create a new group
常用參數(shù):
-g, --gid 設(shè)置用戶組的ID值揣苏,即GID
-r, --system 新建系統(tǒng)用戶組悯嗓,與 /etc/login.defs內(nèi)的GID_MIN有關(guān)
4、用戶組參數(shù)修改 -- groupmod
groupmod - modify a group definition on the system
常用參數(shù):
-g, --gid 修改GID
-n, --new-name ?修改組名稱
注意:不要隨意改動GID卸察,容易造成系統(tǒng)資源的錯亂脯厨。
5、刪除用戶組 -- groupdel
groupdel - delete a group
注意坑质,只有在/etc/passwd內(nèi)沒有任何用戶使用該用戶組的作為初始用戶組的時候合武,才可以成功刪除。
6洪乍、用戶組管理員功能 -- gpasswd
gpasswd - administer /etc/group and /etc/gshadow
1)系統(tǒng)管理員(root)的常用參數(shù)
-A, --administrators
-M, --members
-r, --remove-password
-R, --restrict
# 語法:
gpasswd groupname ? ? ? ?#沒有任何參數(shù)眯杏,表示給予groupname一個密碼(/etc/gshadow)
gpasswd [-A user1, ...] [-M user3, ...] groupname
gpasswd [-rR] groupname
2)用戶組管理員(Group administrators)的常用參數(shù)
-a, --add ? ? ? ?#將用戶user加入到groupname這個用戶組中
-d, --delete ? ? ? ?#將用戶user從用戶組groupname中刪除
語法:
gpasswd [-ad] user groupname
五、用戶身份切換
1壳澳、su
su - change user ID or become superuser
su是最簡單的身份切換命令了岂贩,它可以進(jìn)行任何身份的切換。
常用參數(shù):
- ? ? ? ?#單純使用-,如“su -”萎津,代表使用login-shell的變量文件讀取方式登錄系統(tǒng)卸伞,若后面沒有加上用戶名,則代表將要切換到root的身份锉屈。
-l, --login ? ? ? ?#與-類似荤傲,但后面需要加欲切換的用戶帳號
-m, -p, --preserve-environment ? ?#表示使用目前的環(huán)境設(shè)置,而不讀取新用戶的配置文件颈渊。
-c, --command ? ? ? ?#僅進(jìn)行一次命令遂黍,所以-c后面可以加上命令
#語法:
su [-lm] [-c "命令"] [username]
注意:
1)這個su的用法當(dāng)中,有沒有加上“-”差很多的俊嗽,轉(zhuǎn)為涉及l(fā)ogin-shell與not-login shell的變量讀取方法雾家。即想要完整的切換到新用戶的環(huán)境,可以利用“su - username”或“su -l username”绍豁。
2)使用root切換到任何用戶時芯咧,都不需要輸入密碼
3)當(dāng)從其它用戶切換到root用戶時都必須輸入root的密碼,這樣root的密碼就很容易流傳出去竹揍,這是很不妥當(dāng)?shù)木挫圆艜衧udo這個命令的出現(xiàn)。
2芬位、sudo
sudo, sudoedit — execute a command as another user
sudo的執(zhí)行僅需要自己的密碼无拗,甚至可以設(shè)置不需要密碼即可執(zhí)行sudo。由于sudo可以讓你以其他的用戶身份執(zhí)行命令(通常是root的身份)晶衷,因此并不是所有人才能執(zhí)行sudo蓝纲,而是僅有/etc/sudoers內(nèi)的用戶才能夠執(zhí)行sodu這個命令。
/etc/sudoers文件內(nèi)容如下:
常用參數(shù):
-p, --prompt ? ? ? ?#將后續(xù)的命令讓系統(tǒng)自行執(zhí)行晌纫,而不與目前的shell產(chǎn)生影響
-u, --user ? ? ? ?#后面可以接欲切換的用戶税迷,若無此項(xiàng)則代表切換用戶為root。
# 語法(SYNOPSIS):
sudo -h | -K | -k | -V
sudo -v [-AknS] [-a type] [-g group] [-h host] [-p prompt] [-u user]
sudo -l [-AknS] [-a type] [-g group] [-h host] [-p prompt] [-U user] [-u user] [command]
sudo [-AbEHnPS] [-a type] [-C num] [-c class] [-g group] [-h host] [-p prompt] [-r role] [-t type] [-u user] [VAR=value] [-i | -s] [command]
sudoedit [-AknS] [-a type] [-C num] [-c class] [-g group] [-h host] [-p prompt] [-u user] file ...
例:使用nosee的身份在/home/nosee/目錄下新建一個test文件
sudo -u nosee touch /home/nosee/test
sudo的執(zhí)行流程:
1)當(dāng)用戶執(zhí)行sudo時锹漱,系統(tǒng)于/etc/sudoers文件查找該用戶是否有執(zhí)行sudo的權(quán)限箭养;
2)若用戶具有可執(zhí)行sudo的權(quán)限后,便讓用戶輸入自己的密碼來確認(rèn)哥牍;
3)若密碼輸入成功毕泌,便開始進(jìn)行sudo后續(xù)接的命令(但root執(zhí)行sudo時不需要輸入密碼);
4)若欲切換的用戶與執(zhí)行者身份相同嗅辣,那也不需要輸入密碼撼泛。
因?yàn)?etc/sudoers文件有一定的規(guī)則,所以我們一幫不直接用vi去編輯澡谭。一般愿题,我們都是使用visudo來修改這個文件。
3、visudo
因?yàn)?etc/sudoers是有語法的潘酗,如果設(shè)置錯誤那會造成無法使用sudo的不良后果杆兵,因此才會使用visudo去修改。
一般來說仔夺,visudo的設(shè)置方式有幾種簡單的方法琐脏,正面我們以幾個簡單的例子來說明:
1)單一用戶可以進(jìn)行root的所有命令與sudoer文件語法
例:讓用戶nosee可以使用root的所有命令
visudo
2)利用用戶組及免密功能處理visudo
例:讓nosee用戶組可以使用root的所有命令,并且不需要輸入密碼
注意:用戶組的表示只需要在前面加一個百分號%即可缸兔,NOPASSWD則是免密的關(guān)鍵字垒酬。
3)有限制的命令操作
例:讓user1用戶僅能使用passwd這個命令幫root修改其他用戶的密碼
user1 ? ?ALL=(root) ? ?/usr/bin/passwd
注意:最后一個參數(shù)一定要用絕對路徑才行祭芦,否則visudo會出現(xiàn)語法錯誤稽亏。
但這里有個可怕的地方柏腻,就是用戶user1竟然也可以去修改root的密碼了兼搏,這是不應(yīng)該允許發(fā)生的芹助,為了避免上述的問題励翼,應(yīng)該使用下面的這種配置:
user1 ? ?ALL=(root) ? ?!/usr/bin/passwd, /usr/bin/passwd [A-Za-z]*, !/usr/bin/passwd root
上面參數(shù)的意思是缚去,用戶user1可以執(zhí)行“passwd 任意字符串”路克,但是“passwd”與“passwd root”兩個命令除外樟结。
4)通過別名設(shè)置visudo
User_Alias ADMPW = user1, user2, user3
Cmnd_Alias ADMPWCOM =?!/usr/bin/passwd, /usr/bin/passwd [A-Za-z]*, !/usr/bin/passwd root
5)sudo的時間間隔問題
兩次執(zhí)行sudo的間隔時間在5分鐘內(nèi),那么再次執(zhí)行sudo時就不需要再次輸入密碼精算。
6)sudo搭配su的使用方式
很多時候我們需要大量執(zhí)行很多root的工作瓢宦,所以一直sudo覺得麻煩。這里有一個變身root用戶的辦法灰羽,而且還不會外泄root密碼驮履,前提是你要非常信任你將要為他們做此次設(shè)置的用戶。
nosee ? ?ALL=(root)????/bin/su -
六廉嚼、其它:
1玫镐、查看用戶當(dāng)前所用的shell
1)實(shí)時查看當(dāng)前進(jìn)程中使用的shell種類:推薦
ps | grep $$ | awk '{print $4}'
2)最常用的查看shell的命令,但不能實(shí)時反映當(dāng)前shell
$ echo $SHELL ? ?# $ echo $0 ??這個更簡潔怠噪,但并不是所有shell都支持
3)環(huán)境變量中shell的匹配查找
env | grep SHELL
4)口令文件中shell的匹配查找
cat /etc/passwd | grep muye
2恐似、強(qiáng)制踢出已登錄用戶
fuser -k /dev/pts/1
或也可以給他發(fā)送一條信息。
echo "你被管理員踢出了" > /dev/pts/0 && fuser -k /dev/pts/1
3傍念、adduser
adduser也可以用于用戶的添加矫夷,感覺興趣的同學(xué)可以自行去查閱相關(guān)的資料。
七憋槐、參考文獻(xiàn)
1双藕、《鳥哥的Linux私房菜基礎(chǔ)學(xué)習(xí)篇》-- 鳥哥
2、?Debian官方參考手冊
如發(fā)現(xiàn)有寫得不對或不好的地方非常歡迎到評論區(qū)指出與交流阳仔,感謝閱讀忧陪! ? ?
——《完》