文件、用戶、用戶組管理

来源:https://www.cnblogs.com/NingYaFelix/archive/2023/04/18/17331225.html
-Advertisement-
Play Games

0.linux的目錄結構 1.用戶和用戶組的信息存儲 1.1. 用戶的基本信息文件/etc/passwd 1.1.1. 用戶名 1.1.2. 密碼 1.1.3. UID 1.1.4. GID 1.1.5. 註釋性描述 1.1.6. 宿主目錄 1.1.7. 預設shell 1.2. 用戶的密碼信息文件 ...


linux的目錄結構

linux中,所有的文件和目錄都被組織成一個一根節點/開始的倒置的樹狀結構
文件系統的最頂層是由根目錄開始的,再0往下既可以是目錄也可以是文件,而每一個目錄中又可以包含(子目錄)或文件,如此反覆即為目錄
註意:目錄和文件名是區分大小寫的
Linux採用文件系統層次標準(FHS標準),規定了什麼目錄下應該放什麼文件,可以在Linux文件目錄結構一覽表中查看

linux的用戶和用戶組管理

1. 用戶和用戶組的信息存儲

1.1. 用戶的基本信息文件/etc/passwd

通過 cat /etc/passwd命令來查看/etc/passwd配置文件的信息如下:

/etc/passwd文件中每行紀錄一個用戶,其中很多是系統或服務正常運行所必需的用戶,稱為系統用戶或偽用戶,系統用戶無法用來登錄,但是也不能刪除,刪除了之後,依賴這些用戶運行的服務或程式就不能正常執行,會導致系統問題
以root用戶信息為例,共7個欄位,並以:進行了分割

root:x:0:0:root:/root:/bin/bash
用戶名:密碼位:UID(用戶ID):GID(組ID):註釋性描述:宿主目錄:預設shell

1.1.1. 用戶名

用戶登錄系統是使用的用戶名,一串代表身份字元串

1.1.2. 密碼

x代表此用戶設有密碼,但不是真的密碼,真的在/etc/shandow文件中,早期的 UNIX 中,這裡就是真正的加密密碼串,但由於所有程式都能讀取此文件,非常容易造成用戶數據被竊取,雖然密碼是加密的,但是採用暴力破解的方式也是能夠進行破解的,因此,現在 Linux 系統把真正的加密密碼串放置在 /etc/shadow 文件中,此文件只有 root 用戶可以瀏覽和操作,註意不可以刪除x,刪了就會認為是無密碼的

1.1.3. UID

用戶ID,是一個0~65535之間的數值,不同範圍代表不同的用戶

表 1 UID代表不同身份的用戶
UID 範圍 用戶身份
0 超級用戶。UID 為 0 就代表這個賬號是管理員賬號。在 Linux 中,如何把普通用戶升級成管理員呢?只需把其他用戶的 UID 修改為 0 就可以了,這一點和 Windows 是不同的。不過不建議建立多個管理員賬號。
1~499 系統用戶(偽用戶)。也就是說,此範圍的 UID 保留給系統使用。其中,1~99 用於系統自行創建的賬號;100~499 分配給有系統賬號需求的用戶。

其實,除了 0 之外,其他的 UID 並無不同,這裡只是預設 500 以下的數字給系統作為保留賬戶,只是一個公認的習慣而已。
500~65535 普通用戶。通常這些 UID 已經足夠用戶使用了。但不夠用也沒關係,2.6.x 內核之後的 Linux 系統已經可以支持 232 個 UID 了。

1.1.4. GID

全稱”Group ID”,簡稱組ID,用戶初始組的組ID號
初始組: 指用戶登陸時就擁有這個用戶組的相關許可權。每個用戶的初始組只能有一個,通常就是將和此用戶的用戶名相同的組名作為該用戶的初始組
附加組: 指用戶可以加入多個其他的用戶組,並擁有這些組的許可權。每個用戶只能有一個初始組,除初始組外,用戶再加入其他的用戶組,這些用戶組就是這個用戶的附加組。附加組可以有多個,而且用戶可以有這些附加組的許可權
附加組和初始組是可以更改的,在 /etc/passwd 文件的第四個欄位中看到的 ID 是這個用戶的初始組

1.1.5. 註釋性描述

例如存放用戶名全名等信息

1.1.6. 宿主目錄

用戶登錄之後有操作許可權的訪問目錄,也叫用戶的主目錄

1.1.7. 預設shell

Linux的命令解釋器

1.2. 用戶的密碼信息文件/etc/shadow

該文件僅root用戶擁有許可權如果發生了改變,需要註意是否有了惡意攻擊

查看一下這個文件的內容

和passwd文件一樣,不同的是被分為了9個欄位

root:$6$ZFZ38JaA$r48EyIT9/4XcybjzAlNcudL/GslvyTpozzXUbHl1xC2DWEz9bdEy4utgSp5RR7ujMm4GtNn8NP96eQLXBqAiW1:19462:0:99999:7:::
用戶名:加密密碼:最後一次修改時間:最小修改時間間隔:密碼有效期:密碼需要變更前的警告天數:密碼過期後的寬限時間:賬號失效時間:保留欄位

1.2.1. 用戶名

和passwd文件一樣

1.2.2. 加密密碼

這裡存的是真正的加密的密碼,使用的sha512散列加密演算法,原本採用的是md5或des加密

這個加密不能手工修改,如果修改,那麼系統將無法識別密碼,導緻密碼是失效,可以通過在這個密碼串前面加上! * x使密碼暫時失效

所有的偽用戶的密碼都是" !! "或" * " 代表沒有密碼是不能登錄的,新創建的用戶如果沒有設定密碼,它的密碼項也是" !! "代表這個用戶沒有密碼,不能登錄

1.2.3. 最後一次修改時間

如果root顯示的是19462是因為什麼
因為,Linux計算日期的時間是以1970年1月1日作為1不斷累加得到的時間,到1970年1月1日,則為366天。這裡顯示19462天,也就是說,此root賬號在1970年1月1日之後的第19462天修改的root用戶密碼

可以使用如下命名查看1942代表那一天

1.2.4. 最小修改時間間隔

該欄位規定了從第3欄位(最後一次修改密碼的日期)起,多長時間之內不能修改密碼

  • 0:隨時都可以修改
  • 10:代表10天內不能修改

1.2.5. 密碼有效期

這個欄位可以指定距離第 3 欄位(最後一次更改密碼)多長時間內需要再次變更密碼,否則該賬戶密碼進行過期階段,強制用戶更改密碼,預設為99999,也就是273年

1.2.6. 密碼需要變更前的警告天數

與第5欄位 相比較,當賬戶有效期快到時 ,系統會發出警告信息給此賬戶,預設欄位為7

1.2.7. 密碼過期後的寬限天數

密碼過期之後在此時間內還可以登錄,超過之後不會提示而是完全禁用

1.2.8. 賬號失效時間

同第3個欄位一樣,使用字1970年1月1日以來的總天數作為賬戶的失效時間,表示在此欄位固定的時間之外,無論密碼是否過期,都無法使用

1.2.9. 保留

1.2.10. 忘記密碼怎麼辦

  • 普通用戶:利用root用戶更改
  • root用戶:如果 root 賬號的密碼遺失,則需要重新啟動進入單用戶模式,系統會提供 root 許可權的 bash 介面,此時可以用 passwd 命令修改賬戶密碼;也可以通過掛載根目錄,修改 /etc/shadow,將賬戶的 root 密碼清空的方法,此方式可使用 root 無法密碼即可登陸,建議登陸後使用 passwd 命令配置 root 密碼

1.3. 組信息文件/etc/group

是用戶的用戶組配置文件,即用戶組的所有信息都存在此文件中,記錄著組ID(GID)和組名相對應的文件,查看該文件

用戶組中還是以" : "作為欄位之間的分隔符,分為四段

組名:密碼:GID:該用戶組中的用戶列表

1.3.1. 組名

也就是用戶組的名稱,以字母或數字構成,不能重覆、

1.3.2. 組密碼

與passwd文件一樣

不過,用戶設置密碼是為了驗證用戶的身份,那用戶組設置密碼是用來做什麼的呢?
用戶組密碼主要是用來指定組管理員的,由於系統中的賬號可能會非常多,root 用戶可能沒有時間進行用戶的組調整,這時可以給用戶組指定組管理員,如果有用戶需要加入或退出某用戶組,可以由該組的組管理員替代 root 進行管理。但是這項功能目前很少使用,我們也很少設置組密碼
如果需要賦予某用戶調整某個用戶組的許可權,則可以使用 sudo 命令代替。

1.3.3. 組ID(GID)

就是群組的ID號,Linux通過GID來區分用戶組的,同用戶名一樣,這裡的組 GID 與/etc/passwd文件中第 4 個欄位的 GID 相對應,實際上,/etc/passwd 文件中使用 GID 對應的群組名,就是通過此文件對應得到的

1.3.4. 組中的用戶

此欄位列出每個群組包含的所有用戶,註意,如果該用戶組是這個用戶的初始組,則該用戶不會寫入這個欄位,也可以說,該欄位顯示的用戶都是這個用戶組的附加用戶
每個用戶都可以加入多個附加組,但是只能屬於一個初始組,一般情況下,用戶的初始組就是在建立用戶的同時建立的和用戶名相同的組

passwd、shadow、group之間的關係可以這樣理解,即先在 /etc/group 文件中查詢用戶組的 GID 和組名;然後在 /etc/passwd 文件中查找該 GID 是哪個用戶的初始組,同時提取這個用戶的用戶名和 UID;最後通過 UID 到 /etc/shadow 文件中提取和這個用戶相匹配的密碼

1.4. /etc/gshadow文件

查看該文件

文件中每行代表一個組用戶的密碼信息

組名:加密密碼:組管理員:組附加用戶列表

1.4.1. 組名

/etc/group文件中相對應

1.4.2. 組密碼

通常不設置密碼。因此欄位為空,但有時為!指的是該群沒有組密碼也沒有群組管理員

1.4.3. 組管理員

該文件的最大功能就是創建群組管理員,由於目前sudo之類的工具,群組管理員很少用了

1.4.4. 組中的附加用戶

/etc/group文件的附加組一樣

1.5. 創建用戶的預設設置文件/etc/login.defs

該文件在創建用戶時,對用戶的一些基本屬性做預設設置,該文件對root用戶無效,當此文件中的配置與 /etc/passwd/etc/shadow 文件中的用戶信息有衝突時,系統會以/etc/passwd /etc/shadow 為準

/etc/login.defs文件內容
設置項 含義
MAIL_DIR /var/spool/mail  創建用戶時,系統會在目錄 /var/spool/mail 中創建一個用戶郵箱,比如 lamp 用戶的郵箱是 /var/spool/mail/lamp。
PASS_MAX_DAYS 99999 密碼有效期,99999 是自 1970 年 1 月 1 日起密碼有效的天數,相當於 273 年,可理解為密碼始終有效。
PASS_MIN_DAYS 0 表示自上次修改密碼以來,最少隔多少天後用戶才能再次修改密碼,預設值是 0。
PASS_MIN_LEN 5 指定密碼的最小長度,預設不小於 5 位,但是現在用戶登錄時驗證已經被 PAM 模塊取代,所以這個選項並不生效。
PASS_WARN_AGE 7 指定在密碼到期前多少天,系統就開始通過用戶密碼即將到期,預設為 7 天。
UID_MIN 500  指定最小 UID 為 500,也就是說,添加用戶時,預設 UID 從 500 開始。註意,如果手工指定了一個用戶的 UID 是 550,那麼下一個創建的用戶的 UID 就會從 551 開始,哪怕 500~549 之間的 UID 沒有使用。
UID_MAX 60000 指定用戶最大的 UID 為 60000。
GID_MIN 500 指定最小 GID 為 500,也就是在添加組時,組的 GID 從 500 開始。
GID_MAX 60000 用戶 GID 最大為 60000。
CREATE_HOME yes 指定在創建用戶時,是否同時創建用戶主目錄,yes 表示創建,no 則不創建,預設是 yes。
UMASK 077 用戶主目錄的許可權預設設置為 077。
USERGROUPS_ENAB yes 指定刪除用戶的時候是否同時刪除用戶組,準備地說,這裡指的是刪除用戶的初始組,此項的預設值為 yes。
ENCRYPT_METHOD SHA512 指定用戶密碼採用的加密規則,預設採用 SHA512,這是新的密碼加密模式,原先的 Linux 只能用 DES 或 MD5 加密。

1.6. 添加新系統用戶:useradd

名稱
       useradd - 創建一個新用戶或更新預設新用戶信息
大綱
       useradd [選項] 登錄
       useradd -D
       useradd -D [選項]
描述
       When invoked without the -D option, the useradd command creates a new user
       account using the values specified on the command line plus the default
       values from the system. Depending on command line options, the useradd
       command will update system files and may also create the new user''s home
       directory and copy initial files.
       By default, a group will also be created for the new user (see -g, -N, -U,
       and USERGROUPS_ENAB).

命令常用選項

useradd命令常用選項
選項 含義
-u UID 手工指定用戶的 UID,註意 UID 的範圍(不要小於 500)。
-d 主目錄 手工指定用戶的主目錄。主目錄必須寫絕對路徑,而且如果需要手工指定主目錄,則一定要註意許可權;
-c 用戶說明 手工指定/etc/passwd文件中各用戶信息中第 5 個欄位的描述性內容,可隨意配置;
-g 組名 手工指定用戶的初始組。一般以和用戶名相同的組作為用戶的初始組,在創建用戶時會預設建立初始組。一旦手動指定,則系統將不會在創建此預設的初始組目錄。
-G 組名 指定用戶的附加組。我們把用戶加入其他組,一般都使用附加組;
-s shell 手工指定用戶的登錄 Shell,預設是 /bin/bash;
-e 曰期 指定用戶的失效曰期,格式為 "YYYY-MM-DD"。也就是 /etc/shadow 文件的第八個欄位;
-o 允許創建的用戶的 UID 相同。例如,執行 "useradd -u 0 -o usertest" 命令建立用戶 usertest,它的 UID 和 root 用戶的 UID 相同,都是 0;
-m 建立用戶時強制建立用戶的家目錄。在建立系統用戶時,該選項是預設的;
-r 創建系統用戶,也就是 UID 在 1~499 之間,供系統程式使用的用戶。由於系統用戶主要用於運行系統所需服務的許可權配置,因此系統用戶的創建預設不會創建主目錄。
系統已經幫我們規定了非常多的預設值,沒有特殊情況下,無需使用任何選項即可創建成功

這個命令幫助完成了以下操作

  1. /etc/passwd中創建一行與用戶相關的數據
  2. /etc/shadow文件中新增了一行與用戶相關的數據
  3. /etc/group 文件中創建一行與用戶名一模一樣的群組
  4. /etc/gshadow文件中新增一行與新增群組相關的密碼信息
  5. 預設創建用戶的主目錄和郵箱
  6. /etc/skel目錄中的配置文件複製到新用戶的主目錄中
[root@192 ~]# grep "oxo" /etc/passwd
oxo:x:1000:1000::/home/oxo:/bin/bash
[root@192 ~]# grep "oxo" /etc/shadow
oxo:!!:19463:0:99999:7:::
[root@192 ~]# grep "oxo" /etc/group
oxo:x:1000:
[root@192 ~]# grep "oxo" /etc/gshadow
oxo:!::
[root@192 ~]# ll /var/spool/mail/oxo 
-rw-rw----. 1 oxo mail 0 4月  16 09:10 /var/spool/mail/oxo
[root@192 ~]# ll -d /home/oxo/
drwx------. 2 oxo oxo 62 4月  16 09:10 /home/oxo/

還可以用useradd的各種選項親自定製要創建的用戶,這些預設值也是可以手動更改的,useradd 命令在添加用戶時參考的預設值文件主要有兩個,分別是 /etc/default/useradd/etc/login.defs

1.6.1. /etc/default/useradd文件

[root@192 ~]# cat /etc/default/useradd 
# useradd defaults file
GROUP=100
HOME=/home
INACTIVE=-1
EXPIRE=
SHELL=/bin/bash
SKEL=/etc/skel
CREATE_MAIL_SPOOL=yes
[root@192 ~]# useradd -D      ## -D 選項指的就是查看新建用戶的預設值
GROUP=100
HOME=/home
INACTIVE=-1
EXPIRE=
SHELL=/bin/bash
SKEL=/etc/skel
CREATE_MAIL_SPOOL=yes
/etc/default/useradd 文件內容
參數 含義
GR0UP=100 這個選項用於建立用戶的預設組,也就是說,在添加每個用戶時,用戶的初始組就是 GID 為 100 的這個用戶組。但 CentOS 並不是這樣的,而是在添加用戶時會自動建立和用戶名相同的組作為此用戶的初始組。也就是說這個選項並不會生效。

Linux 中預設用戶組有兩種機制:一種是私有用戶組機制,系統會創建一個和用戶名相同的用戶組作為用戶的初始組;另一種是公共用戶組機制,系統用 GID 是 100 的用戶組作為所有新建用戶的初始組。目前我們採用的是私有用戶組機制。
HOME=/home 指的是用戶主目錄的預設位置,所有新建用戶的主目錄預設都在 /home/下,剛剛新建的 lamp1 用戶的主目錄就為 /home/lamp1/。
INACTIVE=-1 指的是密碼過期後的寬限天數,也就是 /etc/shadow 文件的第七個欄位。這裡預設值是 -1,代表所有新建立的用戶密碼永遠不會失效。
EXPIRE= 表示密碼失效時間,也就是 /etc/shadow 文件的第八個欄位。預設值是空,代表所有新建用戶沒有失效時間,永久有效。
SHELL=/bin/bash 表示所有新建立的用戶預設 Shell 都是 /bin/bash。
SKEL=/etc/skel 在創建一個新用戶後,你會發現,該用戶主目錄並不是空目錄,而是有 .bash_profile、.bashrc 等文件,這些文件都是從 /etc/skel 目錄中自動複製過來的。因此,更改 /etc/skel 目錄下的內容就可以改變新建用戶預設主目錄中的配置文件信息。
CREATE_MAIL_SPOOL=yes 指的是給新建用戶建立郵箱,預設是創建。也就是說,對於所有的新建用戶,系統都會新建一個郵箱,放在 /var/spool/mail/ 目錄下,和用戶名相同。例如,lamp1 的郵箱位於 /var/spool/mail/lamp1。
useradd -D 命令可用選項
選項+參數含義
-b HOME設置所創建的主目錄所在的預設目錄,只需用目錄名替換 HOME 即可,例如 useradd -D -b /gargae。
-e EXPIRE設置密碼失效時間,EXPIRE 參數應使用 YYYY-MM-DD 格式,例如 useradd -D -e 2019-10-17。
-f INACTIVE設置密碼過期的寬限天數,例如 useradd -D -f 7。
-g GROUP設置新用戶所在的初始組,例如 useradd -D -g bear。
-s SHELL設置新用戶的預設 shell,SHELL 必須是完整路徑,例如 useradd -D -s /usr/bin/csh。

通過 /etc/default/useradd文件,僅能修改有關新用戶的部分預設值,有一些內容並沒有在這個文件中,例如修改用戶預設的 UID、GID,以及對用戶密碼的預設設置,對這些預設值的修改就需要在 /etc/login.defs文件中進行
useradd 命令創建用戶的過程是這樣的

  • 系統首先讀取 /etc/login.defs 和 /etc/default/useradd,根據這兩個配置文件中定義的規則添加用戶,也就是向/etc/passwd、/etc/group、/etc/shadow、/etc/gshadow文件中添加用戶數據
  • 接著系統會自動在 /etc/default/useradd 文件設定的目錄下建立用戶主目錄
  • 最後複製 /etc/skel目錄中的所有文件到此主目錄中
  • 由此,一個新的用戶就創建完成了

1.7. 修改用戶密碼:passwd命令

NAME
       passwd - update user''s authentication tokens
SYNOPSIS
       passwd  [-k]  [-l]  [-u [-f]] [-d] [-e] [-n mindays] [-x maxdays] [-w warn?
       days] [-i inactivedays] [-S] [--stdin] [username]
DESCRIPTION
       The passwd utility is used to update user''s authentication token(s).
       This task is achieved through calls  to  the  Linux-PAM  and  Libuser  API.
       Essentially, it initializes itself as a "passwd" service with Linux-PAM and
       utilizes configured password modules to  authenticate  and  then  update  a
       user''s password.
       A  simple entry in the global Linux-PAM configuration file for this service
       would be:
        #
        # passwd service entry that does strength checking of
        # a proposed password before updating it.
        #
        passwd password requisite pam_cracklib.so retry=3
        passwd password required pam_unix.so use_authtok
        #
       Note, other module types are not required for this application to  function
       correctly.

passwd 命令可用選項
選項+參數含義
-S查詢用戶密碼的狀態,也就是 /etc/shadow 文件中此用戶密碼的內容。僅 root 用戶可用
-l暫時鎖定用戶,該選項會在 /etc/shadow 文件中指定用戶的加密密碼串前添加 "!",使密碼失效。僅 root 用戶可用
-u解鎖用戶,和 -l 選項相對應,也是只能 root 用戶使用
--stdin可以將通過管道符輸出的數據作為用戶的密碼。主要在批量添加用戶時使用
-n  天數設置該用戶修改密碼後,多長時間不能再次修改密碼,也就是修改 /etc/shadow 文件中各行密碼的第 4 個欄位
-x   天數設置該用戶的密碼有效期,對應 /etc/shadow 文件中各行密碼的第 5 個欄位
-w  天數設置用戶密碼過期前的警告天數,對於 /etc/shadow 文件中各行密碼的第 6 個欄位
-i   日期設置用戶密碼失效日期,對應 /etc/shadow 文件中各行密碼的第 7 個欄位

很多Linux 發行版為了系統安裝,都使用了 PAM 模塊進行密碼的檢驗,設置密碼太短、與用戶名相同、是常見字元串等,都會被 PAM 模塊檢查出來,從而禁止用戶使用此類密碼,root不受影響

1.8. 修改用戶信息:usermod

名稱
       usermod - 修改一個用戶賬戶
大綱
       usermod [選項] 登錄
描述
       The usermod command modifies the system account files to reflect the
       changes that are specified on the command line.

利用 useradd 命令添加用戶,但如果不小心添錯用戶信息, 一個是使用 Vim 文本編輯器手動修改涉及用戶信息的相關文件(/etc/passwd、/etc/shadow、/etc/group、/etc/gshadow),另一個方法就是使用 usermod 命令,該命令專門用於修改用戶信息

usermod 命令可用選項
選項+參數含義
-c用戶說明修改用戶的說明信息,即修改 /etc/passwd 文件目標用戶信息的第 5 個欄位
-d 主目錄修改用戶的主目錄,即修改 /etc/passwd 文件中目標用戶信息的第 6 個欄位,需要註意的是,主目錄必須寫絕對路徑
-e 日期修改用戶的失效曰期,格式為 "YYYY-MM-DD",即修改 /etc/shadow 文件目標用戶密碼信息的第 8 個欄位
-g 組名修改用戶的初始組,即修改 /etc/passwd 文件目標用戶信息的第 4 個欄位(GID)
-u UID修改用戶的UID,即修改 /etc/passwd 文件目標用戶信息的第 3 個欄位(UID)
-G 組名修改用戶的附加組,其實就是把用戶加入其他用戶組,即修改 /etc/group 文件
-l 用戶名修改用戶名稱
-L臨時鎖定用戶(Lock)
-U:解鎖用戶(Unlock)和 -L 對應
-s shell修改用戶的登錄 Shell,預設是 /bin/bash

相比 useradd 命令,usermod 命令還多出了幾個選項,即 -L 和 -U,作用分別與 passwd 命令的 -l 和-u 相同,並不是所有的 Linux 發行版都包含這個命令,因此,使用前可以使用 man usermod 命令確定系統是否支持,此命令對用戶的臨時鎖定,同 passwd 命令一樣,都是在 /etc/passwd 文件目標用戶的加密密碼欄位前添加 "!",使密碼失效;反之,解鎖用戶就是將添加的 "!" 去掉

1.9. 修改用戶密碼狀態:chage

除了使用passwd -S命令查看用戶的密碼信息外,還可以使用chage命令,它可以顯示更加詳細的用戶密碼信息,和passwd一樣提供了修改用戶密碼信息的功能

名稱
       chage - 更改用戶密碼過期信息
大綱
       chage [選項] 登錄
描述
       The chage command changes the number of days between password changes and
       the date of the last password change. This information is used by the
       system to determine when a user must change their password.
chage 命令可用選項
選項+參數含義
-l列出用戶的詳細密碼狀態
-d 日期修改 /etc/shadow 文件中指定用戶密碼信息的第 3 個欄位,也就是最後一次修改密碼的日期,格式為 YYYY-MM-DD
-m 天數修改密碼最短保留的天數,也就是 /etc/shadow 文件中的第 4 個欄位
-M 天數修改密碼的有效期,也就是 /etc/shadow 文件中的第 5 個欄位
-W 天數修改密碼到期前的警告天數,也就是 /etc/shadow 文件中的第 6 個欄位
-i 天數修改密碼過期後的寬限天數,也就是 /etc/shadow 文件中的第 7 個欄位
-E 日期修改賬號失效日期,格式為 YYYY-MM-DD,也就是 /etc/shadow 文件中的第 8 個欄位

chage 命令除了修改密碼信息的功能外,還可以強制用戶在第一次登錄後,必須先修改密碼,並利用新密碼重新登陸系統,此用戶才能正常使用,chage 的這個功能常和 passwd 批量初始化用戶密碼功能合用

1.10. 刪除用戶:userdel

名稱
       userdel - 刪除用戶賬戶和相關文件
大綱
       userdel [選項] 登錄
描述
       The userdel command modifies the system account files, deleting all entries
       that refer to the user name LOGIN. The named user must exist.
選項
       -r, --remove
           用戶主目錄中的文件將隨用戶主目錄和用戶郵箱一起刪除。在其它文件系統中的文件
必須手動搜索並刪除。
		## 在刪除用戶的同時如果不刪除用戶的家目錄,那麼家目錄就會變成沒有屬主和屬組的目錄,也就是垃圾文件

用戶的相關數據包含如下幾項

  • 用戶基本信息:存儲在 /etc/passwd 文件中
  • 用戶密碼信息:存儲在 /etc/shadow 文件中
  • 用戶群組基本信息:存儲在 /etc/group 文件中
  • 用戶群組信息信息:存儲在 /etc/gshadow 文件中
  • 用戶個人文件:主目錄預設位於 /home/用戶名,郵箱位於 /var/spool/mail/用戶名

userdel 命令的作用就是從以上文件中,刪除與指定用戶有關的數據信息,如果我們想要從系統中徹底的刪除某個用戶,最好在使用 userdel 命令之前,先通過 find -user 用戶名 命令查出系統中屬於該用戶的文件,然後在加以刪除

1.11. 查看用戶的UID和GID

id命令可以查詢用戶的UID和GID以及附加組的信息

NAME
       id - print real and effective user and group IDs
SYNOPSIS
       id [OPTION]... [USER]

1.12. linux用戶間的切換su和su -

su 是最簡單的用戶切換命令,通過該命令可以實現任何身份的切換,包括從普通用戶切換為 root 用戶、從 root 用戶切換為普通用戶以及普通用戶之間的切換,普通用戶之間切換以及普通用戶切換至 root 用戶,都需要知曉對方的密碼,只有正確輸入密碼,才能實現切換;從 root 用戶切換至其他用戶,無需知曉對方密碼,直接可切換成功

NAME
       su - run a command with substitute user and group ID
SYNOPSIS
       su [options...] [-] [user [args...]]
DESCRIPTION
       su allows to run commands with substitute user and group ID.
       When  called  without arguments su defaults to running an interactive shell
       as root.
       For backward compatibility su defaults to not change the current  directory
       and  to  only  set  the environment variables HOME and SHELL (plus USER and
       LOGNAME if the target user is not root).  It is recommended to  always  use
       the  --login  option (instead it''s shortcut -) to avoid side effects caused
       by mixing environments.
       This version of su uses PAM for authentication, account and session manage‐
       ment.  Some configuration options found in other su implementations such as
       e.g. support of a wheel group have to be configured via PAM.

su 命令可用選項
選項+參數含義
-當前用戶不僅切換為指定用戶的身份,同時所用的工作環境也切換為此用戶的環境(包括 PATH 變數、MAIL 變數等),使用 - 選項可省略用戶名,預設會切換為 root 用戶
-l同 - 的使用類似,也就是在切換用戶身份的同時,完整切換工作環境,但後面需要添加欲切換的使用者賬號
-p表示切換為指定用戶的身份,但不改變當前的工作環境(不使用切換用戶的配置文件)
-m和 -p 一樣
-c 命令僅切換用戶執行一次命令,執行後自動切換回來,該選項後通常會帶有要執行的命令

1.12.1. su和su -的區別

註意,使用su命令時,有-和沒有-是完全不同的,-選項表示在切換用戶身份的同時,連當前使用的環境變數也切換成指定用戶的,環境變數是用來定義操作系統環境的,因此如果系統環境沒有隨用戶身份切換,很多命令無法正確執行

普通用戶通過su切換root用戶
  • 系統中的 $PATH環境變數依然是 lamp 的(而不是 root 的)
  • 當前工作環境中,並不包含/sbin、/usr/sbin等超級用戶命令的保存路徑,這就導致很多管理員命令根本無法使用
  • 當 root 用戶接受郵件時,會發現收到的是 lamp 用戶的郵件,因為環境變數 $MAIL也沒有切換

1.13. whoami和who am i

whoami 命令和 who am i 命令是不同的 2 個命令,前者用來列印當前執行操作的用戶名,後者則用來列印登陸當前 Linux 系統的用戶名

[oxo@192 ~]$ whoami
oxo
[oxo@192 ~]$ who am i
oxo      pts/0        2023-04-17 01:39 (192.168.88.1)
[oxo@192 ~]$ su root
密碼:
[root@192 oxo]# whoami
root
[root@192 oxo]# who am i
oxo      pts/0        2023-04-17 01:39 (192.168.88.1)

在未切換用戶身份之前,whoami 和 who am i 命令的輸出是一樣的

使用 su 命令切換用戶身份後
  • 使用 whoami 命令列印的是切換後的用戶名
  • 而 who am i 命令列印的仍舊是登陸系統時所用的用戶名
  • 執行 whoami 命令,等同於執行 id -un 命令
  • 執行 who am i 命令,等同於執行 who -m 命令
    使用 su 或者 sudo 命令切換用戶身份,騙得過 whoami,但騙不過 who am i
背後的運行機制,是實際用戶(UID)和有效用戶(EUID,即 Effective UID
  • 實際用戶指的是登陸 Linux 系統時所使用的用戶,因此在整個登陸會話過程中,實際用戶是不會發生變化的
  • 有效用戶,指的是當前執行操作的用戶,也就是說真正決定許可權高低的用戶,這個是能夠利用 su 或者 sudo 命令進行任意切換的
    一般情況下,實際用戶和有效用戶是相同的,如果出現用戶身份切換的情況,它們會出現差異。需要註意的是,實際用戶和有效用戶出現差異,切換用戶並不是唯一的觸發機制
whoami 和 who am i通常應用在哪些場景中
  • 對那些經常需要切換用戶的系統管理員來說,經常需要明確當前使用的是什麼身份
  • 另外,對於某些 shell 腳本,或者需要特別的用戶才能執行,這時就需要利用 whoami 命令來搞清楚執行它的用戶是誰
  • 還有一些 shell 腳本,一定要某個特別用戶才能執行,即便使用 su 或者 sudo 命令切換到此身份都不行,此時就需要利用 who am i 來確認

1.14. 添加用戶組:groupadd

名稱
       groupadd - 創建一個新組
大綱
       groupadd [選項] group
描述
       The groupadd command creates a new group account using the values specified
       on the command line plus the default values from the system. The new group
       will be entered into the system files as needed.
選項
		-r, --system
           創建一個系統組。
	    -g, --gid GID
           The numerical value of the group''s ID. This value must be unique,
           unless the -o option is used. The value must be non-negative. The
           default is to use the smallest ID value greater than or equal to
           GID_MIN and greater than every other group.

1.15. 修改用戶組:groupmod

名稱
       groupmod - modify a group definition on the system
大綱
       groupmod [選項] GROUP
描述
       The groupmod command modifies the definition of the specified GROUP by
       modifying the appropriate entry in the group database.
選項
		-g, --gid GID
           The group ID of the given GROUP will be changed to GID.
           The value of GID must be a non-negative decimal integer. This value
           must be unique, unless the -o option is used.
           Users who use the group as primary group will be updated to keep the
           group as their primary group.
           Any files that have the old group ID and must continue to belong to
           GROUP, must have their group ID changed manually.
           No checks will be performed with regard to the GID_MIN, GID_MAX,
           SYS_GID_MIN, or SYS_GID_MAX from /etc/login.defs.
       -n, --new-name NEW_GROUP
           The name of the group will be changed from GROUP to NEW_GROUP name.

用戶名不要隨意修改,組名和 GID 也不要隨意修改,因為非常容易導致管理員邏輯混亂
如果非要修改用戶名或組名,則建議大家先刪除舊的,再建立新的

1.16. 刪除用戶組:groupdel

名稱
       groupdel - 刪除一個組
大綱
       groupdel [選項] GROUP
描述
       The groupdel command modifies the system account files, deleting all
       entries that refer to GROUP. The named group must exist.

註意,不能使用 groupdel 命令隨意刪除群組

  • 此命令僅適用於刪除那些 "不是任何用戶初始組" 的群組
  • 如果有群組還是某用戶的初始群組,則無法使用 groupdel 命令成功刪除

1.17. 把用戶添加進組或從組中刪除:gpasswd

名稱
       gpasswd - administer /etc/group and /etc/gshadow
大綱
       gpasswd [選項] group
描述
       The gpasswd command is used to administer /etc/group, and /etc/gshadow.
       Every group can have administrators, members and a password.
       System administrators can use the -A option to define group
       administrator(s) and the -M option to define members. They have all rights
       of group administrators and members.
       gpasswd called by a group administrator with a group name only prompts for
       the new password of the group.
       If a password is set the members can still use newgrp(1) without a
       password, and non-members must supply the password.
   請註意組密碼
       Group passwords are an inherent security problem since more than one person
       is permitted to know the password. However, groups are a useful tool for
       permitting co-operation between different users.
gpasswd命令各選項及其功能
選項功能
 選項為空時,表示給群組設置密碼,僅 root 用戶可用。
-A user1,... 將群組的控制權交給 user1,... 等用戶管理,也就是說,設置 user1,... 等用戶為群組的管理員,僅 root 用戶可用。
-M user1,... 將 user1,... 加入到此群組中,僅 root 用戶可用。
-r 移除群組的密碼,僅 root 用戶可用。
-R 讓群組的密碼失效,僅 root 用戶可用。
-a user 將 user 用戶加入到群組中。
-d user 將 user 用戶從群組中移除。

除 root 可以管理群組外,可設置多個普通用戶作為群組的管理員,但也只能做“將用戶加入群組”和“將用戶移出群組”的操作
使用 usermod -G 命令也可以將用戶加入群組,使用此命令將用戶加入到新的群組後,該用戶之前加入的那些群組都將被清空,將用戶加入或移出群組,最好使用 gpasswd 命令

1.18. 切換用戶的有效組:newgrp

每個用戶可以屬於一個初始組(用戶是這個組的初始用戶),也可以屬於多個附加組(用戶是這個組的附加用戶)

1.18.1. 用戶可以屬於這麼多用戶組,那麼用戶在創建文件後

  • 初始用戶組的組身份生效,因為初始組是用戶一旦登陸就獲得的組身份
  • 用戶的有效組預設是初始組,因此所創建文件的屬組是用戶的初始組
    那麼用戶屬於多個用戶組,如果想要改變用戶的初始組,使用命令 newgrp 就可以從用戶的附加組中選擇一個群組,作為用戶新的初始組
名稱
       newgrp - 登錄到一個新組
大綱
       newgrp [-] [group]
描述
       The newgrp command is used to change the current group ID during a login
       session. If the optional - flag is given, the user''s environment will be
       reinitialized as though the user had logged in, otherwise the current
       environment, including current working directory, remains unchanged.
       newgrp changes the current real group ID to the named group, or to the
       default group listed in /etc/passwd if no group name is given.  newgrp also
       tries to add the group to the user groupset. If not root, the user will be
       prompted for a password if she does not have a password (in /etc/shadow if
       this user has an entry in the shadowed password file, or in /etc/passwd
       otherwise) and the group does, or if the user is not listed as a member and
       the group has a password. The user will be denied access if the group
       password is empty and the user is not listed as a member.
       If there is an entry for this group in /etc/gshadow, then the list of
       members and the password of this group will be taken from this file,
       otherwise, the entry in /etc/group is considered.
配置文件
       The following configuration variables in /etc/login.defs change the
       behavior of this tool:
       SYSLOG_SG_ENAB (boolean)
           Enable "syslog" logging of sg activity.
文件
       /etc/passwd
           用戶賬戶信息。
       /etc/shadow
           安全用戶賬戶信息。
       /etc/group
           組賬戶信息。
       /etc/gshadow
           安全組賬戶信息。
參見
       id(1), login(1), su(1), sg(1), gpasswd(1), group(5), gshadow(5).

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

-Advertisement-
Play Games
更多相關文章
  • Gin 環境:https://goproxy.cn,driect github.com/gin-gonic/gin 介紹 Gin 是一個用 Go (Golang) 編寫的 Web 框架。 它具有類似 martini 的 API,性能要好得多,多虧了 httprouter,速度提高了 40 倍。 如果 ...
  • 前言 Disruptor的高性能,是多種技術結合以及本身架構的結果。本文主要講源碼,涉及到的相關知識點需要讀者自行去瞭解,以下列出: 鎖和CAS 偽共用和緩存行 volatile和記憶體屏障 原理 此節結合demo來看更容易理解:傳送門 下圖來自官方文檔 官方原圖有點亂,我翻譯一下 在講原理前,先瞭解 ...
  • 作者:馬佩 鏈接:https://juejin.cn/post/7146016771936354312 場景 當我們業務資料庫表中的數據越來越多,如果你也和我遇到了以下類似場景,那讓我們一起來解決這個問題 數據的插入,查詢時長較長 後續業務需求的擴展 在表中新增欄位 影響較大 表中的數據並不是所有的 ...
  • 大家好,我是陶朱公Boy。(一個認真生活總想超越自己的程式員) 一線互聯網Java技術專家,有超過8年+後端開發、架構經驗。公眾號:「陶朱公Boy」歡迎大家關註! 星球簡介 一個幫你學編程、做項目、找工作少走彎路的交流圈,進步從此開始! 加入後你可以: 1.獲取陶朱公原創編程學習路線、原創編程知識庫 ...
  • 1. 示例 首先,定義一個介面: public interface Staff { void work(); } 然後,新增一個類並實現上面的介面: public class Coder implements Staff { @Override public void work() { System ...
  • 隨著技術的發展,ASP.NET Core MVC也推出了好長時間,經過不斷的版本更新迭代,已經越來越完善,本系列文章主要講解ASP.NET Core MVC開發B/S系統過程中所涉及到的相關內容,適用於初學者,在校畢業生,或其他想從事ASP.NET Core MVC 系統開發的人員。 經過前幾篇文章... ...
  • 寫在前面 本文將會介紹WPF如何實現前後端數據綁定和在進行數據綁定時常用的方法和類以及對於DataGrid、ListView這樣的控制項重寫數據模板後控制項如何進行數據綁定。 本文主要針對於數據綁定的基礎實現進行介紹,通過此博文你將會有能力編寫一個MVVM設計模式的C#、WPF項目。如果您是C#及WPF ...
  • .NET 實現JWT登錄認證 在ASP.NET Core應用程式中,使用JWT進行身份驗證和授權已成為一種流行的方式。JWT是一種安全的方式,用於在客戶端和伺服器之間傳輸用戶信息。 添加NuGet包 首先,我們需要添加一些NuGet包來支持JWT身份驗證。在您的ASP.NET Core項目中,打開S ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...