[Linux 003]——用戶和用戶組以及 Linux 許可權管理(一)

来源:http://www.cnblogs.com/charleylla/archive/2016/10/20/5978568.html
-Advertisement-
Play Games

嗬!沒想到吧!學習 Linux 的第三天,我們已經開始接觸用戶管理,用戶組管理,以及許可權管理這幾個逼格滿滿的關鍵字。這幾個關鍵字對於前端程式猿的我來說真的是很高大上有木有,以前嘗試學 Linux 的時候看到這些名詞總是下意識的跳過不敢看有木有,一提起這幾個名詞馬上腦海中總是升騰起無限的崇拜有木有!今 ...


  嗬!沒想到吧!學習 Linux 的第三天,我們已經開始接觸用戶管理,用戶組管理,以及許可權管理這幾個逼格滿滿的關鍵字。這幾個關鍵字對於前端程式猿的我來說真的是很高大上有木有,以前嘗試學 Linux 的時候看到這些名詞總是下意識的跳過不敢看有木有,一提起這幾個名詞馬上腦海中總是升騰起無限的崇拜有木有!今天就硬著頭皮捯飭捯飭這幾個概念,希望能有所收穫。

  1.從 /etc/passwd 說起

  前面的基本命令學習中,我們介紹了使用 passwd 命令可以修改用戶密碼。對於操作系統來說,用戶名和密碼是存放在哪裡的呢?我們都知道一個站點的用戶名和密碼是存放在資料庫中,資料庫是用來保存記錄數據的,我們常用的資料庫有 MySQL,Oracle,MongoDB等。其實,我們把 MySQL 等叫做資料庫是不嚴謹的,因為它們只是資料庫的管理軟體,從廣義上來說,任何能保存數據的東東都可以叫做資料庫。比如文本。

  資料庫是用來保存數據的,操作系統中的用戶名和密碼也理應存放在資料庫中,這個資料庫是啥呢?在 Linux 下,它是處於 /etc 下的一個叫 passwd 的文件。我們不妨看一下這個文件中的內容。

  

  大多數人看到這種東東一般都會說:什麼?你確定這不是天書?這裡面能瞅到啥?說實話,除了行號,我一個都不認識!

  好了,再仔細看看,找找規律。經過你的仔細觀察,你可能會註意到以下幾點訊息:

    • 每一行文本都有數個英文格式的冒號(:) ,它們對每一行文本進行了分割    
    • 仔細數一數,每行文本的冒號數量都是相同的
    • 再仔細數一數,如果我們把冒號前後的東東叫欄位的話,每行文本中的欄位數目都是相同的(包括空欄位)
    • 首行的 root 和尾行的 charley,不就分別是我們的兩個賬戶嗎

  於是你大膽的猜測:對的!這就是我們的用戶表,這些表也包含一個個欄位,這些欄位用來存放用戶的某些信息!事實上也正是如此,/etc/passwd 保存了用戶相關的信息,包括用戶名,密碼,所屬組等等。或許你還會有疑問:明明我們只有兩個用戶,一個管理員賬戶 root,一個是普通用戶 charley,那其他的東西是什麼呢?為什麼他們也出現在這個表裡面?別急,先從分組形式講起。

  2.一些常見的分組形式

  下麵,我們就對用戶,用戶組以及上面的一些疑問進行展開討論。首先介紹一些對用戶或者用戶組分組的方式,站在不同的角度,可以進行不同的區分。

    • 通過用戶類型分組,我們可以把用戶分為:
      • 管理員
      • 普通用戶
    • 通過用戶組類型分組,我們可以把用戶組分為:
      • 管理員組
      • 普通用戶組
    • 從用戶的角度,我們可以把用戶組分為:
      • 基本組(預設組)
      • 額外組(附加組)
    • 對於普通用戶,我們還可以分為:
      • 系統用戶
      • 普通用戶
    • 因此,對於普通用戶組,我們也可以分為:
      • 系統用戶組
      • 普通用戶組

  上面的分組方式是不是看的你眼花繚亂呢?沒關係,其實對用戶或者用戶組分組,本身就是多解的,只是由於站的角度不同,產生了不同的結果而已。換個角度,我們還可以再來 N 種分組形式,以上只是常規的分法。由於這些分組的形式可以體現在我們創建用戶或者用戶分組命令選項中,在學習了創建用戶和創建用戶組的命令之後,自然可以輕鬆的理解這些概念。

  3.理解用戶

  我們知道 /etc/passwd 相當於操作系統保存用戶信息的資料庫,那麼如此可以得出表中每行數據都是代表了一個特定的用戶,但是除了系統的 root 用戶和我們創建的一個普通用戶 charley 之外,還有很多其他的東西,這些東西是什麼呢?它們也是用戶嗎?是的,這些我們不認識的東東,也是用戶,只不過不是有我們創建,而是由操作系統創建的,所以叫做系統用戶。

  某人如果想使用操作系統的某些功能,那麼他必須是這個系統上的一個用戶(客人用戶也是用戶)。用戶登錄操作系統之後,操作系統可以由用戶的特征碼進行許可權的分配,以便使用操作系統的功能。

  我們使用電腦,使用操作系統,是為了讓他們幫我們完成某些任務,具體下來,是通過調用操作系統上的軟體來完成,讓軟體幫我們做事。操作系統在啟動的時候,有一些必要的應用、服務等需要啟動,而遵循前面講到的簡單邏輯,啟動軟體的必須得是操作系統上的用戶。按照這個邏輯,Linux 系統為我們創建了一些系統用戶,通過它們來在操作系統啟動時執行相應的文件。可見系統用戶是不需要登錄的,也叫非登錄用戶,請先記住這一點。

  上面講到了用戶特征碼,操作系統時通過用戶特征碼來識別用戶的。對於淫類,我們識別用戶是通過用戶名,因為用戶名(字元串)好記。而電腦覺得數字更好記一些,於是在創建用戶時系統會為其分配一個唯一的特征碼,用以識別該用戶,這個特征碼也叫UID。同樣的,用戶組也有特征碼,叫做GID。

  Linux 系統中,UID以如下的方式劃分:

    • 0 表示管理員(root)
    • 1 - 500 表示系統用戶
    • 501 - 65535 表示普通用戶
    • 不同的 Linux 發行版,這些數字可能不一樣

  4. /etc/passwd 中的欄位分析

  /etc/passwd 中的欄位分別表示如下信息(欄位名字是我自己取的):

    • ACCOUNT:用戶名
    • PASSWORD:密碼占位符
    • UID:用戶ID
    • GID:用戶組ID
    • COMMAND:註釋信息
    • HOME DIR:用戶家目錄
    • SHELL:用戶的預設 shell

  密碼占位符,其值是 x,顯然這不是真正的密碼。真正的密碼保存在哪裡呢?在 /etc/shadow 文件中,此文件中保存的也不是明文密碼,而是經過加密處理之後的密碼。我們來看一下 /etc/shadow 中的內容(root only):

  

  可見,/etc/shadow 中保存的也是數據表,這個表也和用戶相關。還記得第二天說到的 man 命令嗎?man 手冊的第五個章節是特殊文件,我們來 man 一波試試:

 

  對於 /etc/shadow 中每個欄位的含義,手冊中都給出了說明,我們可以去參考(這裡只給出了一部分截圖)。同理,對於 /etc/passwd,我們也可以通過 man 5 passwd 查看每一個欄位表示的含義。

  好了,回到 PASSWORD 欄位,我們看一下 root 用戶和 charley 的此項欄位值,可以看到此值中有一些規律可循:

    • $1$XXXXXXXX$XXXXXXXXXX.....

  我們可以通過此欄位來獲取如下信息:

    • 前兩個美元符號中的數字1表示加密方式是 md5
    • 第二個和第三個美元符號之間的字串是經過加密後的密碼鹽值
    • 第三個美元符號之後的字串是密碼明文精加密的後的特征碼

  既然談到了加密和鹽值,我們來複習一下關於加密的基礎知識。我們通常用到的加密方式有一下幾種:

    • 對稱加密:使用同一套密碼進行加密和解密

    • 公鑰加密:每個密碼以私鑰(secret key)和公鑰(public key)成對出現,公鑰進行的加密使用與其配對的私鑰解密,反之亦然,相對於對稱加密,速度很慢,一般不用於加密,而是秘鑰交換
    • 單向加密(散列加密):只能加密不能解密。也就是說只能由明文取得密文,而不能由密文取得明文。經過單向加密得到的是一份唯一的特征碼,每個數據的特征碼是獨一無二的,因此也叫作指紋加密。如果兩次演算法取得的特征碼一樣,那麼就是同一份數據。單向加密可以用來做數據校驗,如果數據被動了手腳,那麼數據的特征碼就不一樣。常用的散列加密方式有:

      • MD5:定長128位輸出特征碼
      • SHA1:定長160位輸出特征碼
      • 還有其他方式,主要體現在特征碼輸出長度的不同
    • 單向加密的特點:
      • 不可逆
      • 雪崩效應:數據的微小改變,會引起特征碼的巨大變化
      • 定長輸出:不管加密的內容長度多少,輸出的特征碼長度都是一樣
    • 加鹽:如果兩個用戶使用了同樣的密碼,那麼經過 MD5 散列加密後的特征碼就是一致的,如果一個用戶偶然發現另一個用戶的特征碼和他自己是一樣的,那麼就可以推斷另一個用戶的密碼。這是不太安全的。為了安全起見,我們需要用到散列加密特點中的雪崩效應,往密碼中額外加點雜質(內容),這樣加密後的特征碼就千差萬別了。這個過程就是所謂的加鹽。

  5.useradd 命令:添加用戶

  說了那麼多,終於來點真格的了,Linux 中使用 useradd 命令添加一個用戶。這個命令很簡單,簡單到只使用 useradd USERNAME 就可以添加一個用戶。

  我們新建一個用戶 MIKE,然後查看 /etc/passwd 中的對應內容:

  

  在 /etc/passwd 的最後一行,我們看到了剛剛添加的用戶,並且系統自動設置了用戶的一些屬性,比如UID,GID,HOME DIR等。我們也可以手動指定新增用戶的信息:

    • useradd -u UID:指定 UID,這個 UID 必須是大於等於500,並沒有其他用戶占用的 UID
    • useradd -g GID/GROUPNAME:指定預設組,可以是 GID 或者 GROUPNAME,同樣也必須真實存在
    • useradd -G GROUPS:指定額外組
    • useradd -c COMMENT:指定用戶的註釋信息
    • useradd -d PATH:指定用戶的家目錄
    • useradd -s SHELL:指定用戶的預設 shell,最好是在 /etc/shells 中存在的路徑
    • useradd -s /sbin/nologin:該用戶不能登錄,還記得我們上面說到的系統用戶不能登錄吧?我們可以看到系統用戶的 shell 欄位也是 /sbin/nologin
    • echo $SHELL :查看當前用戶的 shell 類型
    • useradd -M USERNAME:創建用戶但不創建家目錄
    • useradd -mk USERNAME:創建用戶的同時創建家目錄,並複製 /etc/skel 中的內容到家目錄中。關於 /etc/skel 目錄會在下一篇 Linux 許可權管理中再次講解。
    • 如果用戶沒有家目錄,那麼不能切換到該用戶

  6.userdel 命令:刪除用戶

    • userdel USERNAME:刪除用戶
    • userdel -r USERNAME:刪除用戶的同時刪除用戶家目錄

  7.id 命令:顯示賬號屬性信息

    • id -g USERNAME:顯示預設組ID
    • id -G USERNAME:顯示附加組ID
    • id -u USERNAME:顯示UID
    • id -n -g/-G/-U:顯示預設組/附加組/用戶的名稱

  8.finger 命令:檢索用戶信息,比使用 id 命令更加友好

  9.usermod 命令:修改用戶信息

    • 基本用法和 useradd 相似,這裡列出需要註意的點
    • usermod -G GROUPS USERNAME:改變用戶的附加組,會完全替換原有的附加組
    • usermod -G -a GROUPS USERNAME:在原有附加組的基礎上追加附加組
    • usermod -d PATH USERNAME:修改家目錄。修改後原先家目錄中的文件不能訪問了,因為在當前的家目錄中並不存在這些文件。
    • usermod -l NEWNAME USERNAME:改變用戶名
    • usermod -e USERNAME:指定該用戶的過期時間
    • usermod -L USERNAME:鎖定用戶
    • usermod -U USERNAME:解鎖用戶

  10.快捷命令

    • chsh SHELL USERNAME:改變預設 shell
    • chfn USERNAME:修改註釋信息,用來增加用戶的詳細信息,如公司,地址等。可以由 finger 查看相應的改變。

  11.passwd

    • passwd --stdio:標準輸入讀取密碼passwd -l:鎖定用戶賬號(root only)
      • echo "newpassword" | passwd --stdio MIKE
    • passwd -u:解鎖用戶賬號(root only)
    • passwd -d:刪除用戶密碼。用戶密碼刪除後不能登錄。

  12.pwch(password check):檢查密碼文件的完整性,可獲取一些警告信息

  13.groupadd 命令:添加組

    • groupadd -g GID GROUPNAME:指定GID
    • groupadd -r GROUPNAME:添加一個系統用戶組(-r 也適用於 useradd)
      • groupadd -r apache

  13.groupmod 命令:修改組

    • groupmod -g NEWGID GROUPNAME:修改GID
    • groupmod -n NEWGROUPNAME GROUPNAME:修改組名

  14.groupdel 命令:刪除組

    • groupdel GROUPNAME

  15.gpasswd 命令:給組加密碼

    • gpasswd GROUPNAME

  16.newgrp :臨時指定基本組,下文介紹。

  17.給組添加密碼的作用

  為什麼需要給組添加密碼呢?不妨先說一下用戶的基本組,好像到現在我們還沒有講基本組的情況吧,嘿嘿。基本組很簡單,Linux 規定每個用戶都需要在某一個組中,因此在創建用戶的時候,我們可以指定用戶的基本組(預設組):useradd -g GROUPNAME USERNAME。如果我們不手動指定用戶的基本組,系統會預設創建一個和當前用戶名一致的組,然後將這個組設置為用戶的基本組。基本組的 GID 預設和用戶 UID 一致(如果不被占用的話)。

  為啥用戶必須要有一個組呢?因為 Linux 規定,一個文件的需要具備三種許可權:文件所屬主的許可權,文件所屬主所在組的許可權,以及其他用戶的許可權。因此文件的所屬主要是沒有基本組的話,那是不是非常尷尬呢。這個問題先說到這裡。

  回頭看一下 gpasswd 的作用,一般情況下我們是不需要為組設置密碼的。現在提一個需求:在執行某項操作的時候,要使用到其他組的許可權,就需要臨時切換到其他組,又不想改變現有組,那麼就需要使用 newgrp 命令,newgrp 命令就是用來臨時切換用戶基本組,註意此操作只對當前登錄有效。在使用 newgrp 的時候,可能需要我們輸入組密碼。為什麼是可能呢?因為在將額外組臨時設置為用戶的基本組時,是不需要密碼的。只有將此前和用戶毫不相關的組臨時設置為基本組才會需要密碼。如需還原基本組:exit 或者 logout。

  18.總結

  本文主要介紹了 Linux 的用戶管理和用戶組管理,並介紹了 /etc/passwd 和 /etc/shadow 這兩個和用戶有關的文件。和用戶組有關的文件位於 /etc/group 和 /etc/gshadow 中。此外介紹了常見的加密形式:對稱加密,公鑰加密和散列加密。關於用戶和用戶組就介紹到這裡,在此基礎上我們將在下篇文章中介紹 Linux 的許可權管理,和本文屬於同一個系列。

  加油!

 


 

作者:Charleylla  轉載請註明出處:http://www.cnblogs.com/charleylla/p/5978568.html 

 


 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 以TCPServ 服務程式來說: 1)父進程:負責系統初始化,以及監聽(listen),接受連接請求(accept);其中accept 預設阻塞調用。 2)每接受一個連接請求,動態新建(fork)一個子進程,任務完成或客戶端斷開,服務子進程需要退 出並收回系統資源。 3)根據linux的設計子進程的 ...
  • 簡介 IO復用技術,簡單來說就是同時監聽多個描述符。在沒有用到IO復用以前,只能是一個線程或一個 線程去監聽,服務端同時有多個連接的時候,需要創建多個線程或者進程。而且,並不是所有的連 接是一直在傳輸這數據,可能只是連接後啥都沒乾,如果這樣,進程就啥都沒乾。 現在有了IO復用技術,只有描述符就緒的時 ...
  • 對於日誌來說,最常見的需求就是收集、存儲、查詢、展示,開源社區正好有相對應的開源項目:logstash(收集)、elasticsearch(存儲+搜索)、kibana(展示),我們將這三個組合起來的技術稱之為ELKStack,所以說ELKStack指的是Elasticsearch、Logstash、 ...
  • hit,命中表示鏈接上這個網站 get獲取表示有更新並且下載, ign忽略表示無更新或者更新無關緊要或者不需要,譬如某些插件系統已經有了或者語言翻譯包 ...
  • 到許可權了。前面講到了 Linux 中的用戶和用戶主管理,其實它們的本質(或者用戶和用戶組出現的初衷)都是方便許可權管理。許可權管理對於電腦的重要性不言而喻,許可權讓每個用戶能夠安安心心的使用電腦,而不用擔心別的用戶破壞到自己的資源。如果老王手裡有一把你家的鑰匙,你是不是很蛋疼呢,如果鄰居除了老王,還有 ...
  • 先安裝字體管理軟體 將需要安裝的字體放到/usr/share/fonts/chinese/目錄下 如果不存在這個目錄,可以自行創建 修改目錄許可權,以便其他用戶也可以使用 應用更改 註意,某些應用可能需要重啟才能生效 使用下麵的命令可以查看已經安裝的字體 ...
  • 從零開始配置ubuntu 14.04,記錄配置服務的過程,安裝組件如下: - SSH - curl - Git - MongoDB - Node.js - ... ...
  • 1.安裝phpStorm,步驟略 2.安裝xampp: 2.1 我下載的版本為:XAMPP 5.6.24(下載最新版裡面沒有xdebug.so文件) 照步驟安裝。 2.2 安裝成功後,啟動一下,看看是否可以運行,在瀏覽器地址欄輸入localhost,查看是否可以進入到xampp網站 。 2.3 點擊 ...
一周排行
    -Advertisement-
    Play Games
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...