[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
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...