linux 用户加入次要群组,linux学习笔记之 帐号和群组管理
/etc/passwd?? ?用戶名:用戶密碼:UID:GID:說明:家目錄:使用的shell
1. 賬號名稱:
就是賬號啦!用來對應(yīng) UID 的。例如 root 的 UID 對應(yīng)就是 0 (第三字段);
2. 密碼:
早期 Unix 系統(tǒng)的密碼就是放在這字段上!但是因?yàn)檫@個(gè)文件的特性是所有的程序都能夠讀取,
這樣一來很容易造成密碼數(shù)據(jù)被竊取, 后來就將這個(gè)字段的密碼數(shù)據(jù)改放到/etc/shadow中。
所以這里你會(huì)看到一個(gè)『 x 』
3.UID
id 范圍?? ? 該 ID 使用者特性
0?? ??? ??? 當(dāng) UID 是 0 時(shí),代表這個(gè)賬號是『系統(tǒng)管理員』! 所以當(dāng)你要讓其他的賬號
名稱也具有 root 的權(quán)限時(shí),將該賬號的 UID 改為 0 即可。 這也就是說,一
(系統(tǒng)管理員) 部系統(tǒng)上面的系統(tǒng)管理員不見得只有 root , 不過不建議有多
個(gè)賬號的UID 是 0 啦~
1~499?? ??? 保留給系統(tǒng)使用的 ID,其實(shí)除了 0 之外,其他的 UID 權(quán)限與特性并沒有不一
樣。默認(rèn)500 以下的數(shù)字讓給系統(tǒng)作為保留賬號只是一個(gè)習(xí)慣。由于系統(tǒng)上面
的服務(wù)希望使用較小的權(quán)限去運(yùn)作,因此不希望使用 root的身份去執(zhí)行這些
服務(wù), 所以我們就得要提供這些運(yùn)作中程序的擁有者賬號才行。這些系統(tǒng)賬號
通常是不可登入的, 所以才會(huì)有/sbin/nologin 這個(gè)特殊的 shell 存在。根據(jù)
系統(tǒng)賬號的由來,通常系統(tǒng)賬號又約略被區(qū)分為兩種:
1~99:由 distributions 自行建立的系統(tǒng)賬號;
100~499:若用戶有系統(tǒng)賬號需求時(shí),可以使用的賬號 UID。
500~65535 ?? 給一般使用者用的。事實(shí)上,目前的 linux 核心 (2.6.x 版)已經(jīng)可以支持到
(可登入賬號) 4294967295 (2^32-1) 這么大的 UID 號碼
4.GID:
這個(gè)與/etc/group 有關(guān),其實(shí) /etc/group 的觀念與/etc/passwd 差不多,只是他是用來規(guī)范
組名與 GID 的對應(yīng)而已!
5. 用戶信息說明欄:
這個(gè)字段基本上并沒有什么重要用途,只是用來解釋這個(gè)賬號的意義,不過,如果您提供使用 finger
的功能時(shí), 這個(gè)字段可以提供很多的訊息,后面的 chfn 指令會(huì)來解釋這里的說明。
6. 家目錄:
這是用戶的家目錄,以上面為例, root 的家目錄在 /root ,所以當(dāng) root 登入之后,就會(huì)立刻跑
到 /root 目錄里頭,如果你有個(gè)賬號的使用空間特別的大,你想要將該賬號的家目錄移動(dòng)到其他
的硬盤去可以在這個(gè)字段進(jìn)行修改,默認(rèn)的用戶家目錄在/home/yourIDname
7. Shell:
我們在第十一章 BASH 提到很多次,當(dāng)用戶登入系統(tǒng)后就會(huì)取得一個(gè) Shell 來與系統(tǒng)的核心溝通
以進(jìn)行用戶的操作任務(wù),預(yù)設(shè) shell 就是在這個(gè)字段指定的,這里比較需要注意的是,有一個(gè)
shell 可以用來替代成讓賬號無法取得 shell 環(huán)境的登入動(dòng)作,那就是/sbin/nologin。
/etc/shadow 文件結(jié)構(gòu)
shadow 同樣以『:』作為分隔符,如果數(shù)一數(shù),會(huì)發(fā)現(xiàn)共有九個(gè)字段啊,這九個(gè)字段的用途是這樣的:
1. 賬號名稱:
由于密碼也需要與賬號對應(yīng)因此,這個(gè)文件的第一欄就是賬號,必須要與 /etc/passwd 相同
2. 密碼:
這個(gè)字段內(nèi)的數(shù)據(jù)才是真正的密碼,而且是經(jīng)過編碼的密碼 (加密), 你只會(huì)看到有一些特殊
符號的字母就是了!需要特別留意的是,雖然這些加密過的密碼很難被解出來, 但是『很難』不
等于『不會(huì)』,所以,這個(gè)文件的預(yù)設(shè)權(quán)限是『-rw-------』或者是『-r--------』,亦即只有
root 才可以讀寫,你得隨時(shí)注意,不要不小心更動(dòng)了這個(gè)文件的權(quán)限。
另外,由于各種密碼編碼的技術(shù)不一樣,因此不同的編碼系統(tǒng)會(huì)造成這個(gè)字段的長度不相同。 舉
例來說,舊式的 DES 編碼系統(tǒng)產(chǎn)生的密碼長度就與目前慣用的 MD5 不同,MD5 的密碼
長度明顯的比較長些。由于固定的編碼系統(tǒng)產(chǎn)生的密碼長度必須一致,因此『當(dāng)你讓這個(gè)字段的
長度改變后,該密碼就會(huì)失效(算不出來)』。 很多軟件透過這個(gè)功能,在此字段前加上 ! 或 * 改
變密碼字段長度,就會(huì)讓密碼『暫時(shí)失效』了。
3. 最近更動(dòng)密碼的日期:
這個(gè)字段記錄了『更動(dòng)密碼那一天』的日期,不過,很奇怪呀!在我的例子中怎么會(huì)是 14126這個(gè)
是因?yàn)橛?jì)算 Linux 日期的時(shí)間是以 1970 年 1 月 1 日作為 1 而累加的日期,1971 年 1 月1日
則為 366。 得注意一下這個(gè)資料呦!上述的 14126 指的就是 2008-09-04那一天,而想要了解該
日期可以使用本章后面 chage 指令,至于想要知道某個(gè)日期的累積日數(shù), 可使用如下的程序計(jì)算
(%號和s之間沒有空格):
#echo $(($(date --date="2008/09/04" +%s)/86400+1))
上述指令中,2008/09/04 為你想要計(jì)算的日期,86400 為每一天的秒數(shù), %s 為 1970/01/01
以來的累積總秒數(shù)。 由于 bash 僅支持整數(shù),因此最終需要加上 1 補(bǔ)齊 1970/01/01 當(dāng)天
4. 密碼不可被更動(dòng)的天數(shù):(與第 3 字段相比)
第四個(gè)字段記錄了:這個(gè)賬號的密碼在最近一次被更改后需要經(jīng)過幾天才可以再被變更,如果是
0 的話, 表示密碼隨時(shí)可以更動(dòng)的意思。這的限制是為了怕密碼被某些人一改再改而設(shè)計(jì)的,如
果設(shè)定為 20 天的話,那么當(dāng)你設(shè)定了密碼之后, 20 天之內(nèi)都無法改變這個(gè)密碼。
5. 密碼需要重新變更的天數(shù):(與第 3 字段相比)
經(jīng)常變更密碼是個(gè)好習(xí)慣,為了強(qiáng)制要求用戶變更密碼,這個(gè)字段可以指定在最近一次更改密碼
后, 在多少天數(shù)內(nèi)需要再次的變更密碼才行。你必須要在這個(gè)天數(shù)內(nèi)重新設(shè)定你的密碼,否則這
個(gè)賬號的密碼將會(huì)『變?yōu)檫^期特性』。 而如果像上面的 99999 (計(jì)算為 273 年) 的話,那就表
示,密碼的變更沒有強(qiáng)制性之意。
6. 密碼需要變更期限前的警告天數(shù):(與第 5 字段相比)
當(dāng)賬號的密碼有效期限快要到的時(shí)候 (第 5 字段),系統(tǒng)會(huì)依據(jù)這個(gè)字段的設(shè)定,發(fā)出『警告』言
論給這個(gè)賬號,提醒他『再過 n 天你的密碼就要過期了,請盡快重新設(shè)定你的密碼呦!』,如上
面的例子,則是密碼到期之前的 7 天之內(nèi),系統(tǒng)會(huì)警告該用戶。
7. 密碼過期后的賬號寬限時(shí)間(密碼失效日):(與第 5 字段相比)
密碼有效日期為『更新日期(第 3 字段)』+『重新變更日期(第 5 字段)』,過了該期限后用戶依舊
沒有更新密碼,那該密碼就算過期了。 雖然密碼過期但是該賬號還是可以用來進(jìn)行其他工作的,
包括登入系統(tǒng)取得 bash 。不過如果密碼過期了, 那當(dāng)你登入系統(tǒng)時(shí),系統(tǒng)會(huì)強(qiáng)制要求你必須要
重新設(shè)定密碼才能登入繼續(xù)使用喔,這就是密碼過期特性。
這個(gè)字段的功能是在密碼過期幾天后,如果使用者還是沒有登入更改密碼,那么這個(gè)賬號的密碼
將會(huì)『失效』, 亦即該賬號再也無法使用該密碼登入了。要注意密碼過期與密碼失效并不相同。
8. 賬號失效日期:
這個(gè)日期跟第三個(gè)字段一樣,都是使用 1970 年以來的總?cè)諗?shù)設(shè)定。這個(gè)字段表示: 這個(gè)賬號在
此字段規(guī)定的日期之后,將無法再使用。 就是所謂的『賬號失效』,此時(shí)不論你的密碼是否有過
期,這個(gè)『賬號』都不能再被使用, 這個(gè)字段會(huì)被使用通常應(yīng)該是在『收費(fèi)服務(wù)』的系統(tǒng)中,你
可以規(guī)定一個(gè)日期讓該賬號不能再使用。
9. 保留:
最后一個(gè)字段是保留的,看以后有沒有新功能加入。
/etc/group 文件結(jié)構(gòu)
這個(gè)文件就是在記錄 GID 與組名的對應(yīng)了
這個(gè)文件每一行代表一個(gè)群組,也是以冒號『:』作為字段的分隔符,共分為四欄,每一字段的意義是:
1. 組名:
2. 群組密碼:
通常不需要設(shè)定,這個(gè)設(shè)定通常是給『群組管理員』使用的,目前很少有這個(gè)機(jī)會(huì)設(shè)定群組管理
員,同樣的,密碼已經(jīng)移動(dòng)到 /etc/gshadow 去,因此這個(gè)字段只會(huì)存在一個(gè)『x』而已;
3. GID:
就是群組的 ID,/etc/passwd 第四個(gè)字段使用的 GID 對應(yīng)的群組名,就是由這里對應(yīng)出來
4. 此群組支持的賬號名稱:
我們知道一個(gè)賬號可以加入多個(gè)群組,那某個(gè)賬號想要加入此群組時(shí),將該賬號填入這個(gè)字段即可。
舉例來說,如果我想要讓 dmtsai 也加入 root 這個(gè)群組,那舉在第一行的最后面加上
『,dmtsai』,注意不要有空格, 使成為『 root:x:0:root,dmtsai 』就可以啰~
有效群組(effective group)與初始群組(initial group)
#usermod -G groupname username <==將username用戶加入群組groupname,groupname為其附加組
groups: 有效于支持群組的觀察
#groups
輸出用戶支持的所有群組,且第一個(gè)是用戶有效群組,通常有效群組的作用是在新建文件,新建文件的屬組為用戶的有效群組
newgrp: 有效群組的切換
不過使用 newgrp 是有限制的,那就是你想要切換的群組必須是你已經(jīng)有支持的群組。
#newgrp groupname <==用戶切換有效群組為groupname
newgrp 這個(gè)指令,這個(gè)指令可以變更目前用戶的有效群組, 而且是另外以一個(gè) shell來提供這個(gè)功能的,因此如果你想要回到原本的環(huán)境中,請輸入 exit 回到原本的 shell。
/etc/gshadow
這個(gè)文件內(nèi)同樣還是使用冒號『:』來作為字段的分隔字符,而且你會(huì)發(fā)現(xiàn),這個(gè)文件幾乎與
/etc/group 一模一樣,是這樣沒錯(cuò)~不過,要注意的大概就是第二個(gè)字段~第二個(gè)字段是密碼
欄, 如果密碼欄上面是『!』時(shí),表示該群組不具有群組管理員,至于第四個(gè)字段也就是支持
的賬號名稱,這四個(gè)字段的意義為:
1. 組名
2. 密碼欄,同樣的,開頭為 ! 表示無合法密碼,所以無群組管理員
3. 群組管理員的賬號
4. 該群組的所屬賬號 (與/etc/group 內(nèi)容相同)
賬號管理
新增與移除使用者: useradd, 相關(guān)配置文件, passwd, usermod, userdel
#useradd [-u UID] [-g 初始群組] [-G 次要群組] [-mM]\
> [-c 說明欄] [-d 家目錄絕對路徑] [-s shell] 使用者賬號名
選項(xiàng)與參數(shù):
-u :后面接的是 UID ,是一組數(shù)字。直接指定一個(gè)特定的 UID 給這個(gè)賬號;
-g :后面接的那個(gè)組名就是我們上面提到的 initial group
該群組的 GID 會(huì)被放置到 /etc/passwd 的第四個(gè)字段內(nèi)。
-G :后面接的組名則是這個(gè)賬號還可以加入的群組。
這個(gè)選項(xiàng)與參數(shù)會(huì)修改 /etc/group 內(nèi)的相關(guān)資料
-M :強(qiáng)制不要建立用戶家目錄(系統(tǒng)賬號默認(rèn)值)
-m :強(qiáng)制要建立用戶家目錄(一般賬號默認(rèn)值)
-c :這個(gè)就是 /etc/passwd 的第五欄的說明內(nèi)容,可以隨便設(shè)定
-d :指定某個(gè)目錄成為家目錄,而不要使用默認(rèn)值。務(wù)必使用絕對路徑
-r :建立一個(gè)系統(tǒng)的賬號,這個(gè)賬號的 UID 會(huì)有限制 (參考 /etc/login.defs)
-s :后面接一個(gè) shell ,若沒有指定則預(yù)設(shè)是 /bin/bash
-e :后面接一個(gè)日期,格式為『YYYY-MM-DD』此項(xiàng)目可寫入 shadow 第八字段,即賬號失效日的設(shè)定項(xiàng)目;
-f :后面接 shadow 的第七字段項(xiàng)目,指定密碼是否會(huì)失效。0 為立刻失效,
-1 為永久不失效(密碼只會(huì)過期而強(qiáng)制于登入時(shí)重新設(shè)定而已)
CentOS 這些默認(rèn)值主要會(huì)幫我們處理幾個(gè)項(xiàng)目:
在 /etc/passwd 里面建立一行與賬號相關(guān)的數(shù)據(jù),包括建立 UID/GID/家目錄等;
在 /etc/shadow 里面將此賬號的密碼相關(guān)參數(shù)填入,但是尚未有密碼;
在 /etc/group 里面加入一個(gè)與賬號名稱一模一樣的組名;
在 /home 底下建立一個(gè)與賬號同名的目錄作為用戶家目錄,且權(quán)限為 700
一般賬號應(yīng)該是 UID 500 號以后,那用戶自己建立的系統(tǒng)賬號則一般是由100 號以后起算的。
所以在這里我們加上 -r 這個(gè)選項(xiàng)以后,系統(tǒng)就會(huì)主動(dòng)將賬號與賬號同名群組的UID/GID 都指定
小于 500 以下, 在本案例中則是使用 100(UID) 與 103(GID) 啰!此外,由于系統(tǒng)賬號主要是用來
進(jìn)行運(yùn)作系統(tǒng)所需服務(wù)的權(quán)限設(shè)定, 所以系統(tǒng)賬號默認(rèn)都不會(huì)主動(dòng)建立家目錄的!
useradd建立普通用戶是的參考檔 /etc/default/useradd,可以是使用
#useradd -D <==查看默認(rèn)的值
/etc/default/useradd內(nèi)容解析:
ROUP=100:新建賬號的初始群組使用 GID 為 100 者
系統(tǒng)上面 GID 為 100 者即是 users 這個(gè)群組,此設(shè)定項(xiàng)目指的就是讓新設(shè)使用者賬號的初始群
組為 users 這一個(gè)的意思。 但是我們知道 CentOS 上面并不是這樣的,在 CentOS 上面預(yù)設(shè)的
群組為與賬號名相同的群組。 舉例來說, vbird1 的初始群組為 vbird1 。怎么會(huì)這樣啊?這是
因?yàn)獒槍θ航M的角度有兩種不同的機(jī)制所致, 這兩種機(jī)制分別是:
私有群組機(jī)制:系統(tǒng)會(huì)建立一個(gè)與賬號一樣的群組給使用者作為初始群組。這種群組的設(shè)
定機(jī)制會(huì)比較有保密性,這是因?yàn)槭褂谜叨加凶约旱娜航M,而且家目錄權(quán)限將會(huì)設(shè)定為
700 (僅有自己可進(jìn)入自己的家目錄) 之故。使用這種機(jī)制將不會(huì)參考 GROUP=100 這個(gè)
設(shè)定值。代表性的 distributions 有 RHEL, Fedora, CentOS 等;
公共群組機(jī)制:就是以 GROUP=100 這個(gè)設(shè)定值作為新建賬號的初始群組,因此每個(gè)賬
號都屬于 users 這個(gè)群組, 且默認(rèn)家目錄通常的權(quán)限會(huì)是『 drwxr-xr-x ... username
users ... 』,由于每個(gè)賬號都屬于 users 群組,因此大家都可以互相分享家目錄內(nèi)的數(shù)據(jù)
之故。代表 distributions 如 SuSE 等。
由于我們的 CentOS 使用私有群組機(jī)制,因此這個(gè)設(shè)定項(xiàng)目是不會(huì)生效的。
HOME=/home:用戶家目錄的基準(zhǔn)目錄(basedir)
用戶的家目錄通常是與賬號同名的目錄,這個(gè)目錄將會(huì)擺放在此設(shè)定值的目錄后。所以 vbird1
的家目錄就會(huì)在 /home/vbird1/
INACTIVE=-1:密碼過期后是否會(huì)失效的設(shè)定值
我們在 shadow 文件結(jié)構(gòu)當(dāng)中談過,第七個(gè)字段的設(shè)定值將會(huì)影響到密碼過期后, 在多久時(shí)間
內(nèi)還可使用舊密碼登入。這個(gè)項(xiàng)目就是在指定該日數(shù)啦!如果是 0 代表密碼過期立刻失效, 如果
是 -1 則是代表密碼永進(jìn)不會(huì)失效,如果是數(shù)字,如 30 ,則代表過期 30 天后才失效。
EXPIRE=:賬號失效的日期
就是 shadow 內(nèi)的第八字段,你可以直接設(shè)定賬號在哪個(gè)日期后就直接失效,而不理會(huì)密碼的問
題。通常不會(huì)設(shè)定此項(xiàng)目,但如果是付費(fèi)的會(huì)員制系統(tǒng),或許這個(gè)字段可以設(shè)定
SHELL=/bin/bash:默認(rèn)使用的 shell 程序文件名
系統(tǒng)默認(rèn)的 shell 就寫在這里。假如你的系統(tǒng)為 mail server ,你希望每個(gè)賬號都只能使用 email
的收發(fā)信件功能, 而不許用戶登入系統(tǒng)取得 shell ,那么可以將這里設(shè)定為 /sbin/nologin ,如
此一來,新建的使用者預(yù)設(shè)就無法登入
SKEL=/etc/skel:用戶家目錄參考基準(zhǔn)目錄
這個(gè)咚咚就是指定用戶家目錄的參考基準(zhǔn)目錄,舉我們的范例一為例, vbird1 家目錄
/home/vbird1 內(nèi)的各項(xiàng)數(shù)據(jù),都是由 /etc/skel 所復(fù)制過去的,所以未來如果我想要讓新
增使用者時(shí),該用戶的環(huán)境變量 ~/.bashrc 就設(shè)定妥當(dāng)?shù)脑?您可以到 /etc/skel/.bashrc 去編
輯一下,也可以建立 /etc/skel/www 這個(gè)目錄,那么未來新增使用者后,在他的家目錄下就會(huì)
有 www 那個(gè)目錄了。
CREATE_MAIL_SPOOL=yes:建立使用者的 mailbox
你可以使用『 ll /var/spool/mail/vbird1 』看一下,會(huì)發(fā)現(xiàn)有這個(gè)文件的存在,這就是使用者
的郵件信箱
除了這些基本的賬號設(shè)定值之外, UID/GID還有密碼參數(shù)參考/etc/login.defs啦!
內(nèi)容:
MAIL_DIR?? ?/var/spool/mail<==用戶默認(rèn)郵件信箱放置目錄
PASS_MAX_DAYS 99999?? ?????<==/etc/shadow 內(nèi)的第 5 欄,多久需變更密碼日數(shù)
PASS_MIN_DAYS 0????????????<==/etc/shadow 內(nèi)的第 4 欄,多久不可重新設(shè)定密碼日數(shù)
PASS_MIN_LEN 5?? ????????? <==密碼最短的字符長度,已被 pam 模塊取代,失去效用!
PASS_WARN_AGE 7 ?????????? <==/etc/shadow 內(nèi)的第 6 欄,過期前會(huì)警告的日數(shù)
UID_MIN 500 ?????????????? <==使用者最小的 UID,意即小于 500 的 UID 為系統(tǒng)保留
UID_MAX 60000?? ?????????? <==使用者能夠用的最大 UID
GID_MIN 500?? ???????????? <==使用者自定義組的最小 GID,小于 500 為系統(tǒng)保留
GID_MAX?? ? 60000?? ?????? <==使用者自定義組的最大 GID
CREATE_HOME?? ?yes?? ????? <==在不加 -M 及 -m 時(shí),是否主動(dòng)建立用戶家目錄?
UMASK?? ?077?? ??????????? <==用戶家目錄建立的 umask ,因此權(quán)限會(huì)是 700
USERGROUPS_ENAB yes?? ?????<==使用 userdel 刪除時(shí),是否會(huì)初除初始群組
MD5_CRYPT_ENAB yes?? ??? ? <==密碼是否經(jīng)過 MD5 的加密機(jī)制處理
這個(gè)文件規(guī)范的數(shù)據(jù)則是如下所示:
mailbox 所在目錄:
用戶的默認(rèn) mailbox 文件放置的目錄在 /var/spool/mail,所以 vbird1 的 mailbox 就是在
/var/spool/mail/vbird1
shadow 密碼第 4, 5, 6 字段內(nèi)容:
透過 PASS_MAX_DAYS 等等設(shè)定值來指定的,所以你知道為何預(yù)設(shè)的 /etc/shadow 內(nèi)每一行
都會(huì)有『 0:99999:7 』的存在了嗎?^_^!不過要注意的是,由于目前我們登入時(shí)改用 PAM 模塊來
進(jìn)行密碼檢驗(yàn),所以那個(gè) PASS_MIN_LEN 是失效的!
UID/GID 指定數(shù)值:
雖然 Linux 核心支持的賬號可高達(dá) 2^32 這么多個(gè),不過一部主機(jī)要作出這么多賬號在管理上也是
很麻煩的, 所以在這里就針對 UID/GID 的范圍進(jìn)行規(guī)范就是了。上表中的 UID_MIN 指的就是
可登入系統(tǒng)的一般賬號的最小 UID ,至于 UID_MAX 則是最大 UID 之意。
要注意的是,系統(tǒng)給予一個(gè)賬號 UID 時(shí),他是 (1)先參考 UID_MIN 設(shè)定值取得最小數(shù)值; (2)由
/etc/passwd 搜尋最大的 UID 數(shù)值, 將 (1) 與 (2) 相比,找出最大的那個(gè)再加一就是新賬號的
UID 了。我們上面已經(jīng)作出 UID 為 700 的 vbird2 , 如果再使用『 useradd vbird4 』時(shí),你
猜 vbird4 的 UID 會(huì)是多少?答案是: 701 。 所以中間的 505~699 的號碼就空下來啦!
而如果我是想要建立系統(tǒng)用的賬號,所以使用 useradd -r sysaccount 這個(gè) -r 的選項(xiàng)時(shí),就會(huì)
找『比 500 小的最大的那個(gè) UID + 1 』就是了。
用戶家目錄設(shè)定值:
系統(tǒng)默認(rèn)會(huì)幫用戶建立家目錄就是因?yàn)檫@個(gè)『CREATE_HOME = yes』的設(shè)定值,這個(gè)
設(shè)定值會(huì)讓你在使用 useradd 時(shí), 主動(dòng)加入『 -m 』這個(gè)產(chǎn)生家目錄的選項(xiàng),如果不想要建
立用戶家目錄,就只能強(qiáng)制加上『 -M 』的選項(xiàng)在 useradd 指令執(zhí)行時(shí)。至于建立家目錄的權(quán)
限設(shè)定就透過 umask 這個(gè)設(shè)定值,因?yàn)槭?0700 的預(yù)設(shè)設(shè)定,因此用戶家目錄默認(rèn)權(quán)限才
會(huì)是『 drwx------ 』哩!
用戶刪除與密碼設(shè)定值:
使用『USERGROUPS_ENAB yes』這個(gè)設(shè)定值的功能是: 如果使用 userdel 去初除一個(gè)賬號
時(shí),且該賬號所屬的初始群組已經(jīng)沒有人隸屬于該群組了, 那么就刪除掉該群組,舉例來說,我
們剛剛有建立 vbird4 這個(gè)賬號,他會(huì)主動(dòng)建立 vbird4 這個(gè)群組。 若 vbird4 這個(gè)群組并沒有其
他賬號將他加入支持的情況下,若使用 userdel vbird4 時(shí),該群組也會(huì)被刪除的意思。 至于
『MD5_CRYPT_ENAB yes』則表示使用 MD5 來加密密碼明文,而不使用舊式的 DES
現(xiàn)在你知道啦,使用 useradd 這支程序在建立 Linux 上的賬號時(shí),至少會(huì)參考:
/etc/default/useradd
/etc/login.defs
/etc/skel/*
這些文件,不過,最重要的其實(shí)是建立 /etc/passwd, /etc/shadow, /etc/group, /etc/gshadow 還有
用戶家目錄,所以,如果你了解整個(gè)系統(tǒng)運(yùn)作的狀態(tài),也是可以手動(dòng)直接修改這幾個(gè)文件就是了。
O賬號建立了,接下來處理一下用戶的密碼
passwd
使用 useradd 建立了賬號之后,在預(yù)設(shè)的情況下,該賬號是暫時(shí)被封鎖的, 也就是說,該賬號是無法登入的。
#passwd?? ? [--sdtin]?? ?<==所有人都可以使用來修改自己的密碼
# passwd [-l] [-u] [--sdtin] [-S] [-n 日數(shù)] [-x 日數(shù)] [-w 日數(shù)] [-i 日期] 賬號 <==root 功能
選項(xiàng)與參數(shù):
--stdin :可以透過來自前一個(gè)管線的數(shù)據(jù),作為密碼輸入,對 shell script 有用
要注意的是,這個(gè)選項(xiàng)并不存在所有 distributions 版本中, 請使用 man passwd 確認(rèn)你的 distribution 是否有支持此選項(xiàng)喔!
-l :是 Lock 的意思,會(huì)將 /etc/shadow 第二欄最前面加上 ! 使密碼失效;
-u :與 -l 相對,是 Unlock 的意思!
-S :列出密碼相關(guān)參數(shù),亦即 shadow 文件內(nèi)的大部分信息。
-n :后面接天數(shù),shadow 的第 4 字段,多久不可修改密碼天數(shù)
-x :后面接天數(shù),shadow 的第 5 字段,多久內(nèi)必須要更動(dòng)密碼
-w :后面接天數(shù),shadow 的第 6 字段,密碼過期前的警告天數(shù)
-i :后面接『日期』,shadow 的第 7 字段,密碼失效日期
新的 distributions 是使用較嚴(yán)格的 PAM 模塊來管理密碼,這個(gè)管理的機(jī)制寫在 /etc/pam.d/passwd當(dāng)中。而該文件與密碼有關(guān)的測試模塊就是使用:pam_cracklib.so,這個(gè)模塊會(huì)檢驗(yàn)密碼相關(guān)的信息, 并且取代 /etc/login.defs 內(nèi)的 PASS_MIN_LEN的設(shè)定。
chage
更詳細(xì)的密碼參數(shù)顯示功能
#chage [-ldEImMW] 賬號名
選項(xiàng)與參數(shù):
-l :列出該賬號的詳細(xì)密碼參數(shù);
-d :后面接日期,修改 shadow 第三字段(最近一次更改密碼的日期),格式Y(jié)YYY-MM-DD
-E :后面接日期,修改 shadow 第八字段(賬號失效日),格式 YYYY-MM-DD
-I :后面接天數(shù),修改 shadow 第七字段(密碼失效日期)
-m :后面接天數(shù),修改 shadow 第四字段(密碼最短保留天數(shù))
-M :后面接天數(shù),修改 shadow 第五字段(密碼多久需要進(jìn)行變更)
-W :后面接天數(shù),修改 shadow 第六字段(密碼過期前警告日期)
chage 有一個(gè)功能很不錯(cuò),如果你想要讓『使用者在第一次登入時(shí), 強(qiáng)制他們一定要更改密碼后才能
夠使用系統(tǒng)資源』,可以利用如下的方法來處理
范例二:建立一個(gè)名為 agetest 的賬號,該賬號第一次登入后使用默認(rèn)密碼,但必須要更改過密碼后,使用新密碼才能夠登入系統(tǒng)使用 bash 環(huán)境
#useradd agetest
#echo "agetest" | passwd --stdin agetest
#chage -d 0 agetest
此時(shí)此賬號的密碼建立時(shí)間會(huì)被改為 1970/1/1 ,所以會(huì)有問題
你會(huì)發(fā)現(xiàn) agetest 這個(gè)賬號在第一次登入時(shí)可以使用與賬號同名的密碼登入, 但登入時(shí)就
會(huì)被要求立刻更改密碼,更改密碼完成后就會(huì)被踢出系統(tǒng)。再次登入時(shí)就能夠使用新密碼登入了
usermod
所謂這『人有失手,馬有亂蹄』,所以,當(dāng)然有的時(shí)候會(huì)『不小心』在 useradd 的時(shí)候加入了錯(cuò)誤的設(shè)定數(shù)據(jù)?;蛘呤?在使用 useradd 后,發(fā)現(xiàn)某些地方還可以進(jìn)行細(xì)部修改。 此時(shí),當(dāng)然我們可以直接到 /etc/passwd 或 /etc/shadow 去修改相對應(yīng)字段的數(shù)據(jù), 不過,Linux 也有提供相關(guān)
的指令讓大家來進(jìn)行賬號相關(guān)數(shù)據(jù)的微調(diào),那就是 usermod
# usermod [-cdegGlsuLU] username
選項(xiàng)與參數(shù):
-c :后面接賬號的說明,即 /etc/passwd 第五欄的說明欄,可以加入一些賬號的說明。
-d :后面接賬號的家目錄,即修改 /etc/passwd 的第六欄;
-e :后面接日期,格式是 YYYY-MM-DD 也就是在 /etc/shadow 內(nèi)的第八個(gè)字段數(shù)據(jù)
-f :后面接天數(shù),為 shadow 的第七字段。
-g :后面接初始群組,修改 /etc/passwd 的第四個(gè)字段,亦即是 GID 的字段
-G :后面接次要群組,修改這個(gè)使用者能夠支持的群組,修改的是 /etc/group
-a :與 -G 合用,可『增加次要群組的支持』而非『設(shè)定』
-l :后面接賬號名稱。亦即是修改賬號名稱, /etc/passwd 的第一欄
-s :后面接 Shell 的實(shí)際文件,例如 /bin/bash 或 /bin/csh 等等。
-u :后面接 UID 數(shù)字啦!即 /etc/passwd 第三欄的資料;
-L :暫時(shí)將用戶的密碼凍結(jié),讓他無法登入。其實(shí)僅改 /etc/shadow 的密碼欄。
-U :將 /etc/shadow 密碼欄的 ! 拿掉,解凍啦
userdel
這個(gè)功能就太簡單了,目的在刪除用戶的相關(guān)數(shù)據(jù),而用戶的數(shù)據(jù)有:
用戶賬號/密碼相關(guān)參數(shù):/etc/passwd, /etc/shadow
使用者群組相關(guān)參數(shù):/etc/group, /etc/gshadow
用戶個(gè)人文件數(shù)據(jù): /home/username, /var/spool/mail/username..
整個(gè)指令的語法非常簡單:
#userdel [-r] username
選項(xiàng)與參數(shù):
-r :連同用戶的家目錄也一起刪除
其實(shí)用戶如果在系統(tǒng)上面操作過一陣子了,那么該用戶其實(shí)在系統(tǒng)內(nèi)可能會(huì)含有其他文件的。舉例來說,
他的郵件信箱 (mailbox) 或者是例行性工作排程 (crontab, 十六章) 之類的文件。 所以,如果想要
完整的將某個(gè)賬號完整的移除,最好可以在下達(dá) userdel -r username 之前, 先以『 find / -user
username 』查出整個(gè)系統(tǒng)內(nèi)屬于 username 的文件,然后再加以刪除吧!
用戶功能
不論是 useradd/usermod/userdel ,那都是系統(tǒng)管理員所能夠使用的指令, 如果我是一般身份使用
者,那舉我是否除了密碼之外,就無法更改其他的數(shù)據(jù)呢? 當(dāng)然不是啦!這里我們介紹幾個(gè)一般身份用
戶常用的賬號數(shù)據(jù)變更與查詢指令啰!
finger
finger 的中文字面意義是:『手指』或者是『指紋』的意思。這個(gè) finger 可以查閱很多用戶相關(guān)的信
息喔! 大部分都是在 /etc/passwd 這個(gè)文件里面的信息啦!我們就先來檢查檢查用戶信息吧!
# finger [-s] username
選項(xiàng)與參數(shù):
-s :僅列出用戶的賬號、全名、終端機(jī)代號與登入時(shí)間等等;
-m :列出與后面接的賬號相同者,而不是利用部分比對 (包括全名部分)
由于 finger 類似指紋的功能,他會(huì)將用戶的相關(guān)屬性列出來!如上表所示,其實(shí)他列出來的幾乎都是
/etc/passwd 文件里面的東西。列出的信息說明如下:
Login:為使用者賬號,亦即 /etc/passwd 內(nèi)的第一字段;
Name:為全名,亦即 /etc/passwd 內(nèi)的第五字段(或稱為批注);
Directory:就是家目錄了;
Shell:就是使用的 Shell 文件所在;
Never logged in.:figner 還會(huì)調(diào)查用戶登入主機(jī)的情況喔!
No mail.:調(diào)查 /var/spool/mail 當(dāng)中的信箱資料;
No Plan.:調(diào)查 ~vbird1/.plan 文件,并將該文件取出來說明!
不過是否能夠查閱到 Mail 與 Plan 則與權(quán)限有關(guān)了!因?yàn)?Mail / Plan 都是與使用者自己的權(quán)限設(shè)定有
關(guān), root 當(dāng)然可以查閱到用戶的這些信息,但是 vbird1 就不見得能夠查到 vbird3 的信息, 因?yàn)?/p>
/var/spool/mail/vbird3 與 /home/vbird3/ 的權(quán)限分別是 660, 700 ,那 vbird1 當(dāng)然就無法查閱的到!
chfn
chfn 修改用戶的 finger 數(shù)據(jù),有點(diǎn)像是: change finger 的意思!這玩意的使用方法如下:
# chfn [-foph] [賬號名]
選項(xiàng)與參數(shù):
-f :后面接完整的大名;
-o :您辦公室的房間號碼;
-p :辦公室的電話號碼;
-h :家里的電話號碼!
chsh
這就是 change shell 的簡寫!使用方法就更簡單了!
$ chsh [-ls]
選項(xiàng)與參數(shù):
-l :列出目前系統(tǒng)上面可用的 shell ,其實(shí)就是 /etc/shells 的內(nèi)容!
-s :設(shè)定修改自己的 Shell 啰
id
id 這個(gè)指令則可以查詢某人或自己的相關(guān) UID/GID 等等的信息,他的參數(shù)也不少,不過, 都不需要
讓~反正使用 id 就全部都列出啰~ ^_^
#id [username]
新增與移除群組
基本上,群組的內(nèi)容都與這兩個(gè)文件有關(guān):/etc/group,/etc/gshadow。群組的內(nèi)容其實(shí)很簡單,都是上面兩個(gè)
文件的新增、修改與移除而已, 不過,如果再加上有效群組的概念,那么 newgrp與gpasswd 則不可不知呢!
# groupadd [-g gid] [-r] 組名
選項(xiàng)與參數(shù):
-g :后面接某個(gè)特定的 GID ,用來直接給予某個(gè) GID
-r :建立系統(tǒng)群組啦!與 /etc/login.defs 內(nèi)的 GID_MIN 有關(guān)
groupmod
跟 usermod 類似的,這個(gè)指令僅是在進(jìn)行 group 相關(guān)參數(shù)的修改而已。
#groupmod [-g gid] [-n group_name] 群組名
選項(xiàng)與參數(shù):
-g :修改既有的 GID 數(shù)字;
-n :修改既有的組名
groupdel
呼呼! groupdel 自然就是在刪除群組的啰~用法很簡單:
#groupdel [groupname]
若要?jiǎng)h除 vbird1 這個(gè)群組的話?
#groupdel vbird1
groupdel: cannot remove user's primary group.
為什么 mygroup 可以刪除,但是 vbird1 就不能初除呢?原因很簡單,『有某個(gè)賬號 (/etc/passwd)
的 initial group 使用該群組!』 如果查閱一下,你會(huì)發(fā)現(xiàn)在 /etc/passwd 內(nèi)的 vbird1 第四欄的 GID
就是 /etc/group 內(nèi)的 vbird1 那個(gè)群組的 GID ,所以啰,當(dāng)然無法初除~否則 vbird1 這個(gè)用戶登入系
統(tǒng)后, 就會(huì)找不到 GID ,那可是會(huì)造成很大的困擾的!那舉如果硬要要初除 vbird1 這個(gè)群組呢? 你
『必須要確認(rèn) /etc/passwd 內(nèi)的賬號沒有任何人使用該群組作為 initial group 』才行喔!所以,你可
以:
修改 vbird1 的 GID ,或者是:
刪除 vbird1 這個(gè)使用者。
gpasswd:群組管理員功能
如果系統(tǒng)管理員太忙碌了,導(dǎo)致某些賬號想要加入某個(gè)項(xiàng)目時(shí)找不到人幫忙!這個(gè)時(shí)候可以建立『群組
管理員』喔! 什么是群組管理員呢?就是讓某個(gè)群組具有一個(gè)管理員,這個(gè)群組管理員可以管理哪些賬
號可以加入/移出該群組! 那要如何『建立一個(gè)群組管理員』呢?就得要透過 gpasswd 啰!
關(guān)于系統(tǒng)管理員(root)做的動(dòng)作:
#gpasswd groupname
#gpasswd [-A user1,...] [-M user3,...] groupname
#gpasswd [-rR] groupname
選項(xiàng)與參數(shù):
:若沒有任何參數(shù)時(shí),表示給予 groupname 一個(gè)密碼(/etc/gshadow)
-A :將 groupname 的主控權(quán)交由后面的使用者管理(該群組的管理員)
-M :將某些賬號加入這個(gè)群組當(dāng)中!
-r :將 groupname 的密碼移除
-R :讓 groupname 的密碼欄失效
關(guān)于群組管理員(Group administrator)做的動(dòng)作:
[someone@www ~]$ gpasswd [-ad] user groupname
選項(xiàng)與參數(shù):
-a :將某位使用者加入到 groupname 這個(gè)群組當(dāng)中!
-d :將某位使用者移除出 groupname 這個(gè)群組當(dāng)中。
賬號管理實(shí)例
賬號管理不是隨意建置幾個(gè)賬號就算了!有時(shí)候我們需要考慮到一部主機(jī)上面可能有多個(gè)賬號在協(xié)同工
作! 舉例來說,在大學(xué)任教時(shí),我們學(xué)校的專題生是需要分組的,這些同一組的同學(xué)間必須要能夠互相
修改對方的數(shù)據(jù)文件, 但是同時(shí)這些同學(xué)又需要保留自己的私密數(shù)據(jù),因此直接公開家目錄是不適宜
的。那該如何是好? 為此,我們底下提供幾個(gè)例子來讓大家思考看看啰:
任務(wù)一:單純的完成上頭交代的任務(wù),假設(shè)我們需要的賬號數(shù)據(jù)如下,你該如何實(shí)作?
賬號名稱?? ?賬號全名?? ??? ?支援次要群組?? ?是否可登入主機(jī)?? ?密碼
myuser1 1st user ?? ?mygroup1 ?? ??? ?可以 ?? ??? ?password
myuser2 2nd user ?? ?mygroup1 ?? ??? ?可以 ?? ??? ?password
myuser3 3rd user ?? ?無額外支持 ?? ??? ?不可以 ?? ??? ?password
處理的方法如下所示:
# groupadd mygroup1
# useradd -G mygroup1 -c "1st user" myuser1
# useradd -G mygroup1 -c "2nd user" myuser2
# useradd -c "3rd user" -s /sbin/nologin myuser3
# echo "password" | passwd --stdin myuser1
# echo "password" | passwd --stdin myuser2
# echo "password" | passwd --stdin myuser3
要注意的地方主要有:myuser1 與 myuser2 都有支援次要群組,但該群組不見得會(huì)存在,因此需要先
手動(dòng)建立他! 然后 myuser3 是『不可登入系統(tǒng)』的賬號,因此需要使用 /sbin/nologin 這個(gè) shell來
給予,這樣該賬號就無法登入啰! 這樣是否理解啊!接下來再來認(rèn)論比較難一些的環(huán)境!如果是專題環(huán)
境該如何制作?
任務(wù)二:我的使用者 pro1, pro2, pro3 是同一個(gè)項(xiàng)目計(jì)劃的開發(fā)人員,我想要讓這三個(gè)用戶在同一個(gè)目
錄底下工作, 但這三個(gè)用戶還是擁有自己的家目錄與基本的私有群組。假設(shè)我要讓這個(gè)項(xiàng)目計(jì)劃在
/srv/projecta 目錄下開發(fā), 可以如何進(jìn)行?
1. 假設(shè)這三個(gè)賬號都尚未建立,可先建立一個(gè)名為 projecta 的群組,
再讓這三個(gè)用戶加入其次要群組的支持即可:
#groupadd projecta
# useradd -G projecta -c "projecta user" pro1
# useradd -G projecta -c "projecta user" pro2
# useradd -G projecta -c "projecta user" pro3
# echo "password" | passwd --stdin pro1
# echo "password" | passwd --stdin pro2
# echo "password" | passwd --stdin pro3
2. 開始建立此項(xiàng)目的開發(fā)目錄:
# mkdir /srv/projecta
# chgrp projecta /srv/projecta
# chmod 2770 /srv/projecta
# ll -d /srv/projecta
drwxrws--- 2 root projecta 4096 Feb 27 11:29 /srv/projecta
由于此項(xiàng)目計(jì)劃只能夠給 pro1, pro2, pro3 三個(gè)人使用,所以 /srv/projecta 的權(quán)限設(shè)定一定要正確才行, 所以該目錄群組一定是 projecta ,但是權(quán)限怎么會(huì)是 2770 呢還記得第七章談到的 SGID 吧?為
了讓三個(gè)使用者能夠互相修改對方的文件, 這個(gè) SGID 是必須要存在的喔!如果連這里都能夠理解,您的賬號管理已經(jīng)有一定程度的概念。但接下來有個(gè)困擾的問題發(fā)生了!假如任務(wù)一的 myuser1 是 projecta 這個(gè)項(xiàng)目的助理,他需要這個(gè)項(xiàng)目的內(nèi)容, 但是他『不可以修改』項(xiàng)目目錄內(nèi)的任何數(shù)據(jù)!那該如何是好?你或許可以這樣做:
將 myuser1 加入 projecta 這個(gè)群組的支持,但是這樣會(huì)讓 myuser1 具有完整的 /srv/projecta
的權(quán)限, myuser1 是可以刪除該目錄下的任何數(shù)據(jù)的!這樣是有問題的;
將 /srv/projecta 的權(quán)限改為 2775 ,讓 myuser1 可以進(jìn)入查閱數(shù)據(jù)。但此時(shí)會(huì)發(fā)生所有其他人
均可進(jìn)入該目錄查閱的困擾! 這也不是我們要的環(huán)境,傳統(tǒng)的 Linux 權(quán)限無法針對某個(gè)個(gè)人設(shè)定專
屬的權(quán)限嗎?其實(shí)是可以的,那就是ACL
總結(jié)
以上是生活随笔為你收集整理的linux 用户加入次要群组,linux学习笔记之 帐号和群组管理的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 中图法检索计算机科学方面,信息检索 第一
- 下一篇: linux添加有效群组,Linux中的有