Linux學習-賬號管理

来源:http://www.cnblogs.com/uetucci/archive/2017/10/12/7650513.html
-Advertisement-
Play Games

新增與移除使用者: useradd, 相關配置文件, passwd, usermod, userdel 我們登入系統時會輸入 (1)賬號與 (2)密碼,所以建立一個可用的賬號同樣的也需要這兩個數據。那賬號可以使用 useradd 來新建用戶, 密碼的給予則使用 passwd 這個指令!這兩個指令下達 ...


新增與移除使用者: useradd, 相關配置文件, passwd, usermod, userdel

我們登入系統時會輸入 (1)賬號與 (2)密碼,所以建立一個可用的賬號同樣的也需要這兩個數據。那賬號可以使用 useradd 來新建用戶, 密碼的給予則使用 passwd 這個指令!這兩個指令下達方法如下:


  • useradd
[root@study ~]# 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 為永遠不失效(密碼只會過期而強制於登入時重新設定而已。)

範例一:完全參考預設值建立一個用戶,名稱為 vbird1 [root@study ~]# useradd vbird1
[root@study ~]# ll -d /home/vbird1
drwx------. 3 vbird1 vbird1 74 Jul 20 21:50 /home/vbird1 
# 預設會建立用戶家目錄,且許可權為 700 !這是重點!

[root@study ~]# grep vbird1 /etc/passwd /etc/shadow /etc/group
/etc/passwd:vbird1:x:1003:1004::/home/vbird1:/bin/bash /etc/shadow:vbird1:!!:16636:0:99999:7:::
/etc/group:vbird1:x:1004: <==預設會建立一個與賬號一模一樣的群組名

簡單的使用『 useradd 賬號 』來建立 使用者即可。 CentOS 這些預設值主要會幫我們處理幾個項目:

  • 在 /etc/passwd 裡面建立一行與賬號相關的數據,包括建立 UID/GID/家目錄等;
  • 在 /etc/shadow 裡面將此賬號的密碼相關參數填入,但是尚未有密碼;
  • 在 /etc/group 裡面加入一個與賬號名稱一模一樣的組名;
  • 在 /home 底下建立一個與賬號同名的目錄作為用戶家目錄,且許可權為 700

由於在 /etc/shadow 內僅會有密碼參數而不會有加密過的密碼數據,因此我們在建立使用者賬號時, 還需要使用『 passwd 賬號 』來給予密碼才算是完成了用戶建立的流程。如果由於特殊需求而需要 改變使用者相關參數時, 就得要透過上述表格中的選項來進行建立了,參考底下的案例:

範例二:假設我已知道我的系統當中有個組名為 users ,且 UID 1500 並不存在, 請用 users 為初始群組,以及 uid 為 1500 來建立一個名為 vbird2 的賬號
[root@study ~]# useradd -u 1500 -g users vbird2
[root@study ~]# ll -d /home/vbird2
drwx------. 3 vbird2 users 74 Jul 20 21:52 /home/vbird2
[root@study ~]# grep vbird2 /etc/passwd /etc/shadow /etc/group 
/etc/passwd:vbird2:x:1500:100::/home/vbird2:/bin/bash 
/etc/shadow:vbird2:!!:16636:0:99999:7:::

在這個範例中,我們建立的是指定一個已經存在的群組作為使用者的初始群組,因為群組已經存在,所以在 /etc/group 裡面就不會主動的建立與賬號同名的群組了!此外,我們也指定了特殊的 UID 來作為使用者的專屬 UID。瞭解了一般賬號後,我們來瞧瞧那啥是系統賬號(system acount)。

範例三:建立一個系統賬號,名稱為 vbird3
[root@study ~]# useradd -r vbird3
[root@study ~]# ll -d /home/vbird3
ls: cannot access /home/vbird3: No such file or directorya <==不會主動建立家目錄

[root@study ~]# grep vbird3 /etc/passwd /etc/shadow /etc/group
/etc/passwd:vbird3:x:699:699::/home/vbird3:/bin/bash /etc/shadow:vbird3:!!:16636::::::
/etc/group:vbird3:x:699:

一般賬號應該是 1000 號以後,那用戶自己建立的系統賬號則一般 是小於 1000 號以下的。 所以在這裡我們加上 -r 這個選項以後,系統就會主動將賬號與賬號同名 群組的 UID/GID 都指定小於 1000 以下,此外,由於系統賬號主要是用來進行運作系統所需服務的許可權設定, 所以系統賬號預設都不會主動建立家目錄的!

使用 useradd 建立使用者賬號時,其實會更改不少地方,至少我們就 知道底下幾個文件:

  • 用戶賬號與密碼參數方面的文件:/etc/passwd, /etc/shadow
  • 使用者群組相關方面的文件:/etc/group, /etc/gshadow
  • 用戶的家目錄:/home/賬號名稱

  • useradd參考文檔

useradd 的預設值可以使用底下的方法呼叫出來:

[root@study ~]# useradd -D
GROUP=100 <==預設的群組
HOME=/home <==預設的家目錄所在目錄
INACTIVE=-1 <==密碼失效日,在 shadow 內的第 7 欄
EXPIRE= <==賬號失效日,在 shadow 內的第 8 欄
SHELL=/bin/bash <==預設的 shell
SKEL=/etc/skel <==用戶家目錄的內容數據參考目錄
CREATE_MAIL_SPOOL=yes <==是否主動幫使用者建立郵件信箱(mailbox)

這個數據其實是由 /etc/default/useradd 呼叫出來的!你可以自行用 vim 去觀察該文件的內容。搭配上頭剛剛談過的範例一的運作結果,上面這些設定項目所造成的行為分別是:

  • GROUP=100:新建賬號的初始群組使用 GID 為 100 者

系統上面 GID 為 100 者即是 users 這個群組,此設定項目指的就是讓新設使用者賬號的初始群 組為 users 這一個的意思。 但是我們知道 CentOS 上面並不是這樣的,在 CentOS 上面預設的 群組為與賬號名相同的群組。怎麼會這樣啊?這是因 為針對群組的角度有兩種不同的機制所致, 這兩種機制分別是:

  • 私有群組機制:

系統會建立一個與賬號一樣的群組給使用者作為初始群組。 這種群組的設定機制會比較有保密性, 這是因為使用者都有自己的群組,而且家目錄許可權將會設定為 700 (僅有自己可進入自己的家目錄) 之故。使用這種機制將不會參考 GROUP=100 這個設定值。代表性的 distributions 有 RHEL, Fedora, CentOS 等;

  • 公共群組機制:

就是以 GROUP=100 這個設定值作為新建賬號的初始群組,因此每個賬號都屬於 users 這個群組, 且預設家目錄通常的許可權會是『 drwxr-xr-x ... username users ... 』,由於每個賬號都屬於 users 群組,因此大家都可以互相分享家目錄內的數據之故。代表 distributions 如 SuSE 等。

  • HOME=/home:用戶家目錄的基準目錄(basedir)

用戶的家目錄通常是與賬號同名的目錄,這個目錄將會擺放在此設定值的目錄後。

  • INACTIVE=-1:密碼過期後是否會失效的設定值

我們在 shadow 文件結構當中談過,第七個欄位的設定值將會影響到密碼過期後, 在多久時間內 還可使用舊密碼登入。這個項目就是在指定該日數啦!如果是 0 代表密碼過期立刻失效, 如果 是 -1 則是代表密碼永遠不會失效,如果是數字,如 30 ,則代表過期 30 天後才失效

  • EXPIRE=:賬號失效的日期

就是 shadow 內的第八欄位,你可以直接設定賬號在哪個日期後就直接失效,而不理會密碼的問題。通常不會設定此項目。

  • SHELL=/bin/bash:預設使用的 shell 程式文件名

系統預設的 shell 就寫在這裡。假如你的系統為 mail server ,你希望每個賬號都只能使用 email 的收發信件功能, 而不許用戶登入系統取得 shell ,那麼可以將這裡設定為 /sbin/nologin ,如此 一來,新建的使用者預設就無法登入! 也免去後續使用 usermod 進行修改的手續!

  • 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               1000 <==使用者最小的 UID,意即小於 1000 的 UID 為系統保留
UID_MAX             60000 <==使用者能夠用的最大 UID
SYS_UID_MIN         201 <==保留給用戶自行設定的系統賬號最小值 UID
SYS_UID_MAX        999 <==保留給用戶自行設定的系統賬號最大值 UID
GID_MIN               1000 <==使用者自定義組的最小 GID,小於 1000 為系統保留
GID_MAX             60000 <==使用者自定義組的最大 GID
SYS_GID_MIN       201 <==保留給用戶自行設定的系統賬號最小值 GID
SYS_GID_MAX      999 <==保留給用戶自行設定的系統賬號最大值 GID

CREATE_HOME    yes <==在不加 -M 及 -m 時,是否主動建立用戶家目錄?
UMASK                077 <==用戶家目錄建立的 umask ,因此許可權會是 700
USERGROUPS_ENAB yes <==使用 userdel 刪除時,是否會刪除初始群組
ENCRYPT_METHOD   SHA512 <==密碼加密的機制使用的是 sha512 這一個機制!

這個文件規範的數據則是如下所示:

  • 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 核心支持的賬號可高達 232 這麼多個,不過一部主機要作出這麼多賬號在管理上也是很麻煩的! 所以在這裡就針對 UID/GID 的範圍進行規範就是了。上表中的 UID_MIN 指的就是可登入系統的一般賬 號的最小 UID ,至於 UID_MAX 則是最大 UID 之意。

要註意的是,系統給予一個賬號 UID 時,他是 (1)先參考 UID_MIN 設定值取得最小數值; (2)由 /etc/passwd 搜尋最大的 UID 數值, 將 (1) 與 (2) 相比,找出最大的那個再加一就是新賬號的 UID 了。

而如果我是想要建立系統用的賬號,所以使用 useradd -r sysaccount 這個 -r 的選項時,就會找『比 201 大 但比 1000 小的最大的 UID 』

  • 用戶家目錄設定值:

為何我們系統預設會幫用戶建立家目錄?就是這個『CREATE_HOME = yes』的設定值啦!這個設定值會讓 你在使用 useradd 時, 主動加入『 -m 』這個產生家目錄的選項啊!如果不想要建立用戶家目錄,就只能強制加上『 -M 』的選項在 useradd 指令執行時啦!至於建立家目錄的許可權設定呢?就透過 umask 這個設 定值啊!因為是 077 的預設設定,因此用戶家目錄預設許可權才會是『 drwx------ 』。

  • 用戶刪除與密碼設定值:

使用『USERGROUPS_ENAB yes』這個設定值的功能是: 如果使用 userdel 去刪除一個賬號時,且該賬號 所屬的初始群組已經沒有人隸屬於該群組了, 那麼就刪除掉該群組,至於『ENCRYPT_METHOD SHA512』則表示使用 SHA512 來加密密碼明文,而不使用舊式的 MD5。

使用 useradd 這支程式在建立 Linux 上的賬號時,至少會參考:

  • /etc/default/useradd
  • /etc/login.defs
  • /etc/skel/*

  • passwd

設定密碼就使用 passwd

[root@study ~]# passwd [--stdin] [賬號名稱] <==所有人均可使用來改自己的密碼
[root@study ~]# passwd [-l] [-u] [--stdin] [-S] \
> [-n 日數] [-x 日數] [-w 日數] [-i 日期] 賬號 <==root 功能
選項與參數:
--stdin :可以透過來自前一個管線的數據,作為密碼輸入,對 shell script 有幫助! -l :是 Lock 的意思,會將 /etc/shadow 第二欄最前面加上 ! 使密碼失效;
-u :與 -l 相對,是 Unlock 的意思!
-S :列出密碼相關參數,亦即 shadow 文件內的大部分信息。 
-n :後面接天數,shadow 的第 4 欄位,多久不可修改密碼天數 
-x :後面接天數,shadow 的第 5 欄位,多久內必須要更動密碼 
-w :後面接天數,shadow 的第 6 欄位,密碼過期前的警告天數 
-i :後面接『日期』,shadow 的第 7 欄位,密碼失效日期

範例一:請 root 給予 vbird2 密碼
[root@study ~]# passwd vbird2
Changing password for user vbird2.
New UNIX password: <==這裡直接輸入新的密碼,屏幕不會有任何反應
BAD PASSWORD: The password is shorter than 8 characters <==密碼太簡單或過短的錯誤!
Retype new UNIX password: <==再輸入一次同樣的密碼
passwd: all authentication tokens updated successfully. <==竟然還是成功修改了!

這個是 root 幫忙設定的結果,那如果是用戶自己要改密碼呢? 包括 root 也是這樣修改的喔!

範例二:用 vbird2 登入後,修改 vbird2 自己的密碼
[vbird2@study ~]$ passwd <==後面沒有加賬號,就是改自己的密碼!
Changing password for user vbird2.
Changing password for vbird2
(current) UNIX password: <==這裡輸入『原有的舊密碼』
New UNIX password: <==這裡輸入新密碼
BAD PASSWORD: The password is shorter than 8 characters <==密碼太短!不可以設定!重新想 
New password: <==這裡輸入新想的密碼
BAD PASSWORD: The password fails the dictionary check - it is based on a dictionary word 
# 同樣的,密碼設定在字典裡面找的到該字元串,所以也是不建議!無法通過,再想新的!
New UNIX password: <==這裡再想個新的密碼來輸入吧
Retype new UNIX password: <==通過密碼驗證!所以重覆這個密碼的輸入
passwd: all authentication tokens updated successfully. <==有無成功看關鍵詞

要幫一般賬號建立密碼需要使用『 passwd 賬號 』的格式,使 用『 passwd 』表示修改自己的密碼!

你想要幫 vbird2 變更密碼成為 abc543CC ,可以這樣下達指令

範例三:使用 standard input 建立用戶的密碼
[root@study ~]# echo "abc543CC" | passwd --stdin vbird2
Changing password for user vbird2.
passwd: all authentication tokens updated successfully.

這個動作通常僅 用在 shell script 的大量建立使用者賬號當中!要註意的是,這個選項並不存在所有 distributions 版本中。


  • chage

除了使用 passwd -S 之外,有沒有更詳細的密碼參數顯示功能呢?有的!那就是 chage 了!他的用 法如下:

[root@study ~]# chage [-ldEImMW] 賬號名
選項與參數:
-l :列出該賬號的詳細密碼參數;
-d :後面接日期,修改 shadow 第三欄位(最近一次更改密碼的日期),格式 YYYY-MM-DD 
-E :後面接日期,修改 shadow 第八欄位(賬號失效日),格式 YYYY-MM-DD
-I :後面接天數,修改 shadow 第七欄位(密碼失效日期)
-m :後面接天數,修改 shadow 第四欄位(密碼最短保留天數)
-M :後面接天數,修改 shadow 第五欄位(密碼多久需要進行變更) 
-W :後面接天數,修改 shadow 第六欄位(密碼過期前警告日期)

範例一:列出 vbird2 的詳細密碼參數
[root@study ~]# chage -l vbird2
Last password change    : Jul 20, 2015
Password expires           : Sep 18, 2015
Password inactive          : Sep 28, 2015
Account expires             : never
Minimum number of days between password change    : 0
Maximum number of days between password change   : 60
Number of days of warning before password expires    : 7

chage 有一個功能很不錯喔!如果你想要讓『使用者在第一次登入時, 強制她們一定要更改密碼後 才能夠使用系統資源』,可以利用如下的方法來處理的!

範例二:建立一個名為 agetest 的賬號,該賬號第一次登入後使用預設密碼,但必須要更改過密碼後,使用新密碼才能夠登入系統使用 bash 環境
[root@study ~]# useradd agetest
[root@study ~]# echo "agetest" | passwd --stdin agetest
[root@study ~]# chage -d 0 agetest
[root@study ~]# chage -l agetest | head -n 3
Last password change        : password must be changed  
Password expires               : password must be changed 
Password inactive              : password must be changed 
# 此時此賬號的密碼建立時間會被改為 1970/1/1 ,所以會有問題!

範例三:嘗試以 agetest 登入的情況
You are required to change your password immediately (root enforced)
WARNING: Your password has expired.
You must change your password now and login again!
Changing password for user agetest.
Changing password for agetest
(current) UNIX password: <==這個賬號被強制要求必須要改密碼!

  • usermod

在使用 useradd 後,發現某些地方還可以進行細部修改。此 時,當然我們可以直接到 /etc/passwd 或 /etc/shadow 去修改相對應欄位的數據, 不過,Linux 也有 提供相關的指令讓大家來進行賬號相關數據的微調呢~那就是 usermod

[root@study ~]# 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 密碼欄的 ! 拿掉,解凍啦!

不過 usermod 還是有新增的選項, 那就是 -L 與 -U ,不過這兩個 選項其實與 passwd 的 -l, -u 是相同的!而且也不見得會存在所有的 distribution 當中!接下來,讓 我們談談一些變更參數的實例吧!

範例一:修改使用者 vbird2 的說明欄,加上『VBird's test』的說明。
[root@study ~]# usermod -c "VBird's test" vbird2
[root@study ~]# grep vbird2 /etc/passwd 
vbird2:x:1500:100:VBird's test:/home/vbird2:/bin/bash

範例二:使用者 vbird2 這個賬號在 2015/12/31 失效。
[root@study ~]#usermod -e "2015-12-31" vbird2
[root@study ~]#chage -l vbird2 | grep 'Account expires'
Account expires    : Dec 31, 2015

範例三:我們建立 vbird3 這個系統賬號時並沒有給予家目錄,請建立他的家目錄
[root@study ~]# ll -d ~vbird3
ls: cannot access /home/vbird3: No such file or directory <==確認一下,確實沒有家目錄的存在!
[root@study ~]# cp -a /etc/skel /home/vbird3
[root@study ~]# chown -R vbird3:vbird3 /home/vbird3
[root@study ~]# chmod 700 /home/vbird3
[root@study ~]# ll -a ~vbird3
drwx------.  3 vbird3 vbird3 74 May 4 17:51 . <==用戶家目錄許可權
drwxr-xr-x.   10 root  root 4096 Jul 20 22:51 ..
-rw-r--r--. 1 vbird3 vbird3 18 Mar 6 06:06 .bash_logout
-rw-r--r--. 1 vbird3 vbird3 193 Mar 6 06:06 .bash_profile
-rw-r--r--. 1 vbird3 vbird3 231 Mar 6 06:06 .bashrc
drwxr-xr-x. 4 vbird3 vbird3 37 May 4 17:51 .mozilla
# 使用 chown -R 是為了連同家目錄底下的用戶/群組屬性都一起變更的意思;
# 使用 chmod 沒有 -R ,是因為我們僅要修改目錄的許可權而非內部文件的許可權!

  • userdel

這個功能就太簡單了,目的在刪除用戶的相關數據,而用戶的數據有:

  • 用戶賬號/密碼相關參數:/etc/passwd, /etc/shadow
  • 使用者群組相關參數:/etc/group, /etc/gshadow
  • 用戶個人文件數據: /home/username, /var/spool/mail/username..

整個指令的語法非常簡單:

[root@study ~]# userdel [-r] username 
選項與參數:
-r :連同用戶的家目錄也一起刪除

範例一:刪除 vbird2 ,連同家目錄一起刪除 
[root@study ~]# userdel -r vbird2

用戶功能


  • id

id 這個指令則可以查詢某人或自己的相關 UID/GID 等等的信息,他的參數也不少,不過,都不需 要記~反正使用 id 就全部都列出啰!

[root@study ~]# id [username]    

範例一:查閱 root 自己的相關 ID 信息!
[root@study ~]# id
uid=0(root) gid=0(root) groups=0(root) context=unconfined_u:unconfined_r:unconfined_t: s0-s0:c0.c1023
# 上面信息其實是同一行的數據!包括會顯示 UID/GID 以及支持的所有群組!
# 至於後面那個 context=... 則是 SELinux 的內容,先不要理會他!

範例二:查閱一下 vbird1 吧~
[root@study ~]# id vbird1
uid=1003(vbird1) gid=1004(vbird1) groups=1004(vbird1)

[root@study ~]# id vbird100
id: vbird100: No such user <== id 這個指令也可以用來判斷系統上面有無某賬號!

  • finger

finger 的中文字面意義是:『手指』或者是『指紋』的意思。這個 finger 可以查閱很多用戶相關的 信息喔! 大部分都是在 /etc/passwd 這個文件裡面的信息!不過,這個指令有點危險,所以新的 版本中已經預設不安裝這個軟體!

[root@study ~]# df -hT /mnt
Filesystem Type Size Used Avail Use% Mounted on
/dev/sr0 iso9660 7.1G 7.1G 0 100% /mnt # 先確定是有掛載光碟的啦!

[root@study ~]# rpm -ivh /mnt/Packages/finger-[0-9]*

我們就先來檢查檢查用戶信息吧!

[root@study ~]# finger [-s] username
選項與參數:
-s :僅列出用戶的賬號、全名、終端機代號與登入時間等等;
-m :列出與後面接的賬號相同者,而不是利用部分比對 (包括全名部分)

範例一:觀察 vbird1 的用戶相關賬號屬性
[root@study ~]# finger vbird1
Login: vbird1
Directory: /home/vbird1
Never logged in.
No mail.
No Plan.

列出的信息說明如下:

  • Login:為使用者賬號,亦即 /etc/passwd 內的第一欄位;
  • Name:為全名,亦即 /etc/passwd 內的第五欄位(或稱為批註);
  • Directory:就是家目錄了;
  • Shell:就是使用的 Shell 文件所在;
  • Never logged in.:figner 還會調查用戶登入主機的情況喔!
  • No mail.:調查 /var/spool/mail 當中的信箱資料;
  • No Plan.:調查 ~vbird1/.plan 文件,並將該文件取出來說明!

此外,我們可以建立自己想要執行的預定計劃,當然,最多是給自己看的!可以這樣做:

範例二:利用 vbird1 建立自己的計劃檔
[vbird1@study ~]$ echo "I will study Linux during this year." > ~/.plan 
[vbird1@study ~]$ finger vbird1
Login: vbird1 Name:
Directory: /home/vbird1 Shell: /bin/bash
Last login Mon Jul 20 23:06 (CST) on pts/0
No mail.
Plan:
I will study Linux during this year.


範例三:找出目前在系統上面登入的用戶與登入時間
[vbird1@study ~]$ finger
Login    Name    Tty    Idle    Login Time    Office    Office Phone   Host
dmtsai  dmtsai    tty2 11d Jul 7 23:07
dmtsai  dmtsai    pts/0 Jul 20 17:59

  • chfn

chfn 有點像是: change finger 的意思!這玩意的使用方法如下:

[root@study ~]# chfn [-foph] [賬號名] 選項與參數:
-f :後面接完整的大名;
-o :您辦公室的房間號碼;
-p :辦公室的電話號碼; 
-h :家裡的電話號碼!

範例一:vbird1 自己更改一下自己的相關信息!
[vbird1@study ~]$ chfn
Changing finger information for vbird1.
Name []: VBird Tsai test <==輸入你想要呈現的全名 
Office []: DIC in KSU <==辦公室號碼
Office Phone []: 06-2727175#356 <==辦公室電話 
Home Phone []: 06-1234567 <==家裡電話號碼

Password: <==確認身份,所以輸入自己的密碼 
Finger information changed.

  • chsh

這就是 change shell 的簡寫!使用方法就更簡單了!

[vbird1@study ~]$ chsh [-ls]
選項與參數:
-l :列出目前系統上面可用的 shell ,其實就是 /etc/shells 的內容! 
-s :設定修改自己的 Shell 啰

範例一:用 vbird1 的身份列出系統上所有合法的 shell,並且指定 csh 為自己的 shell 
[vbird1@study ~]$ chsh -l
/bin/sh
/bin/bash
/sbin/nologin <==所謂:合法不可登入的 Shell 就是這玩意! /usr/bin/sh
/usr/bin/bash
/usr/sbin/nologin
/bin/tcsh
/bin/csh <==這就是 C shell 啦!
# 其實上面的信息就是我們在 bash 中談到的 /etc/shells 啦!

[vbird1@study ~]$ chsh -s /bin/csh; grep vbird1 /etc/passwd 
Changing shell for vbird1.
Password: <==確認身份,請輸入 vbird1 的密碼
Shell changed.

新增與移除群組

群組的內容都與這兩個文件有關:/etc/group, /etc/gshadow。 群組的內容其實很簡單,都是上面兩個 文件的新增、修改與移除而已。


  • groupadd
[root@study ~]# groupadd [-g gid] [-r] 組名
選項與參數:
-g :後面接某個特定的 GID ,用來直接給予某個 GID ~
-r :建立系統群組啦!與 /etc/login.defs 內的 GID_MIN 有關。

範例一:新建一個群組,名稱為 group1
[root@study ~]# groupadd group1
[root@study ~]# grep group1 /etc/group /etc/gshadow /etc/group:group1:x:1503:
/etc/gshadow:group1:!::
# 群組的 GID 也是會由 1000 以上最大 GID+1 來決定!

  • groupmod
[root@study ~]# groupmod [-g gid] [-n group_name] 群組名
選項與參數:
-g :修改既有的 GID 數字;
-n :修改既有的組名

範例一:將剛剛上個指令建立的 group1 名稱改為 mygroup , GID 為 201 
[root@study ~]# groupmod -g 201 -n mygroup group1
[root@study ~]# grep mygroup /etc/group /etc/gshadow 
/etc/group:mygroup:x:201:
/etc/gshadow:mygroup:!::

  • grouped

groupdel 自然就是在刪除群組的啰~用法很簡單:

[root@study ~]# groupdel [groupname] 

範例一:將剛剛的 mygroup 刪除!
[root@study ~]# groupdel mygroup

範例二:若要刪除 vbird1 這個群組的話?
[root@study ~]# groupdel vbird1
groupdel: cannot remove the primary group of user 'vbird1'

  • gpasswd:群組管理員功能

某個群組具有一個管理員,這個群組管理員可以管理 哪些賬號可以加入/移出該群組! 那要如何『建立一個群組管理員』呢?就得要透過 gpasswd !

# 關於系統管理員(root)做的動作:
[root@study ~]# gpasswd groupname
[root@study ~]# gpasswd [-A user1,...] [-M user3,...] groupname 
[root@study ~]# gpasswd [-rR] groupname

# 關於群組管理員(Group administrator)做的動作: 
[someone@study ~]$ gpasswd [-ad] user groupname 
選項與參數:
-a :將某位使用者加入到 groupname 這個群組當中!
-d :將某位使用者移除出 groupname 這個群組當中。

範例一:建立一個新群組,名稱為 testgroup 且群組交由 vbird1 管理: 
[root@study ~]# groupadd testgroup <==先建立群組
[root@study ~]# gpasswd testgroup <==給這個群組一個密碼吧! 
Changing the password for group testgroup
New Password:
Re-enter new password:
# 輸入兩次密碼就對了!
[root@study ~]# gpasswd -A vbird1 testgroup <==加入群組管理員為 vbird1
[root@study ~]# grep testgroup /etc/group /etc/gshadow
/etc/group:testgroup:x:1503: /etc/gshadow:testgroup:$6$MnmChP3D$mrUn.Vo.buDjObMm8F2emTkvGSeuWikhRzaKHxpJ...:vbird1: 
# 很有趣吧!此時 vbird1 則擁有 testgroup 的主控權喔!身份有點像板主啦!

範例二:以 vbird1 登入系統,並且讓他加入 vbird1, vbird3 成為 testgroup 成員 
[vbird1@study ~]$ id
uid=1003(vbird1) gid=1004(vbird1) groups=1004(vbird1) ...
# 看得出來,vbird1 尚未加入 testgroup 群組喔!

[vbird1@study ~]$ gpasswd -a vbird1 testgroup 
[vbird1@study ~]$ gpasswd -a vbird3 testgroup 
[vbird1@study ~]$ grep testgroup /etc/group 
testgroup:x:1503:vbird1,vbird3

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • linux內核提供了一個container_of()巨集,可以根據結構體某個成員的地址找到父結構的地址。 而在Nginx也是效仿採用一樣的巨集獲取父結構地址。 ...
  • nginx可以在不停止服務的情況下,升級更新自己的bin文件,那這些是怎麼實現的呢,讓我們看一下nginx的源碼 ...
  • 前言:DNS,耳熟能詳的東西,內容太多,小編也不太好講清,只能寫幾個實驗詳解,供大家參考。 一、簡單介紹 1、DNS:通過主機名,最終得到該主機名對應的IP地址的過程叫做功能變數名稱解析(或主機名解析)。 埠號:53/udp, 53/tcp 2、等級 根域 :世界有13個ip地址管理,有10個在美國,1個 ...
  • 能在Linux中運行的文本編輯器很多,每個人喜歡的也不一樣。各種不同的Linux發行版一定會內置Vi編輯器,其它編輯器可能不會內置,需要自己安裝。所以必須學會Vi的使用,以應對在新的Linux環境。Vim編輯器是Vi編輯器的升級版,功能比Vi強大,並且相容Vi的操作。所以我就直接學習Vim編輯器。( ...
  • 在說明如何穩定安全地升級、降級已經在運行中的nginx之前,需要先瞭解nginx支持的幾種信號。以下幾種是主進程可以接收的信號,註意worker進程也可以接收一些信號,但和主進程的信號處理機制有些不一樣,且主進程支持的信號worker進程不一定支持。具體可見man nginx。 graceful s ...
  • 當程式在測試或者老化的時候很有用,只要程式有異常拋出,就能啟用windbg調試,這樣就能及時的保存現場。 程式崩潰時,windows系統會調用系統預設調試器,其設置在註冊表 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion ...
  • 本文目錄:1 編譯nginx2 編譯php3 配置nginx和php-fpm交互 1. 編譯nginx rpm包格式的nginx地址:http://nginx.org/packages/源碼包下載地址:http://nginx.org/en/download.html 。本文下載的是最新穩定版ngi ...
  • 一、apache、php、mysql安裝 安裝順序:apache/mysql 最後安裝php 前兩者順序無所謂。 1.安裝apache 需要伺服器聯網 安裝:yum install -y httpd 運行:/bin/systemctl start httpd.service 執行完運行命令之後是看不 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...