一. 概述 linux安全系統的核心是用戶賬戶。 創建用戶時會分配用戶ID(UID)。 UID是唯一的,但在登錄系統時不是用UID,而是用登錄名。在講文件許可權之之前,先瞭解下linux是怎樣處理用戶賬戶的。以及用戶賬戶需要的文件和工具,這樣處理文件許可權問題時,就知道如何使用它們了。 1.1 /etc ...
一. 概述
linux安全系統的核心是用戶賬戶。 創建用戶時會分配用戶ID(UID)。 UID是唯一的,但在登錄系統時不是用UID,而是用登錄名。在講文件許可權之之前,先瞭解下linux是怎樣處理用戶賬戶的。以及用戶賬戶需要的文件和工具,這樣處理文件許可權問題時,就知道如何使用它們了。
1.1 /etc/passwd用戶文件
/etc/passwd 是用來將用戶的登錄名,匹配到對應的UID上。它包含了一些與用戶有關的信息。下麵截取二個片斷。如下圖所示:
root用戶賬戶是linux系統管理員,固定分配給它的UID是0。 上面linux系統會為各種各樣的功能創建不同的用戶賬戶,而這些賬戶並不是真正的用戶。它們叫作系統賬戶,是系統上運行各種服務進程訪問資源用的特殊賬戶。root用戶UID是0,mysql用戶的UID是998。如下圖所示:
linux系統賬戶預留了500以下的UID值。有些服務甚至要用特定的UID才能正常工作。在/etc/passwd文件中冒號分隔的欄位包含以下信息:
mysql:x:998:1000::/home/mysql:/bin/bash
登錄用戶名 |
例如:mysql |
用戶密碼 |
x (密碼欄位都被設置成了x) |
用戶UID |
998 |
用戶的組ID (GID) |
I000 |
用戶的文本描述 |
mysql 用戶描述為空 |
用戶的HOME目錄位置 |
/home/mysql |
用戶的預設shell |
/bin/bash |
1.2 /etc/shadow 用戶文件
/etc/shadow文件對linux系統密碼管理提供了更多的控制。只有root用戶才能訪問/etc/shadow文件。比起/etc/passwd安全許多,文件內容如下圖所示:
比如讓mysql 用戶來查看該文件,是沒有這個許可權的。
下是copy出來的root用戶賬戶信息:
root:$6$BSeXl2xuiNYlDwkO$X4dfd8A97XHRO9S.9KNqL/bRX4B33tIAzOu1dwiPVLDS42YqwaY8JrwYAExGPuvc42yhnMmO28VRMP.qVjYDY1::0:99999:7:::
每條記錄都有9個欄位,字元串以冒號分隔的欄位信息如下:第一個欄位:登錄名。 第二個欄位:加密後的密碼。其它欄位以後在解讀。使用/etc/shadow,可以控制用戶多久更改一次密碼,以及什麼時候禁用該用戶賬戶(在其它欄位上設置這些功能)。
二. 用戶工具管理
2.1 useradd 模板介紹
在linux系統中添加新用戶的工具是useradd, 可以一次性創建新用戶賬戶及設置用戶HOME目錄結構。useradd命令使用系統的預設值以及命令行參數來設置用戶賬戶。系統預設值被設置在/etc/default/useradd文件中,可以定位到/etc/default/useradd文件,修改預設值。使用useradd -D 選項查看這些預設值。如下圖所示:
如果用戶不指定具體的值,使用useradd添加用戶時就會使用這些預設值。預設值解釋如下:
GROUP=100 |
新用戶會添加到GID為100的公共組中 |
HOME=/home |
新用戶的HOME目錄將位於/home/loginname下 |
INACTIVE=-1 |
新用戶密碼在過期後不會被禁用 |
EXPIRE= |
新用戶未設置過期日期 |
SHELL=/bin/bash |
新用戶將bash shell作為預設shell |
SKEL=/etc/skel |
系統會將/etc/skel目錄下的內容複製到用戶的HOME目錄下 |
CREATE_MAIL_SPOOL=yes |
系統為用戶賬戶在mail目錄下創建一個用於接收郵件的文件 |
SKEL參數是指:useradd命令允許管理員創建一份預設的HOME目錄配置,然後把它作為創建新用戶HOME目錄的模板。這樣就能自動在每個新用戶的HOME目錄里放置預設的系統文件(上篇講到的系統環境變數位置)。新用戶HOME目錄下的系統文件模板。如下圖所示:
在上篇中,知道了.bashrc, .bash_profile這些文件都是bash shell的標準啟動文件。系統會自動將這些預設文件複製到你創建的每個用戶HOME目錄下。我的linux系統在很久前創建了一個mysql用戶,下麵去/home/mysql下檢查有沒有這些標準啟動文件。
上圖告訴我們,mysql目錄不存在,這是因為創建用戶預設情況下,useradd命令不會創建HOME目錄,需要使用useradd -m 命令來創建HOME目錄。我推測當mysql用戶沒有這些bash shell標準啟動文件時,會去繼承root用戶下的標識啟動文件。
2.2 useradd -m
上面mysql用戶沒有指定HOME目錄,下麵是創建一個新test用戶,並使用參數m來創建HOME目錄,並將/etc/skel目錄中的文件複製了過來,/home/test 下麵就有了標準啟動文件。如下圖所示:
再次查看passwd用戶列表,多出來一個test用戶,創建的這個test除了指定了HOME目錄,其它參數都是使用的預設值(沒有指定組,密碼,過期時間)。如下圖所示:
下麵是切換到test用戶下,如下圖所示:
2.3 useradd 命令參數
要想在創建用戶時改變預設值或預設行為,可以使用命令參數,下麵列出一些常用參數
參數 |
描述 |
-c comment |
給新用戶添加備註 |
-d home_dir |
為主目錄指定一個名字(如果不想用登錄名作為主目錄名) |
-e expire_date |
用YYYY-MM-DD格式指定一個賬戶過期日期 |
-f inactive_days |
指定這個賬戶密碼過期後多少天,這個賬戶被禁用;0表示密碼一過期就立即禁用, 1表示禁用這個功能 |
-g initial_group |
指定用戶登錄組GID |
-m |
創建用戶HOME目錄 |
-r |
創建系統賬戶 |
-p passwd |
指定預設密碼 |
當創建用戶賬戶時,如果總需要修改某個值的話,最好還是修改一下系統的預設值,修改(useradd模板),也可以使用"useradd -D 預設參數"來修改模板,這裡就不再介紹useradd預設值參數。