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