『學了就忘』Linux使用者管理 — 50、使用者管理相關檔案詳細說明

繁華似錦Fighting 發表於 2021-11-25
Linux

提示:嚴格的使用者許可權劃分,不是為了防範外部人員的攻擊,主要是防範內部人員的操作。
越是重要的資料,就要做嚴格的使用者許可權劃分。

1、使用者資訊檔案

使用者資訊檔案為/etc/passwd,該檔案中每一行就是一個使用者。

如下圖所示:

image

內容格式root:x:0:0:root:/root:/bin/bash

每一行是7列,用:隔開。

下面說明一下每列的內容:

第一列:使用者名稱。

第二列:密碼位。這個位置不是真正的密碼,是一個標識位,僅僅只代表這個使用者有密碼。真正的密碼在/etc/shadow檔案中。

  • 為什麼要把密碼分開到另外一個檔案中?
    你檢視一下兩個檔案的許可權就可以知道了,如下圖所示:
    image
    /etc/passwd檔案是誰都可以檢視。
    /etc/shadow只有root使用者可以檢視。
    這樣更加安全。
  • 這個位置可以省略掉嗎?
    這個位置有標識,系統才去/etc/shadow檔案中去驗證密碼。如果沒有標識,不會驗證,所以不能刪除。

第三列:使用者ID。

  • 0:超級使用者UID,如果使用者UID為0,代表這個賬號是管理員賬號。
    Linux中如何把普通使用者升級成為管理員呢?
    就是把其他使用者的UID修改為0就可以了,這點和Windows是不同的。
    不過不建議建立多個管理員賬號。
  • 1-499 : 系統使用者(偽使用者)UID,這些UID賬號是系統保留給系統使用者的UID。
    也就是說UID是1-499範圍內的使用者是不能登入系統的,而是用來執行系統或服務的。其中1-99是系統保留的賬號,系統自動建立。100-499是預留給使用者建立系統賬號的。
    nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin除外。
  • 500-65535 : 普通使用者UID,建立的普通使用者UID從500開始,最大到65535。這些使用者足夠使用了,但是如果不夠也不用害怕,2.6.x核心以後的Linux系統使用者UID,已經可以支援2^32這麼多了。

提示:如何把普通使用者變成超級使用者:把使用者UID改為0

第四列:組ID。

  • GID新增使用者時,如果不指定使用者所屬的初始組,那麼會建立和使用者名稱相同的一個組。
  • Linux系統的使用者組分為:初始組和附加組。

第五列:使用者說明。如果新建立的使用者,你沒有填寫說明,這個位置是空的。

第六列:使用者家目錄位置。

第七列:登入shell,/bin/bash。(使用者登陸後執行的shell)

2、/etc/shadow影子檔案

/etc/shadow檔案內容:

image

內容格式:root:$6$uUXT6exYbBm6a7BC$kUSor7FFw48xOwuas8A2cI9hNKN7Izaz1Yd7h8a.otiEL/1LirTD6qDEeFNLgM4bpOswbAm3dh/WoPCXH9lg00:18251:0:99999:7:::

每一行是9列,用:隔開。下面說明一下每列的內容。

第一列:使用者名稱。

第二列:加密密碼。

  • 我們可以在密碼前,人為的加入!*改變加密值讓密碼暫時失效,使這個使用者無法登陸,達到暫時禁止使用者登入的效果。
  • 注意所有偽使用者的密碼都是!!*,代表沒有密碼,是不能登入的。
  • 當然我新建立的使用者如果不設定密碼,它的密碼項也是!!,代表這個使用者沒有密碼,不能登入。
    Red Hat 6開始,密碼的加密方式為SHA512,Red Hat 6以前用的密碼的加密方式為MD5

第三列:密碼最近更改時間,1970年1月1日作為標準時間時間截轉日期。
時間顯示為時間戳的形式,不是重點,瞭解即可。

  • 時間戳轉日期
    [[email protected] ~]# date -d "1970-01-01 "15775 days"
    2013年03月11日星期一00:00:00 CST
    
  • 日期轉時間戳
    [[email protected] ~]# echo $(($(date-date="2013/03/11"+%s)/86400+1))
    15775
    
    這個15775表示在1970年1月1日之後的第15775天修改的密碼,單位是天。

第四列:兩次密碼的修改間隔時間(和第3欄位相比)。

  • 預設是0。也就是說當前時間戳是100,第四列數值為10,也就是下一次修改的時間最少也要到時間戳為110的時候才能修改。
  • 該欄位不建議修改。

第五例:密碼有效期(和第3欄位相比)。

第六列:密碼修改到期前的警告天數(和第5欄位相比)。

  • 就是密碼到期前多少天開始,該使用者每一次登陸,系統都給你提示你的密碼快到期了。

第七列:密碼過期後的寬限天數(和第5欄位相比)。

  • 預設值沒有寫,其值就是-1。其意思表示使用者是永不過期的,即使密碼有效期過了,使用者的密碼也不會失效,還可以正常使用。
  • 如果需要使用者密碼到期之後不能使用,把該位數值改寫成0,或者改成正數,寬限幾天。

第八列:密碼失效時間。

  • 這裡同樣要寫時間戳,也就是用1970年1月1日進行時間換算。如果超過了失效時間,就算密碼沒有過期,使用者也失效無法使用。(就像是買會員,到期終止了。)
  • 如果使用者的密碼失效了,會自動的密碼位最前端加上一個!,來進行使用者登陸失效。

第九列:保留。沒有意義,保留位。

3、/etc/group 組資訊檔案

/etc/group內容格式:root:x:0:root

下面說明一下每列的內容:

第一列:組名。

第二列:組密碼位

  • 這個也是一個佔位標識,具體的密碼在/etc/gshadow檔案中。
  • 並不建議給組設定密碼。
  • 組密碼是用來做什麼的?
    如果我給使用者組設定了組管理員,並給該使用者組設定了組密碼,組密碼就儲存在這個檔案當中。組管理員就可以利用這個密碼管理這個使用者組了。
    (也就是說,如果需要向一個組新增使用者,預設是隻有root使用者可以新增。而root使用者給一個組建立了一個密碼,然後給組中的一個使用者,該使用者就相當於這個組的一個小組長,這個小組長就有許可權往這個組裡新增使用者,或者刪除使用者。)
  • 為什麼不建議設定組密碼?
    因為這樣設定會有一定風險,建議還是root使用者來幹這些事比較安全。

第三列:GID,也就是組ID。

第四列:此組中支援的其他使用者(附加使用者),附加組是此組的使用者。自己屬於初始組,不顯示在此列中。

說明一個問題。

初始組和附加組區別

  • 初始組:每個使用者初始組只能且必須有一個,沒有初始組這個使用者是不能存在的,一般都是和使用者名稱同名的。
  • 附加組:每個使用者可以屬於多個或者沒有附加組。要把一些使用者加入組,都是加入附加組。

如果需要把使用者改到其他組裡,不建議修改初始組,建議修改附加組。

4、組密碼檔案

組密碼檔案/etc/gshadow檔案,具體看上邊3中介紹。

5、使用者的家目錄

Linux系統中,每新增一個使用者,都會在/home/目錄下,生成一個和使用者名稱相同的目錄,該目錄作為該使用者的家目錄。

如下示例:

[[email protected] ~]# ls /home/
user1

6、使用者郵箱目錄

這個郵箱在/var/spool/mail目錄當中,例如:user1使用者的郵箱就是/var/spool/mail/user1檔案.

7、使用者模板目錄

/etc/skel/目錄中,我們進入到uesr1的家目錄中,這個目錄看起來是空的。

[[email protected] ~]# cd /home/user1/
[[email protected] user1]# ls
[[email protected] user1]#

其實uesr1的家目錄中是有檔案的,但都是隱藏檔案。

[[email protected] user1] # ls -a
. .. .bash_history .bash_logout .bash_profile .bashrc .gnome2

那這些隱藏檔案是哪來的?

使用者的家目錄,是執行新增使用者useradd user2命令之後自動建立的。所以說這些隱藏檔案是自動生成的,這些自動生成的模板,就是在/etc/skel/目錄中。

我們進入/etc/skel/目錄中檢視。

[[email protected] user1]# cd /etc/skel/
[[email protected] skel]# ls
[[email protected] skel]# ls -a 
. ..  .bash_logout .bash_profile .bashrc .gnome2

和使用者家目錄中的隱藏檔案是一樣的。.bash_history檔案是在使用者執行命令之後,自動生成的檔案。

所以這個目錄一般不用我們動。

那什麼時候需要我們對/etc/skel/目錄進行改動呢?

比如說我想給每一個新建立的使用者,提供一個警告資訊,或這些伺服器使用規則的文件。我就可以在/etc/skel/目錄下建立一個文件。

如下:

[[email protected] skel] # vi warining.txt
# 開始編輯內容
# ...
# ...

這樣,在之後每一個新建立使用者的家目錄中,都會有一個warining.txt檔案出現。

提示:之前已經存在的使用者的家目錄中不會出現。

總結:

新增一個使用者,實際上是修改了上邊7個檔案(使用者模板檔案除外)。同理,把上述幾個位置的檔案進行刪除,也可以完全的刪除一個使用者。