『學了就忘』Linux用戶管理 — 50、用戶管理相關文件詳細說明

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

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日作為標準時間時間截轉日期。
時間顯示為時間戳的形式,不是重點,了解即可。

  • 時間戳轉日期
    [root@localhost ~]# date -d "1970-01-01 "15775 days"
    2013年03月11日星期一00:00:00 CST
    
  • 日期轉時間戳
    [root@localhost ~]# 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/目錄下,生成一個和用戶名相同的目錄,該目錄作為該用戶的家目錄。

如下示例:

[root@localhost ~]# ls /home/
user1

6、用戶郵箱目錄

這個郵箱在/var/spool/mail目錄當中,例如:user1用戶的郵箱就是/var/spool/mail/user1文件.

7、用戶模板目錄

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

[root@localhost ~]# cd /home/user1/
[root@localhost user1]# ls
[root@localhost user1]#

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

[root@localhost user1] # ls -a
. .. .bash_history .bash_logout .bash_profile .bashrc .gnome2

那這些隱藏文件是哪來的?

用戶的家目錄,是執行添加用戶useradd user2命令之後自動建立的。所以說這些隱藏文件是自動生成的,這些自動生成的模板,就是在/etc/skel/目錄中。

我們進入/etc/skel/目錄中查看。

[root@localhost user1]# cd /etc/skel/
[root@localhost skel]# ls
[root@localhost skel]# ls -a 
. ..  .bash_logout .bash_profile .bashrc .gnome2

和用戶家目錄中的隱藏文件是一樣的。.bash_history文件是在用戶執行命令之後,自動生成的文件。

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

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

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

如下:

[root@localhost skel] # vi warining.txt
# 開始編輯內容
# ...
# ...

這樣,在之後每一個新創建用戶的家目錄中,都會有一個warining.txt文件出現。

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

總結:

添加一個用戶,實際上是修改了上邊7個文件(用戶模板文件除外)。同理,把上述幾個位置的文件進行刪除,也可以完全的刪除一個用戶。