【Linux系統】 4. 權限(一)

一. shell 命令及運行原理基本理解

1)廣義理解的操作系統包括:操作系統內核、外殼程序(shell命令行、圖形化界面)、必要的軟件。

2)狹義的操作系統:操作系統內核。

3)在用戶和內核之間有一個外殼程序(shell外殼),也叫命令行解釋器,是操作系統外的一層軟件層。
1. 它存在的原因:主要是因為人不擅長和內核交互,但是擅長和shell命令行、圖形化界面等外殼程序交互。并且外殼可以變相的保護內核。
2. 它的作用:將用戶的命令翻譯給核心處理。同時,將核心的處理結果翻譯給用戶。

4)shell外殼是一個廣義的概念,它包含了bash。即bash是一個具體的命令行解釋器。
他有雙重身份,既作為執行環境又作為一個可執行命令本身。
1. 作為外殼程序,他會一直循環的做四件事:打印提示符 --> 讀取命令 --> 解釋和執行命令 --> 返回結果。
2. 作為一個命令,執行這個命令會啟動一個新的 Bash Shell 子進程,通常用于創建嵌套的 Shell 環境或執行腳本。

[root@hcss-ecs-116a ~]# ls /usr/bin/bash
/usr/bin/bash

5)有風險的命令,shell外殼程序可以創建子進程來做。這樣就算子進程掛了也不會影響我們原本的外殼程序。

二. 權限

(一)什么是權限

權限決定了一個資源我們有沒有權利訪問,即能不能訪問資源的問題。

(二)為什么要有權限

Linux是一個多用戶操作系統,可能同時有多個人或賬號進行登陸訪問,有普通用戶也有超級用戶。如果不對部分用戶加以限制,可能用戶之間彼此會有不好的影響。所以權限的本質也是要進行更好的用戶管理。

(三)權限 = 人 + 屬性

權限針對特定的群體---與人有關(普通用戶?超級用戶?)。
目標主體必須具備對應的屬性才能訪問。根據Linux下,一切皆文件的特性,所謂的目標主體就是文件,而文件常見的屬性有三個:可讀(r)?可寫(w)?可執行(x)?

用戶的問題

1)超級用戶(root):Linux中的特權級別,基本不受權限約束。可以隨意切換到任意普通賬號。

2)su指令---賬號間的切換問題

1. 超級用戶和普通用戶之間

這個操作一般由擁有root賬號的人做,因為超級用戶通常也有自己的普通賬號,他知道root賬號的密碼,需要在兩個賬號間切換。

[root@hcss-ecs-116a lsy]# whoami
root
[root@hcss-ecs-116a lsy]# su lsy
[lsy@hcss-ecs-116a ~]$ whoami
lsy
[lsy@hcss-ecs-116a ~]$ whoami
lsy
[lsy@hcss-ecs-116a ~]$ su root
Password: 
[root@hcss-ecs-116a lsy]# exit
[lsy@hcss-ecs-116a ~]$ su
Password: 
[root@hcss-ecs-116a lsy]# exit
[lsy@hcss-ecs-116a ~]$ su -
Password: 
Last login: Sat Sep  6 13:18:40 CST 2025 on pts/0
[root@hcss-ecs-116a ~]# logout

可以看到第三種普通賬號切換到root賬號的方式比其他兩種方式多出了一行:Last login: Sat Sep ?6 13:18:40 CST 2025 on pts/0? ?證明這種方式雀食是以重新登陸的方式切換賬號的。

2. 普通用戶和普通用戶之間

有對方的密碼即可切換

3)最佳實踐:每個人老老實實用好自己的賬號,不要切來切去。只有超級用戶偶爾需要在root賬號和自己的普通賬號之間切換。

4)新建、刪除用戶,并設置密碼

默認root賬號才有的權力,普通用戶只有修改自己密碼的權力,普通用戶也可以通過短暫提權的方式獲得這項權利(馬上會講如何短暫提權)。
1. 新建、設置(更改)密碼

[root@hcss-ecs-116a ~]# adduser lh
[root@hcss-ecs-116a ~]# passwd lh
Changing password for user lh.
New password: 
Retype new password: 
passwd: all authentication tokens updated successfully.
[root@hcss-ecs-116a ~]# su lsy
[lsy@hcss-ecs-116a root]$ su lh
Password: 
[lh@hcss-ecs-116a root]$ whoami
lh

?2. 刪除(千萬別忘了加 -r !!)

[root@hcss-ecs-116a ~]# adduser lh
[root@hcss-ecs-116a ~]# ls /home
lh  lsy
[root@hcss-ecs-116a ~]# userdel -r lh
[root@hcss-ecs-116a ~]# ls /home
lsy

5)sudo 指令

如果一個普通用戶想在系統中裝一個軟件,但是軟件安裝相當于將對應的文件拷貝到系統的指定目錄下,操作系統不允許普通用戶拷。
那是不是意味著所有類似于軟件安裝等的任務都只有root賬號即超級管理員能做?答案是:不是的。
如果真的是這樣,那超級管理員的工作量很大,每天安裝個軟件就有好多人找到他,讓他做。同樣的,也不可能將root密碼給所有人,讓他們隨意切換到root賬號進行軟件安裝等工作,否則權限對不同用戶的約束力就消失了。

基于以上的問題,Linux給出了一個能讓普通用戶進行短暫提權的指令 --- sudo指令。
?1. 用法:sudo? 你想做的指令? +? 你自己的普通賬號的密碼

  • 這里普通用戶想要短暫獲取超級用戶的權限,竟然只需要知道自己的密碼就可以,那么不是所有人都和root賬號沒區別了么?并不是這樣的。
  • sudo是現代Linux系統安全和管理的最佳實踐之一,在普通賬號創建之初是默認沒有使用sudo的權力的,系統通過白名單(一個特殊的配置文件 /etc/sudoers,這個文件定義了哪些用戶、在哪些主機上、可以以誰的身份、運行哪些命令)機制管理誰可以進行提權操作。將普通用戶添加到這個文件里或者加入一個在sudoers文件中指定的用戶組,這個普通用戶才獲得了使用sudo的資格。
  • 普通用戶想用sudo變身為root,光知道自己的密碼遠遠不夠,最關鍵的是需要root提前在系統里給他“開權限”;一旦開了權限,他的一切超級操作都會被記錄在案,責任到人,這和直接擁有root賬號是完全不同的兩回事。
  • 讓輸入自己的密碼主要是為了安全性和責任追溯,確認是你本人在執行這個特權操作,而不是別人在你忘記鎖屏的電腦上胡亂操作。這強化了“誰操作,誰負責”的原則。系統日志會清晰記錄sudo的使用情況。如果使用統一的root密碼,出了事無法查清是誰干的。同時也減少了root密碼泄露的風險。
[lsy@hcss-ecs-116a ~]$ sudo touch test.txt
[sudo] password for lsy: 
lsy is not in the sudoers file.  This incident will be reported.

sudo可以進行短暫的提權,當我們輸入密碼成功,之后的一段時間(從認證的角度看,默認有效期是15分鐘(可配置))都不用再輸入密碼

角色的問題

1)角色,對于一個文件,存在三種角色。
1. 擁有者(user) --- 文件是誰建的
2. 所屬組(group)?--- 文件屬于哪個組,對文件進行組級別的管理
3. 其他所有用戶(others)--- 不是擁有者,也不是所屬組,就是others

2)權限是依附于角色的,角色是需要人來扮演的。

3)使用 ll 指令查看文件屬性:

屬性從左到右依次為(后面以上圖為例):
1. 文件類型:-
2. 擁有者權限:rw-
3. 所屬組權限:r--
4. others權限:r--
5. 硬鏈接數:1(這個暫時還不需要理解,后面會講到)
6.? 擁有者:root
7. 所屬組:root
8. 文件大小:72
9. 最后一次修改時間:Sep? 8 10:01
10. 文件名:test.txt

1. 顯然,我們可以直接在屬性中查看到文件的擁有者和所屬組是誰,但是沒有單獨列出others,是因為不需要,系統在識別訪問者的角色之后會拿來和擁有者、所屬組對比,如果都不是就認為是others。

2. 單獨的一個人,比如root、lsy...都可以做一個組。

4)什么是所屬組?為什么要有所屬組?
1.?所屬組(Group)是一個用戶的集合。?它是Linux系統中用于組織用戶和管理權限的一個基本單位。
2. 所屬組的意義,簡單來說:在同一個組中,方便一個團隊的伙伴共享資源,卻又能限制其他不在組中的用戶,不能隨意訪問組中資源。所屬組的意義還有很多,詳細地可以問一下大模型!

文件權限屬性問題

1)常見的三個文件屬性
1. 可讀(r)
2. 可寫(w)
3. 可執行(x)

2)1.?

2.?

r 代表角色對文件有可讀權限
w 代表角色對文件有可讀權限
x 代表角色對文件有可執行權限
- 代表沒有某項權限

3. 從左到右必須是rwx的順序,不能像指令選項一樣,隨便交換順序。

?4. 小總結:如何正確描述一個文件的權限(以test.txt為例)
該文件的擁有者是root,所屬組是root。該文件對應的擁有者的權限是可讀可寫不可執行,該文件對應的所屬組的權限為可讀不可寫不可執行,others對該文件的權限是只能讀不可寫不可執行。

權限的指令操作

權限 = 人 + 文件屬性


所以在操作上要么改變人(用戶或角色),要么改變文件屬性(可讀?可寫?可執行?)

1)chmod指令(change mode,改變模式)

文件屬性只有root和文件擁有者能改文件屬性,需要使用chmod指令。

超級用戶的命令行提示符是#,普通用戶的是$

?1. 語法:chmod? 角色名+/-某屬性? 文件名

角色名某屬性
u(擁有者)r(可讀)
g(所屬組)w(可寫)
o(others)x(可執行)
a(all,所有角色)

?2. 示例

[root@hcss-ecs-116a dira]# ll
total 4
-rw-r--r-- 1 root root 72 Sep  8 10:01 test.txt
[root@hcss-ecs-116a dira]# chmod u-r test.txt
[root@hcss-ecs-116a dira]# ll
total 4
--w-r--r-- 1 root root 72 Sep  8 10:01 test.txt
[root@hcss-ecs-116a dira]# chmod u+r,g+rwx test.txt
[root@hcss-ecs-116a dira]# ll
total 4
-rw-rwxr-- 1 root root 72 Sep  8 10:01 test.txt
[root@hcss-ecs-116a dira]# chmod o+wx test.txt
[root@hcss-ecs-116a dira]# ll
total 4
-rw-rwxrwx 1 root root 72 Sep  8 10:01 test.txt
[root@hcss-ecs-116a dira]# chmod a-rwx test.txt
[root@hcss-ecs-116a dira]# ll
total 4
---------- 1 root root 72 Sep  8 10:01 test.txt
[root@hcss-ecs-116a dira]# chmod a+rw test.txt
[root@hcss-ecs-116a dira]# ll
total 4
-rw-rw-rw- 1 root root 72 Sep  8 10:01 test.txt

2)修改文件屬性的八進制方案
1. 對于rwx這按個屬性,一個文件只有? 有(r/w/x)和沒有(-)這兩種狀態,那么我將有認為是1,沒有認為是0,就又可以多出一種修改文件屬性的方案。因為文件屬性是三位一組、一共三組的,而三位二進制數最大能表示到八進制的7,三組并列表示不會進位,剛好是一個八進制數。

2. 比如對于u(擁有者)這一組,我要為他加上所有權限 rwx? =>? 111? =>? 7(轉換為八進制:4+2+1=7)。同理我要g這一組沒有任何權限 ---? =>? 000? =>? 0,o這一組只有只讀屬性 r--? =>? 100? =>? 4。那么三組按順序就是:704。我們可以驗證一下是否像我們預想的設置了文件權限。
3)總結
如何修改文件屬性有兩種方案:
1. ugo +- rwx
2. 八進制方案

沒有權限會怎么樣

1)此時lsy作為擁有者,有對文件的讀寫權限。

2)當去掉他的讀寫權限時:

3)該文件的擁有者和所屬組都是lsy,所以root屬于others,我們去掉others的讀寫權限,發現root依然可以對文件進行讀寫操作。體現了root賬號是Linux中的特權級別,不受權限約束。

4)Q&A
1.? 為什么文件的擁有者要去掉自己的權限?

?① 最主要的原因就是要增強安全性,防止自身的誤操作導致數據丟失或者服務中斷。
合規性與審計要求。確保某些文件(比如財務日志、審計追蹤文件等)不可篡改,滿足監管要求。
③ 其他場景還有很多不同的意義,所以文件擁有者主動放棄自己的一些權限其實是一種更高級、更精細的控制形式,體現對系統安全性和穩定性的深刻理解。

?2. 在2)的例子中,lsy作為文件的擁有者雖然沒有讀寫權限,但是他同時還是文件的所屬組啊,明明所屬組有讀寫權限,為什么事實上lsy不能進行讀寫了?

?因為:用戶訪問文件時,系統就會驗證他的身份,并確定他相對于該文件是什么身份。這個驗證只會做一次(權限只會驗證一次),也就是說系統識別到 lsy 是文件的擁有者之后就確定了他是擁有者,不會再和后面的所屬組比對了。

如何證明呢?

1.? 間接證明:其實這個問題就已經間接證明了,如果會驗證多次的話,在擁有者失去權限時,系統就應該向后匹配是否是所屬組或others,是否有對應的權限。

2.? 直接證明,現在我把擁有者換了,理論上就可以匹配到所屬組這一步了。

(這里用到了一個chown指令,比較見名知意,就是改變文件擁有者的指令,稍后在下面會再正式提出一次)

3. 關于可執行屬性

不是有了可執行屬性文件就可執行了,一個txt文件他也執行不起來啊。可執行屬性相當于給了文件一個入場券,代表著你想執行我不攔著你,但是能不能真正執行起來還要看你自己的本事(是不是一個可執行的二進制文件)。
綜上,文件想要真正的執行起來需要兩個條件
① 文件本身就是一個可執行的二進制文件。
② 文件擁有可執行權限。

權限中與人有關的話題

1)chown指令(change own,更換文件擁有者)
2)chgrp指令(change group,更改文件所屬組)

3)同時改:chown lsy:lsy test.txt
沒有指令:chgrp root:root test.txt

4)沒有單獨改others的指令,因為并不需要,改變擁有者和所屬組就是改變others了(不是擁有者也不是所屬組就是others)

5)從上圖中我們可以看出:作為文件的擁有者,lsy卻不能更改文件的擁有者和所屬組(文件擁有者可以改變各角色的權限),為什么呢?

因為你改一個屬于你的文件的權限那是你自己的事情,允不允許誰看、寫、執行都是你自己的事情。但是想改文件的擁有者和所屬組就和別人有關了,相當于把你這個文件給了別人。現實中你想要把一個東西給別人也要征得別人的同意,因為誰知道你給的是什么,萬一是“臟水”呢,對方可能會被迫承擔責任。
但是我們linux中沒有能去征得對方同意的方法,只能通過超級用戶的權限強行改。但是有強行改的方法如何避免我們可能會被迫承擔責任這件事呢?不用擔心,普通用戶想要提權必須通過sudo,前面也說過了,能使用sudo的一定是系統白名單上的用戶,也有日志記錄易于追責。

文件類型

屬性中第一個位置的-就是文件屬性,它屬于普通文件。當然linux中的文件類型不止這一個(我們只介紹幾個常見的):

類型標識符文件類型名舉例演示指令
-普通文件文本、二進制、圖片、源碼等ll
d目錄文件文件夾ll
l鏈接文件ls /usr/lib64/ -l
p管道文件用于進程間通信,和我們之前提到的管道 | 是一回事,| 是匿名管道,管道文件是命名管道

mkfifo fifo

ll

c字符文件鍵盤、顯示器(按照順序輸入輸出,不支持隨機讀寫。我們printf、scanf、cin、cout操作的都是字符)ls /dev/pts/ -l
b塊設備文件磁盤(典型的塊設備)(支持隨機讀寫,讀寫的基本單位以塊為單位,通常4kb、512字節)ls /dev/vda* -l

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/96044.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/96044.shtml
英文地址,請注明出處:http://en.pswp.cn/web/96044.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

6.python——字符串

python中用’ 和" "創建字符串 python的子字符串截取用[]取字符串拼接可以直接用相加。 python三引號允許一個字符串跨多行,其中無需進行轉義(所見即所得)。 當你需要一塊HTML或者SQL時,這時用字符串組合,特…

足球數據API接口的技術特性與應用價值分析

一、接口概述現代足球數據接口是基于RESTful架構的數據服務,通過標準化方式提供賽事相關信息。這類接口通常采用JSON格式傳輸數據,支持跨平臺調用,為開發者提供結構化的足球賽事數據。二、數據覆蓋范圍主流足球數據接口通常包含以下數據類型&…

<android>反編譯魔改安卓系統應用并替換

我們知道安卓系統基于穩定性、維護便利、性能優化等原因并未對原生系統apk進行混淆加密處理,由此就方便了我們反編譯替換原生應用。 首先我們設備需要是root后的,我是使用的是小米5,刷的24.3版本的面具。首先我們需要取系統apk,這…

【Qt】項目的創建 and 各個控件的使用

一、項目的創建🔍然后點擊新建項目。📖注意:路徑不要帶有中文,不然運行不了代碼。📖qmake是一個構建工具,在 Qt 寫的程序,設計的到一系列的 "元編程" 技術,什么是元編程技…

大模型架構演進全景:從Transformer到下一代智能系統的技術路徑(MoE、Mamba/SSM、混合架構)

當前大模型發展正經歷著一個關鍵的技術分水嶺。雖然Transformer架構自2017年問世以來主導了整個AI領域,但我們正見證著多種創新架構的涌現,每種都在試圖解決Transformer的固有局限。本指南將系統性地解析當前主流架構的技術原理、適用場景與發展趨勢&…

畫世界筆刷合集(2000 + 款):含宮崎駿森系、鴨風人像、國潮等多風格 + 視頻導入教程

預覽: https://blog.csdn.net/2501_93092597/article/details/151330089?spm1011.2415.3001.5331 想在畫世界創作卻缺適配筆刷?手動繪制森系元素、人像細節耗時久,導入筆刷總失敗,找配套背景 / 配色還得跨平臺搜索?這…

03-Redis 安裝指南:從版本選擇到多系統部署(Windows+macOS+Linux)

目錄引言一、安裝 Redis 前必須明確的核心問題二、Redis 版本選擇:穩定版 vs 開發版,該怎么選?2.1 版本規則:看 “次版本號” 辨穩定性2.2 穩定版與開發版核心差異2.3 版本選擇建議三、多系統安裝教程:step-by-step 實…

普通MYSQL數據庫是怎么做sum操作的

MySQL 的 SUM()操作實現是一個結合??執行引擎優化、存儲結構利用和分組算法??的高效過程。以下是其核心實現機制和優化策略:??1. 執行流程概覽??以查詢為例:SELECT department, SUM(salary) FROM employees GROUP BY department;??執行步驟??…

Claude-Flow AI協同開發:基礎入門之 AI編排

1.1 引言:超越“代碼生成器”的革命 在AI輔助開發的浪潮中,我們已經習慣了代碼補全、函數生成等“代碼生成器”工具。它們極大地提升了我們的編碼效率,但通常僅限于解決孤立、單一的問題。當面對一個完整的項目或一個復雜的功能模塊時&#x…

Linux中下載安裝部署Redis7.4.5——并設置用戶名、密碼及其授權的保姆級教程

一、環境準備 環境準備 序號 說明 1 使?RHEL9或Almalinux9.1及其更高版本系統 #查看系統信息 cat /etc/os-release 2 Linux中需要Redis源碼編譯所需的gcc依賴 #1-檢查是否已

健康度——設備健康續航條

在故障診斷與健康管理(PHM)領域和壽命預測領域中,健康度(Health Index, HI)是一個至關重要的概念,它旨在量化設備或系統的當前健康狀態,并為預測其剩余使用壽命(Remaining Useful Li…

【Python - 類庫 - BeautifulSoup】(02)使用“BeautifulSoup“按類名獲取內容

使用BeautifulSoup按類名獲取內容 在本文中,我們將介紹如何使用BeautifulSoup按類名獲取內容的方法。BeautifulSoup是一個用于解析HTML和XML文檔的Python庫。它可以方便地遍歷和搜索文檔樹,使得我們能夠輕松地提取想要的信息。 安裝BeautifulSoup 首先&a…

36.Java序列化與反序列化是什么

36.Java序列化與反序列化是什么 序列化就是把Java對象轉換成字節流(二進制)。 把對象保存到本地文件或網絡傳輸。因為Java對象在JVM的堆內存中,JVM堆不存在了,對象也就不在了。 反序列化就是把字節流轉換為對象 從文件或者網絡里獲…

c#泛型公共類示例

在C#中&#xff0c;泛型類是一種可以操作多種數據類型的類。這使得你可以編寫更靈活、可重用的代碼。泛型類通過在類名后使用尖括號<>和類型參數來定義。類型參數可以是具體的類型&#xff0c;如int或string&#xff0c;也可以是其他泛型類型&#xff0c;甚至是其他泛型類…

深入理解算法效率——時間和空間復雜度詳解

目錄 一、引言&#xff1a;為什么我們需要分析算法效率&#xff1f; 二、算法效率的維度 2.1 時間復雜度&#xff08;Time Complexity&#xff09; 2.2 空間復雜度&#xff08;Space Complexity&#xff09; 三、深入理解算法時間復雜度 3.1 時間復雜度的基礎概念 3.2 大…

排序---冒泡排序(Bubble Sort)

一、算法核心概念 冒泡排序是一種簡單的交換排序算法&#xff0c;其核心思想是&#xff1a;通過重復遍歷待排序數組&#xff0c;每次比較相鄰的兩個元素&#xff0c;若它們的順序錯誤&#xff08;如升序排序中前一個元素大于后一個&#xff09;&#xff0c;則交換它們的位置。經…

MCP(模型上下文協議)入門教程

MCP&#xff08;模型上下文協議&#xff09;入門教程&#xff1a;連接AI與外部世界的萬能插座 1 MCP是什么&#xff1f; 1.1 基本概念 MCP&#xff08;Model Context Protocol&#xff0c;模型上下文協議&#xff09;是一個開放協議&#xff0c;專門用于AI模型與外部數據源和…

GO開發遇到的報錯問題合集

本文將記錄平時在go開發中遇到的一些錯誤信息&#xff0c;踩過的坑&#xff0c;并分析原因及提供解決方法&#xff0c;持續更新中...1、grpc 接口請求報錯&#xff1a;Error: 13 INTERNAL: Response message parsing error: invalid wire type 7 at offset 316原因&#xff1a;…

Node.js 做 Web 后端優勢為什么這么大?

Node.js自誕生以來&#xff0c;一步步演變變為現代Web后端開發的基石之一。無論是初創公司快速構建原型&#xff0c;還是大型企業支撐高并發業務&#xff0c;好像它哪兒哪兒都在&#xff0c;甚至還有人覺得它威脅到了PHP的地位。 那為什么Node.js 做 Web 后端優勢那么大&#x…

JAVA:IO流之字節輸入流InputStream基礎

我們知道&#xff0c;文件是寫在磁盤中的&#xff0c;而程序的運行又要借助于內存。那么怎么實現內存和磁盤的“互動”呢&#xff1f;這就要借助“流”來實現了。內存具體指的就是我們的java程序&#xff0c;而磁盤具體指的是我們的文件。從磁盤到內存叫輸入&#xff0c;從內存…