提示:嚴格的使用者許可權劃分,不是為了防範外部人員的攻擊,主要是防範內部人員的操作。
越是重要的資料,就要做嚴格的使用者許可權劃分。
1、使用者資訊檔案
使用者資訊檔案為/etc/passwd
,該檔案中每一行就是一個使用者。
如下圖所示:
內容格式:root:x:0:0:root:/root:/bin/bash
每一行是7列,用:
隔開。
下面說明一下每列的內容:
第一列:使用者名稱。
第二列:密碼位。這個位置不是真正的密碼,是一個標識位,僅僅只代表這個使用者有密碼。真正的密碼在/etc/shadow
檔案中。
- 為什麼要把密碼分開到另外一個檔案中?
你檢視一下兩個檔案的許可權就可以知道了,如下圖所示:
/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
檔案內容:
內容格式: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個檔案(使用者模板檔案除外)。同理,把上述幾個位置的檔案進行刪除,也可以完全的刪除一個使用者。