Linux用戶和許可權——用戶和用戶組管理

来源:https://www.cnblogs.com/shamao/archive/2019/07/11/11172732.html
-Advertisement-
Play Games

Linux用戶和許可權——用戶和用戶組管理 摘要:本文主要介紹了Linux系統中的用戶和用戶組管理。 用戶和用戶組 含義 在使用Linux系統時,雖然輸入的是自己的用戶名和密碼,但其實Linux並不認識用戶名稱,它只認識用戶名對應的ID號(也就是一串數字)。Linux系統將所有用戶的名稱與ID的對應關 ...


Linux用戶和許可權——用戶和用戶組管理

摘要:本文主要介紹了Linux系統中的用戶和用戶組管理。

用戶和用戶組

含義

在使用Linux系統時,雖然輸入的是自己的用戶名和密碼,但其實Linux並不認識用戶名稱,它只認識用戶名對應的ID號(也就是一串數字)。Linux系統將所有用戶的名稱與ID的對應關係都存儲在/etc/passwd文件中。說白了,用戶名並無實際作用,僅是為了方便用戶的記憶而已。

Linux系統中,每個用戶的ID細分為2種,分別是用戶ID(UserID,簡稱UID)和組ID(GroupID,簡稱GID),這與文件有擁有者和擁有群組兩種屬性相對應。

每個文件都有自己的擁有者ID和群組ID,當顯示文件屬性時,系統會根據/etc/passwd和/etc/group文件中的內容,分別找到UID和GID對應的用戶名和群組名,然後顯示出來。

忘記密碼怎麼辦

對於普通賬戶的密碼遺失,可以通過root賬戶解決,它會重新給你配置好指定賬戶的密碼,而不需知道你原有的密碼(利用root的身份使用passwd命令即可)。

如果root賬號的密碼遺失,則需要重新啟動進入單用戶模式,系統會提供root許可權的bash介面,此時可以用passwd命令修改賬戶密碼;也可以通過掛載根目錄,修改/etc/shadow,將賬戶的root密碼清空的方法,此方式可使用root無法密碼即可登陸,建議登陸後使用passwd命令配置root密碼。

保存用戶數據的/etc/passwd文件

Linux系統中的/etc/passwd文件,是系統用戶配置文件,存儲了系統中所有用戶的基本信息,並且所有用戶都可以對此文件執行讀操作。

首先我們來打開這個文件,看看到底包含哪些內容,執行命令如下:

1 [root@localhost ~]# cat /etc/passwd
2 root:x:0:0:root:/root:/bin/bash
3 bin:x:1:1:bin:/bin:/sbin/nologin
4 ...
5 [root@localhost ~]#

可以看到,/etc/passwd文件中的內容非常規律,每行記錄對應一個用戶。

這些用戶中的絕大多數是系統或服務正常運行所必需的用戶,這種用戶通常稱為系統用戶或偽用戶。系統用戶無法用來登錄系統,但也不能刪除,因為一旦刪除,依賴這些用戶運行的服務或程式就不能正常執行,會導致系統問題。

不僅如此,每行用戶信息都以“:”作為分隔符,劃分為七個欄位:

1 用戶名:密碼:UID(用戶ID):GID(組ID):描述性信息:主目錄:預設Shell

用戶名

用戶名,就是一串代表用戶身份的字元串,用戶名僅是為了方便用戶記憶,Linux系統是通過UID來識別用戶身份,分配用戶許可權的。/etc/passwd文件中就定義了用戶名和UID之間的對應關係。

密碼

“x”表示此用戶設有密碼,但不是真正的密碼,真正的密碼保存在/etc/shadow文件中,此文件只有root用戶可以瀏覽和操作,這樣就最大限度地保證了密碼的安全。

需要註意的是,雖然“x”並不表示真正的密碼,但也不能刪除,如果刪除了“x”,那麼系統會認為這個用戶沒有密碼,從而導致只輸入用戶名而不用輸入密碼就可以登陸(只能在使用無密碼登錄,遠程是不可以的),除非特殊情況(如破解用戶密碼),這當然是不可行的。

UID

全稱“User ID”,也就是用戶ID。每個用戶都有唯一的一個UID,Linux系統通過UID來識別不同的用戶。

實際上,UID就是一個0~65535之間的數,不同範圍的數字表示不同的用戶身份:

1)0:超級用戶。UID為0就代表這個賬號是管理員賬號。在Linux中,只需把其他用戶的UID修改為0就可以了,這一點和Windows是不同的,不過不建議建立多個管理員賬號。

2)1~499:系統用戶(偽用戶)。也就是說,此範圍的UID保留給系統使用。其中,1~99用於系統自行創建的賬號,100~499分配給有系統賬號需求的用戶。其實,除了0之外,其他的UID並無不同,這裡只是預設500以下的數字給系統作為保留賬戶,只是一個公認的習慣而已。

3)500~65535:普通用戶。通常這些UID已經足夠用戶使用了。但不夠用也沒關係,2.6.x內核之後的Linux系統已經可以支持232個UID了。

GID

全稱“Group ID”,也就是組ID,表示用戶初始組的組ID號。這裡需要解釋一下初始組和附加組的概念。

初始組,指用戶登陸時就擁有這個用戶組的相關許可權。每個用戶的初始組只能有一個,通常就是將和此用戶的用戶名相同的組名作為該用戶的初始組。比如說,我們手工添加用戶sam,在建立用戶sam的同時,就會建立sam組作為sam用戶的初始組。

附加組,指用戶可以加入多個其他的用戶組,並擁有這些組的許可權。每個用戶只能有一個初始組,除初始組外,用戶再加入其他的用戶組,這些用戶組就是這個用戶的附加組。附加組可以有多個,而且用戶可以有這些附加組的許可權。

舉例來說,剛剛的sam用戶除屬於初始組sam外,我又把它加入了users組,那麼sam用戶同時屬於sam組和users組,其中sam是初始組,users是附加組。

當然,初始組和附加組的身份是可以修改的,但是我們在工作中不修改初始組,只修改附加組,因為修改了初始組有時會讓管理員邏輯混亂。

需要註意的是,在/etc/passwd文件的第四個欄位中看到的ID是這個用戶的初始組。

描述性信息

這個欄位並沒有什麼重要的用途,只是用來解釋這個用戶的意義而已。

主目錄

也就是用戶登錄後有操作許可權的訪問目錄,通常稱為用戶的主目錄。

例如,root超級管理員賬戶的主目錄為/root,普通用戶將在/home/目錄下建立和用戶名相同的目錄作為主目錄,如sam用戶的主目錄就是/home/sam/目錄。

預設的Shell

Shell就是Linux的命令解釋器,是用戶和Linux內核之間溝通的橋梁。

我們知道,用戶登陸Linux系統後,通過使用Linux命令完成操作任務,但系統只認識類似0101的機器語言,這裡就需要使用命令解釋器。也就是說,Shell命令解釋器的功能就是將用戶輸入的命令轉換成系統可以識別的機器語言。

通常情況下,Linux系統預設使用的命令解釋器是bash(/bin/bash),當然還有其他命令解釋器,例如sh、csh等。

在/etc/passwd文件中,大家可以把這個欄位理解為用戶登錄之後所擁有的許可權。如果這裡使用的是bash命令解釋器,就代表這個用戶擁有許可權範圍內的所有許可權。

sam用戶使用的是bash命令解釋器,那麼這個用戶就可以使用普通用戶的所有許可權,例如:

1 [root@localhost ~]# vim /etc/passwd
2 sam:x:502:502::/home/sam:/bin/bash

如果sam用戶的Shell命令解釋器是/sbin/nologin,那麼,這個用戶就不能登錄了,因為/sbin/nologin就是禁止登錄的Shell,例如:

1 [root@localhost ~]# vim /etc/passwd
2 sam:x:502:502::/home/sam:/sbin/nologin

保存用戶密碼的/etc/shadow文件

/etc/shadow文件,用於存儲Linux系統中用戶的密碼信息,又稱為“影子文件”。

前面介紹了/etc/passwd文件,由於該文件允許所有用戶讀取,易導致用戶密碼泄露,因此Linux系統將用戶的密碼信息從/etc/passwd文件中分離出來,並單獨放到了此文件中。

/etc/shadow文件只有root用戶擁有讀許可權,其他用戶沒有任何許可權,這樣就保證了用戶密碼的安全性。註意,如果這個文件的許可權發生了改變,則需要註意是否是惡意攻擊。

介紹此文件之前,先打開看看,執行如下命令:

1 [root@localhost ~]# cat /etc/shadow
2 root:$6$yZkTv2VHvJfZft5s$XaKB9Jp6cRNEsdFKsYvQlmwmckbhvEDcFN/dDY1MpHLsx2w99Xn5lYvoQbkh6GU/DTx8ewq0xns1CQRbOXU1j/::0:99999:7:::
3 bin:*:16659:0:99999:7:::
4 ...
5 [root@localhost ~]# 

同/etc/passwd文件一樣,文件中每行代表一個用戶,同樣使用“:”作為分隔符,不同之處在於,每行用戶信息被劃分為九個欄位。每個欄位的含義如下:

1 用戶名:加密密碼:最後一次修改時間:最小修改時間間隔:密碼有效期:密碼需要變更前的警告天數:密碼過期後的寬限時間:賬號失效時間:保留欄位

用戶名

同/etc/passwd文件的用戶名有相同的含義。

加密密碼

這裡保存的是真正加密的密碼。目前Linux的密碼採用的是SHA512散列加密演算法,原來採用的是MD5或DES加密演算法。SHA512散列加密演算法的加密等級更高,也更加安全。

註意,這串密碼產生的亂碼不能手工修改,如果手工修改,系統將無法識別密碼,導緻密碼失效。

所有偽用戶的密碼都是“!!”或“*”,代表沒有密碼是不能登錄的。當然,新創建的用戶如果不設定密碼,那麼它的密碼項也是“!!”,代表這個用戶沒有密碼,不能登錄。

最後一次修改時間

此欄位表示最後一次修改密碼的時間。Linux計算日期的時間是以1970年1月1日作為1不斷累加得到的時間。

最小修改時間間隔

最小修改間隔時間,也就是說,該欄位規定了從第三個欄位(最後一次修改密碼的日期)起,多長時間之內不能修改密碼。如果是0,則密碼可以隨時修改,如果是10,則代表密碼修改後10天之內不能再次修改密碼。

此欄位是為了針對某些人頻繁更改賬戶密碼而設計的。

密碼有效期

經常變更密碼是個好習慣,為了強制要求用戶變更密碼,這個欄位可以指定距離第三個欄位(最後一次更改密碼)多長時間內需要再次變更密碼,否則該賬戶密碼進行過期階段。
該欄位的預設值為99999,也就是273年,可認為是永久生效。如果改為90,則表示密碼被修改90天之後必須再次修改,否則該用戶即將過期。管理伺服器時,通過這個欄位強制用戶定期修改密碼。

密碼需要變更前的警告天數

與第5欄位相比較,當賬戶密碼有效期快到時,系統會發出警告信息給此賬戶,提醒用戶“再過n天你的密碼就要過期了,請儘快重新設置你的密碼!”。

該欄位的預設值是7,也就是說,距離密碼有效期的第7天開始,每次登錄系統都會向該賬戶發出“修改密碼”的警告信息。

密碼過期後的寬限天數

也稱為“口令失效日”,簡單理解就是,在密碼過期後,用戶如果還是沒有修改密碼,則在此欄位規定的寬限天數內,用戶還是可以登錄系統的,如果過了寬限天數,系統將不再讓此賬戶登陸,也不會提示賬戶過期,是完全禁用。

比如說,此欄位規定的寬限天數是10,則代表密碼過期10天後失效;如果是0,則代表密碼過期後立即失效;如果是-1,則代表密碼永遠不會失效。

賬號失效時間

同第3個欄位一樣,使用自1970年1月1日以來的總天數作為賬戶的失效時間。該欄位表示,賬號在此欄位規定的時間之外,不論你的密碼是否過期,都將無法使用。

該欄位通常被使用在具有收費服務的系統中。

保留

這個欄位目前沒有使用,等待新功能的加入。

保存用戶組數據的/ect/group文件

/ect/group文件是用戶組配置文件,即用戶組的所有信息都存放在此文件中。此文件是記錄組ID(GID)和組名相對應的文件。

/etc/group文件的內容可以通過Vim看到:

1 [root@localhost ~]# cat /etc/group
2 root:x:0:
3 bin:x:1:
4 ...
5 [root@localhost ~]# 

可以看到,此文件中每一行各代表一個用戶組。

各用戶組中,還是以“:”作為欄位之間的分隔符,分為四個欄位,每個欄位對應的含義為:

1 組名:密碼:GID(組ID):該用戶組中的用戶列表

組名

也就是是用戶組的名稱,有字母或數字構成。同/etc/passwd中的用戶名一樣,組名也不能重覆。

組密碼

和/etc/passwd文件一樣,這裡的“x”僅僅是密碼標識,真正加密後的組密碼預設保存在/etc/gshadow文件中。

用戶設置密碼是為了驗證用戶的身份,用戶組密碼主要是用來指定組管理員的,由於系統中的賬號可能會非常多,root用戶可能沒有時間進行用戶的組調整,這時可以給用戶組指定組管理員,如果有用戶需要加入或退出某用戶組,可以由該組的組管理員替代root進行管理。但是這項功能目前很少使用,也很少設置組密碼。如果需要賦予某用戶調整某個用戶組的許可權,則可以使用sudo命令代替。

GID

就是群組的ID號,Linux系統就是通過GID來區分用戶組的,同用戶名一樣,組名也只是為了便於管理員記憶。

這裡的組GID與/etc/passwd文件中第四個欄位的GID相對應,實際上,/etc/passwd文件中使用GID對應的群組名,就是通過此文件對應得到的。

組中的用戶

此欄位列出每個群組包含的所有用戶。需要註意的是,如果該用戶組是這個用戶的初始組,則該用戶不會寫入這個欄位,可以這麼理解,該欄位顯示的用戶都是這個用戶組的附加用戶。

一般情況下,用戶的初始組就是在建立用戶的同時建立的和用戶名相同的組。

保存用戶組密碼的/etc/gshadow文件

前面講過,/etc/passwd文件存儲用戶基本信息,同時考慮到賬戶的安全性,將用戶的密碼信息存放另一個文件/etc/shadow中。本節要將的/etc/gshadow文件也是如此,組用戶信息存儲在/etc/group文件中,而將組用戶的密碼信息存儲在/etc/gshadow文件中。

首先,我們藉助Vim命令查看一下此文件中的內容:

1 [root@localhost ~]# cat /etc/gshadow
2 root:::
3 bin:::
4 ...
5 [root@localhost ~]#

文件中,每行代表一個組用戶的密碼信息,各行信息用“:”作為分隔符分為四個欄位,每個欄位的含義如下:

1 組名:加密密碼:組管理員:組附加用戶列表

組名

同/etc/group文件中的組名相對應。

組密碼

對於大多數用戶來說,通常不設置組密碼,因此該欄位常為空,但有時為“!”,指的是該群組沒有組密碼,也沒有群組管理員。

組管理員

從系統管理員的角度來說,該文件最大的功能就是創建群組管理員。

考慮到Linux系統中賬號太多,而超級管理員root可能比較忙碌,因此當有用戶想要加入某群組時,root或許不能及時作出回應。這種情況下,如果有群組管理員,那麼他就能將用戶加入自己管理的群組中,也就免去麻煩root了。

不過,由於目前有sudo之類的工具,因此群組管理員的這個功能已經很少使用了。

組中的附加用戶

該欄位顯示這個用戶組中有哪些附加用戶,和/etc/group文件中附加組顯示內容相同。


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

-Advertisement-
Play Games
更多相關文章
  • 一、FastDFS簡介 1、基礎概念 FastDFS是一個開源的輕量級分散式文件系統,它對文件進行管理,功能包括:文件存儲、文件同步、文件上傳、文件下載等,解決了大容量存儲和負載均衡的問題。 2、環境概覽 二、安裝LibFastCommon 核心流程 下載 解壓 編譯 安裝 三、安裝FastDFS ...
  • 最近項目要使用supervisor 來管理程式,簡單查了查,發現比較容易使用: 中文博客查了查,發現很多人都寫出了教程,我這邊就懶得寫了,找了幾個能看懂的記錄如下: https://www.cnblogs.com/xueweihan/p/6195824.html http://liyangliang ...
  • @ vim 編輯快捷鍵 ctrl + n 是自動補齊 ctrl + p 是往上選擇 ctrl + f 是下一屏幕 ctrl + b 是上一屏幕 w:是移動一個單詞 b:是向前一個單詞 d^:當前行中,刪至行首 d$:當前行中,刪至行尾 y^:當前到行頭的內容 y$ :複製當前到行尾的內容 d1G:刪 ...
  • Linux中用戶UID就判斷操作系統中用戶的身份。 Centos7.x: 0:超級管理員 1-999:系統用戶(包含Linux中自帶服務) 1000以上 普通用戶 Centos6.x : Root用戶 (ID 0)超級管理員 系統用戶 (ID 1-499) 普通用戶 (ID 500以上) Linux ...
  • Linux用戶和許可權——管理用戶和用戶組的命令 摘要:本文主要學習了在Linux系統中管理用戶和用戶組的命令。 useradd命令 useradd命令可以用來創建新用戶。 基本語法 選項說明 使用舉例 passwd命令 使用passwd命令設置密碼。 基本語法 選項說明 使用舉例 usermod命令 ...
  • Linux信息 查看CPU的相關信息 查看記憶體的相關信息 查看掛接的分區狀態 查看硬碟和分區分佈 查看硬碟和分區分佈 查看硬碟使用情況 查看系統的所有網路介面 查看系統的鍵盤和滑鼠 ...
  • 一 背景知識介紹 ubuntn系統的預設配置,超級用戶root的密碼是隨機的,如果沒提前對root用戶的密碼進行設置, 是不能直接通過root的身份來進行某些操作的,必須使用sudo命令,並通過普通用戶(假設是zeng)的密碼來切換。 例如: 輸入 sudo su - 命令,系統會如下提示 [sud ...
  • 想了想,把微博里的轉到這裡來比較靠譜 配置oh-my-ssh: 1.git clone git://github.com/robbyrussell/oh-my-zsh.git ~/.oh-my-zsh2. cp ~/.zshrc ~/.zshrc.orig (可選)備份.zshrc配置3. cp ~ ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...