1. 程式人生 > >Linux程式設計 14 檔案許可權(使用者列表passwd,使用者控制shadow,useradd模板與useradd命令引數介紹)

Linux程式設計 14 檔案許可權(使用者列表passwd,使用者控制shadow,useradd模板與useradd命令引數介紹)

一. 概述

  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預設值引數。