1. 程式人生 > >淺談Linux使用者許可權管理之一(使用者與組的概念)

淺談Linux使用者許可權管理之一(使用者與組的概念)

一.使用者與組的概念
1.理解linux多使用者,多工的特性
Linux是一個真實的、完整的多使用者多工作業系統,多使用者多工就是可以在系統上建立多個使用者,而多個使用者可以在同一時間內登入同一個系統執行各自不同的任務,而互不影響,例如某臺linux伺服器上有4個使用者,分別是root、www、ftp和mysql,在同一時間內,root使用者可能在檢視系統日誌,管理維護系統,www使用者可能在修改自己的網頁程式,ftp使用者可能在上傳軟體到伺服器,mysql使用者可能在執行自己的SQL查詢,每個使用者互不干擾,有條不紊的進行著自己的工作,而每個使用者之間不能越權訪問,比如www使用者不能執行mysql使用者的SQL查詢操作,ftp使用者也不能修改www使用者的網頁程式,因此可知,不同使用者具有不同的許可權,每個使用者是在許可權允許的範圍內完成不同的任務,linux正是通過這種許可權的劃分與管理,實現了多使用者多工的執行機制。
2.linux下使用者的角色分類
 在linux下使用者是根據角色定義的,具體分為三種角色:
 超級使用者:擁有對系統的最高管理許可權,預設是root使用者。
 普通使用者:只能對自己目錄下的檔案進行訪問和修改,具有登入系統的許可權,例如上面提到的www使用者、ftp使用者等。
 虛擬使用者:也叫“偽”使用者,這類使用者最大的特點是不能登入系統,它們的存在主要是方便系統管理,滿足相應的系統程序對檔案屬主的要求。例如系統預設的bin、adm、nobody使用者等,一般執行的web服務,預設就是使用的nobody使用者,但是nobody使用者是不能登入系統的。
3.使用者和組的概念
 我們知道,Linux是一個多使用者多工的分時作業系統,如果要使用系統資源,就必須向系統管理員申請一個賬戶,然後通過這個賬戶進入系統。這個賬戶和使用者是一個概念,通過建立不同屬性的使用者,一方面,可以合理的利用和控制系統資源,另一方面也可以幫助使用者組織檔案,提供對使用者檔案的安全性保護。
 每個使用者都用一個唯一的使用者名稱和使用者口令,在登入系統時,只有正確輸入了使用者名稱和密碼,才能進入系統和自己的主目錄。
 使用者組是具有相同特徵使用者的邏輯集合,有時我們需要讓多個使用者具有相同的許可權,比如檢視、修改某一個檔案的許可權,一種方法是分別對多個使用者進行檔案訪問授權,如果有10個使用者的話,就需要授權10次,顯然這種方法不太合理;另一種方法是建立一個組,讓這個組具有檢視、修改此檔案的許可權,然後將所有需要訪問此檔案的使用者放入這個組中,那麼所有使用者就具有了和組一樣的許可權。這就是使用者組,將使用者分組是Linux 系統中對使用者進行管理及控制訪問許可權的一種手段,通過定義使用者組,在很大程度上簡化了管理工作。
4.使用者和組的關係:
使用者和使用者組的對應關係有:一對一、一對多、多對一和多對多;下圖展示了這種關係:


 一對一:即一個使用者可以存在一個組中,也可以是組中的唯一成員。
 一對多:即一個使用者可以存在多個使用者組中。那麼此使用者具有多個組的共同許可權。
 多對一:多個使用者可以存在一個組中,這些使用者具有和組相同的許可權。
 多對多:多個使用者可以存在多個組中。其實就是上面三個對應關係的擴充套件。

二 使用者配置檔案概述
1.使用者和組相關的配置檔案
(1)/etc/passwd檔案
系統使用者配置檔案,是使用者管理中最重要的一個檔案。這個檔案記錄了Linux系統中每個使用者的一些基本屬性,並且對所有使用者可讀。/etc/passwd中每一行記錄對應一個使用者,每行記錄又被冒號分割,其格式和具體含義如下:
使用者名稱:口令:使用者標識號:組標識號:註釋性描述:主目錄:預設shell 
下面是/etc/passwd檔案的部分輸出:
[

[email protected] ~]# more /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
下面是每個欄位的詳細含義:
 使用者名稱:是代表使用者賬號的字串。
 口令:存放著加密後的使用者口令,雖然這個欄位存放的只是使用者口令的加密串,不是明文,但是由於/etc/passwd檔案對所有使用者都可讀,所以這仍是一個安全隱患。因此,現在許多Linux 版本都使用了shadow技術,把真正加密後的使用者口令存放到/etc/shadow檔案中,而在/etc/passwd檔案的口令欄位中只存放一個特殊的字元,例如用“x”或者“*”來表示。 
 使用者標識號:就是使用者的UID,每個使用者都有一個UID,並且是唯一的,通常UID號的取值範圍是0~65535,0是超級使用者root的標識號,1~99由系統保留,作為管理賬號,普通使用者的標識號從100開始。而在Linux系統中,普通使用者UID預設從500開始。UID是linux下確認使用者許可權的標誌,使用者的角色和許可權都是通過UID來實現的,因此多個使用者公用一個UID是非常危險的,會造成系統許可權和管理的混亂,例如將普通使用者的UID設定為0後,這個普通使用者就具有了root使用者的許可權,這是極度危險的操作。因此要儘量保持使用者UID的唯一性。
 組標識號:就是組的GID,與使用者的UID類似,這個欄位記錄了使用者所屬的使用者組。它對應著/etc/group檔案中的一條記錄。
 註釋性描述:欄位是對使用者的描述資訊,比如使用者的住址、電話、姓名等等。
 主目錄:也就是使用者登入到系統之後預設所處的目錄,也可以叫做使用者的主目錄、家目錄、根目錄等等。
 預設shell:就是使用者登入系統後預設使用的命令直譯器,shell是使用者和linux核心之間的介面,使用者所作的任何操作,都是通過shell傳遞給系統核心的。linux下常用的shell有sh、bash、csh等,管理員可以根據使用者的習慣,為每個使用者設定不同的shell。
(2)/etc/shadow檔案
使用者影子檔案,由於/etc/passwd檔案是所有使用者都可讀的,這樣就導致了使用者的密碼容易出現洩露,因此,linux將使用者的密碼資訊從/etc/passwd中分離出來,單獨的放到了一個檔案中,這個檔案就是/etc/shadow,該檔案只有root使用者擁有讀許可權,從而保證了使用者密碼的安全性。
下面介紹下/etc/shadow檔案內容的格式:
使用者名稱:加密口令:最後一次修改時間:最小時間間隔:最大時間間隔:警告時間:不活動時間:失效時間:保留欄位
例如:下面是/etc/shadow檔案的部分輸出:
[
[email protected]
~]# more /etc/shadow
root:$1$Uvip.QJI$GteCsLrSSfpnMs.VCOvbs/:14169:0:99999:7:::
bin:*:13934:0:99999:7:::
daemon:*:13934:0:99999:7:::
adm:*:13934:0:99999:7:::
下面是每個欄位的詳細含義:
 使用者名稱:與/etc/passwd檔案中的使用者名稱有相同的含義。
 加密口令:存放的是加密後的使用者口令字串,如果此欄位是“*”、“!”、“x”等字元,則對應的使用者不能登入系統。 
 最後一次修改時間:表示從某個時間起,到使用者最近一次修改口令的間隔天數。可以通過passwd 來修改使用者的密碼,然後檢視/etc/shadow中此欄位的變化。
 最小時間間隔:表示兩次修改密碼之間的最小時間間隔。
 最大時間間隔:表示兩次修改密碼之間的最大時間間隔,這個設定能增強管理員管理使用者的時效性。
 警告時間:表示從系統開始警告使用者到密碼正式失效之間的天數。
 不活動時間:此欄位表示使用者口令作廢多少天后,系統會禁用此使用者,也就是說系統不再讓此使用者登入,也不會提示使用者過期,是完全禁用。
 失效時間:表示該使用者的帳號生存期,超過這個設定時間,帳號失效,使用者就無法登入系統了。如果這個欄位的值為空,帳號永久可用。
 保留欄位:linux的保留欄位,目前為空,以備linux日後發展之用。
(3)/etc/group檔案
使用者組配置檔案,使用者組的所有資訊都存放在此檔案中。
下面介紹下/etc/group檔案內容的格式:
組名:口令:組標識號:組內使用者列表
例如:下面是/etc/group的部分輸出:
[[email protected] ~]# more /etc/group
root:x:0:root
bin:x:1:root,bin,daemon
daemon:x:2:root,bin,daemon
下面是/etc/group每個欄位的含義:
 組名:是使用者組的名稱,由字母或數字構成。與/etc/passwd中的使用者名稱一樣,組名不能重複。
 口令:存放的是使用者組加密後的口令字串,密碼預設設定在/etc/gshadow檔案中,而在這裡用“x”代替,linux系統下預設的使用者組都沒有口令,可以通過gpasswd來給使用者組新增密碼。
 組標識號:就是GID,與/etc/passwd中的組標識號對應。
 組內使用者列表: 顯示屬於這個組的所有使用者,多個使用者之間用逗號分隔。
2./etc/login.defs檔案
用來定義建立一個使用者時的預設設定,比如指定使用者的UID和GID的範圍,使用者的過期時間、是否需要建立使用者主目錄等等。
下面是rhel5下的/etc/login.defs檔案,簡單介紹如下:
MAIL_DIR        /var/spool/mail
當建立使用者時,同時在目錄/var/spool/mail中建立一個使用者mail檔案
PASS_MAX_DAYS   99999
#指定密碼保持有效的最大天數
PASS_MIN_DAYS   0
表示自從上次密碼修改以來多少天后使用者才被允許修改口令
PASS_MIN_LEN    5
指定密碼的最小長度
PASS_WARN_AGE   7
表示在口令到期前多少天系統開始通知使用者口令即將到期
UID_MIN                   500
指定最小UID為500 ,也就是說新增使用者時,使用者的UID 從500開始
UID_MAX                 60000
指定最大UID為60000
GID_MIN                   500
指定最小GID為500,也就是新增組時,組的GID從500開始。
GID_MAX                 60000
指定最大GID為60000
CREATE_HOME     yes
此項是指定是否建立使用者主目錄,yes為建立,no為不建立。
3./etc/default/useradd檔案
當我們通過useradd命令不加任何引數建立一個使用者後,使用者預設的主目錄一般位於/home下,預設使用的shell是/bin/bash,這是為什麼呢,看看/etc/default/useradd這個檔案的內容就完全明白了。
[[email protected] ~]# more /etc/default/useradd
# useradd defaults file
GROUP=100  
HOME=/home  #此項表示將新建使用者的主目錄放在/home目錄下
INACTIVE=-1 #此項表示是否啟用帳號過期禁用,-1表示不啟用
EXPIRE=     #此項表示帳號過期日期,不設定表示不啟用
SHELL=/bin/bash  #此項指定了新建使用者的預設shell型別
SKEL=/etc/skel  #此項用來指定使用者主目錄預設檔案的來源,也就是說新建使用者主目錄下的檔案都是從這個目錄下複製而來的
CREATE_MAIL_SPOOL=no
/etc/default/useradd檔案定義了新建使用者的一些預設屬性,比如使用者的主目錄、使用的shell等等,通過更改此檔案,可以改變建立新使用者的預設屬性值。
改變此檔案有兩種方法,一種是通過文字編輯器方式更改,另一種是通過useradd命令來更改。這裡介紹一下第二種方法:
Useradd命令加“-D”引數後,就可以修改配置檔案/etc/default/useradd,使用的一般格式為:
useradd -D [-g group] [-b base] [-s shell] [-f inactive] [-e expire ]
每個選項詳細含義如下:
 -g default_group
表示新建使用者的起始組名或者GID,組名必須為已經存在的使用者組名稱,GID也必須是已經存在的使用者組GID。與/etc/default/useradd檔案中“GROUP”行對應。
 -b default_home
指定新建使用者主目錄的上級目錄,也就是所有新建使用者都會在此目錄下建立自己的主目錄。與/etc/default/useradd檔案中HOME行對應。
 -s default_shell
指定新建使用者預設使用的shell,與/etc/default/useradd檔案中“SHELL”行對應。
 -f default_inactive
指定使用者帳號過期多長時間後就永久停用,與/etc/default/useradd檔案中“INACTIVE”行對應。
 -e default_expire_date
指定使用者帳號的過期時間。與/etc/default/useradd檔案中“EXPIRE”行對應。
例子:
useradd –D不加任何引數時,顯示/etc/default/useradd檔案的當前設定
[[email protected] ~]# useradd -D  
GROUP=100
HOME=/home
INACTIVE=-1
EXPIRE=
SHELL=/bin/bash
SKEL=/etc/skel
如果要修改新增使用者時的預設shell為/bin/csh,可以這麼操作:
[[email protected] ~]# useradd -D -s /bin/csh
[[email protected] ~]# useradd -D
GROUP=100
HOME=/home
INACTIVE=-1
EXPIRE=
SHELL=/bin/csh
SKEL=/etc/skel
4./etc/skel目錄
在建立一個新使用者後,會在新使用者的主目錄下看到類似.bash_profile, .bashrc, .bash_logout等檔案,這些檔案是怎麼來的呢,如果我想讓新建立的使用者在主目錄下預設擁有自己指定的配置檔案,該如何設定呢?
/etc/skel目錄就是解決這個問題的,/etc/skel目錄定義了新建使用者在主目錄下預設的配置檔案,更改/etc/skel目錄下的內容就可以改變新建使用者預設主目錄的配置檔案資訊。


相關推薦

Linux使用者許可權管理之一使用者概念

一.使用者與組的概念 1.理解linux多使用者,多工的特性 Linux是一個真實的、完整的多使用者多工作業系統,多使用者多工就是可以在系統上建立多個使用者,而多個使用者可以在同一時間內登入同一個系統執行各自不同的任務,而互不影響,例如某臺linux伺服器上有4個使用

Centos使用者許可權管理

淺談Centos使用者許可權管理 2014年12月03日 11:02:56 lyg520lj 閱讀數:586 一.使用者與組的概念 1.理解linux多使用者,多工的特性 Linux是一個真實的、完整的多使用者多工作業系統,多使用者多工就是可以在系統上建立多個使用者,而多個使用者可以

對Bootstrap的看法之一文字顏色、表格、進度條、按鈕

今天第一次接觸Bootstrap,官方介紹其是前端元件庫,用於開發響應式佈局、移動裝置優先的 WEB 專案。個人認為,Bootstrap是一個大型的CSS樣式包,裡面包含了各種各樣的CSS樣式。當程式設計師進行網站開發時,可以直接使用包中定義好的樣式。另外,Bootstrap

資料結構中的樹B/B+/B-/B*

一、B樹(二叉搜尋樹) 1、所有非葉子節點至多擁有兩個兒子。 2、所有節點儲存一個關鍵字。 3、左孩子小於父節點,右孩子大於父節點。 二、B-樹(多路搜尋樹)1、定義任意多個非葉子節點最多隻有M個孩子 2、根節點的兒子數【2,M】 3、除根節點之外的非葉子節點的孩子數

C++多型實現原理虛繼承的奧祕

大夥都知道,如果要實現C++的多型,那麼,基類中相應的函式必須被宣告為虛擬函式(或純虛擬函式)。舉個例子: class Point { public: Point(float x = 0.0, float y = 0.0) : _x(x), _y(y) { } virtual fl

【限時免費】AppBoxCore - 細粒度許可權管理框架EFCore+RazorPages+async/await

目錄 前言 全新AppBoxCore RazorPages 和 TagHelpers 技術架構 頁面處理器和資料庫操作的非同步呼叫 Authorize特性和自定義許可權驗證過濾器 Authorize登入授權 自定義CheckPower許可權過濾器 CheckPower特性控制頁面的瀏覽許可權 表格行連結圖示

PHP使用規範之一註釋文件

文章目錄 1 頁面註釋 2 類註釋 3 函式註釋 4 變數註釋 4.1 類的成員變數 4.2 特別有用的定義 4.3 變數宣告註釋說明 5 行註釋

Linux的內存管理機制

第二次打開 再次 占用 利用 完全 交換 linux系統 其它 swap 一 物理內存和虛擬內存 我們知道,直接從物理內存讀寫數據要比從硬盤讀寫數據要快的多,因此,我們希望所有數據的讀取和寫入都在內存完成,而內存是有限的,這樣就引出了物理內存與虛擬內存的概

linux系統下的權限管理和進程及服務的控制

cal water 控制 權限列表 The 加載 pro 進程查看 e30 一、文件權限的管理 1、權限存在意義為了安全2、權限的識別ls -l file 文件的權限ls -ld dir 目錄的權限3、權限的查看與理解 rw-r--r-- 1 root r

Linux系統中的許可權

Linux許可權 使用者許可權 切換使用者命令: su [使用者名稱] 切換到root使用者時,命令su root可以省略root Linux中有兩種使用者,超級使用者和普通使用者: 超級使用者 擁有系統的所有許可權,可以在系統中不受限制地做任何操作 普通使用

C++ allocator記憶體管理對比new的侷限性

STL中,對記憶體管理的alloc的設計,迫使我去學習了allocator類。這裡對allocator記憶體管理做了點筆記留給自己後續查閱。allocator類宣告、定義於標頭檔案<memory>中的std名稱空間內。所以,應該有以下內容位於檔案頭部… #include &l

Linux中的訊號處理機制

       一晃眼,已經到9月底了,都來不及去感慨時間匆匆。最近常常會想明年的今天我將會在那裡幹著什麼樣的工作?對未來又是憧憬又是擔憂,壓力山大。無論如何現在還是踏踏實實的學習吧,能這樣安安靜靜學習的日子也不多了。不扯了,還是接著前面的寫吧。 SA_RESTART語義        在上篇提到過,SA_

Linux中的訊號處理機制

      首先謝謝 @小堯弟 這位朋友對我昨天夜裡寫的一篇《淺談Linux中的訊號處理機制(一)》的指正,之前的題目我用的“淺析”一詞,給人一種要剖析核心的感覺。本人自知功力不夠,尚且不能對著Linux核心原始碼評頭論足。以後的路還很長,我還是一步一個腳印的慢慢走著吧,Linux核心這座山,我才剛剛抵達山腳

Linux中的訊號處理機制

     有好些日子沒有寫部落格了,自己想想還是不要荒廢了時間,寫點兒東西記錄自己的成長還是百利無一害的。今天是9月17號,暑假在某家遊戲公司實習了一段時間,做的事情是在Windows上用c++寫一些遊戲英雄技能的邏輯實現。雖然時間不算長,但是也算學了一點東西,對團隊專案開發流程也有了一個直觀的感受,專案裡c

Linux PCI裝置驅動

我們在 淺談Linux PCI裝置驅動(上)中(以下簡稱 淺談(一) )介紹了PCI的配置暫存器組,而Linux PCI初始化就是使用了這些暫存器來進行的。後面我們會舉個例子來說明Linux PCI裝置驅動的主要工作內容(不是全部內容),這裡只做文字性的介紹而不會涉及具體程式碼的分析,因為要

Linux PCI裝置驅動

有學員建議寫寫PCI驅動,今天就找到一篇,文章很長,這基本上是全網對PCI講的比較詳細的部落格了,分成上下兩篇,這是上部分,未完待續。 要弄清楚Linux PCI裝置驅動,首先要明白,所謂的Linux PCI裝置驅動實際包括Linux PCI裝置驅動和裝置本身驅動兩部分。 不知道讀者

統一認證管理系統單點登入系統sso

        我所在的公司比較大,內部的各種管理系統和業務系統比較多,然而所有的系統都可以用公司的OA的員工工號和密碼直接進行登入 (當然登入介面都是一個就是內部OA門戶)。從進入公司以來我就一直有個問題,這是怎麼做到的?畢竟假如每個系統一套資料庫,那麼所有的系統都得同步O

linux中的根檔案系統rootfs的原理和介紹

linux中有一個讓很多初學者都不是特別清楚的概念,叫做“根檔案系統”。我接觸linux前前後後也好幾年了,但是對這個問題,至今也不是特別的清楚,至少沒法給出一個很全面很到位的解釋。於是,今天我們就來理一理這個話題。 一、先交代一下檔案系統 在開始討論根檔案

Linux PCI裝置驅動

我們在 淺談Linux PCI裝置驅動(一)中(以下簡稱 淺談(一) )介紹了PCI的配置暫存器組,而Linux PCI初始化就是使用了這些暫存器來進行的。後面我們會舉個例子來說明Linux PCI裝置驅動的主要工作內容(不是全部內容),這裡只做文字性的介紹而不會涉及具體程

老司機linux系統學習技巧

windowsLinux起源於20世紀70年代,是一種優秀的操作系統系統。初次接觸到linux這個系統是在大學期間,這樣才發現除了windows外的另外一個有趣系統。開始抱著好奇的心態去了解,隨著深入學習,筆者被它獨有的魅力所吸引。即使它的可視化窗口操作模式並不如Windows操作系統那樣完美,可是它的可維護