7-Linux操作系統 許可權管理

来源:https://www.cnblogs.com/ljygzyblog/archive/2023/10/07/Linux_7.html
-Advertisement-
Play Games

一、許可權介紹 在Linux中分別有讀、寫、執行許可權: 讀許可權: 對於文件夾來說,讀許可權影響用戶是否能夠列出目錄結構 對於文件來說,讀許可權影響用戶是否可以查看文件內容 寫許可權: 對文件夾來說,寫許可權影響用戶是否可以在文件夾下“創建/刪除/複製到/移動到”文檔 對於文件來說,寫許可權影響用戶是否可以編輯文 ...


一、許可權介紹

在Linux中分別有讀、寫、執行許可權:

讀許可權:

  對於文件夾來說,讀許可權影響用戶是否能夠列出目錄結構

  對於文件來說,讀許可權影響用戶是否可以查看文件內容

寫許可權:

  對文件夾來說,寫許可權影響用戶是否可以在文件夾下“創建/刪除/複製到/移動到”文檔

  對於文件來說,寫許可權影響用戶是否可以編輯文件內容,複製,刪除,移動

執行許可權:

  一般都是對於文件來說,特彆腳本文件。

  對於文件來說,執行許可權影響文件是否可以運行。

  對於文件夾來說,執行許可權影響對應的用戶是否可以在文件夾內執行指令

二、身份介紹

1、Owner身份(文件所有者,預設為文檔的創建者)

  由於Linux是多用戶、多任務的操作系統,因此可能常常有多人同時在某台主機上工作,但每個人均可在主機上設置文件的許可權,讓其成為個人的“私密文件”,即個人所

有者。因為設置了適當的文件許可權,除本人(文件所有者)之外的用戶無法查看文件內容。

  例如某個MM給你發了一封Email情書,你將情書轉為文件之後存檔在自己的主文件夾中。為了不讓別人看到情書的內容,你就能利用所有者的身份去設置文件的適當權

限,這樣,即使你的情敵想偷看你的情書內容也是做不到的。

2、Group身份(與文件所有者同組的用戶)

  與文件所有者同組最有用的功能就體現在多個團隊在同一臺主機上開發資源的時候。例如主機上有A、B兩個團體(用戶組),A中有a1,a2,a3三個成員,B中有b1,b2兩個

成員,這兩個團體要共同完成一份報告F。由於設置了適當的許可權,A、B團體中的成員都能互相修改對方的數據,但是團體C的成員則不能修改F的內容,甚至連查看的許可權都沒

有。同時,團體的成員也能設置自己的私密文件,讓團隊的其它成員也讀取不了文件數據。在Linux中,每個賬戶支持多個用戶組。如用戶a1、b1即可屬於A用戶組,也能屬於B

用戶組【主組和附加組】

3、Others身份(其他人,相對於所有者與同組用戶)

  這個是個相對概念。打個比方,大明、二明、小明一家三兄弟住在一間房,房產證上的登記者是大明(owner所有者),那麼,大明一家就是一個用戶組,這個組有大明、

二明、小明三個成員;另外有個人叫張三,和他們三沒有關係,那麼這個張三就是其他人(others)了。

  同時,大明、二明、小明有各自的房間,三者雖然能自由進出各自的房間,但是小明不能讓大明看到自己的情書、日記等,這就是文件所有者(用戶)的意義。

4、Root用戶(超級用戶)

  在Linux中,還有一個神一樣存在的用戶,這就是root用戶,因為在所有用戶中它擁有最大的許可權 ,所以管理著普通用戶。因此以後在設置文檔的許可權的時候不必考慮root

用戶。

三、Linux許可權查看

  要設置許可權,就需要知道文件的一些基本屬性和許可權的分配規則。在Linux中,ls命令常用來查看文檔的屬性,用於顯示文件的文件名和相關屬性。

  ls -l 路徑 【ls -l 等價於 ll】

  標紅的部分就是Linux的文檔許可權屬性信息。

  Linux中存在用戶(owner)、用戶組(group)和其他人(others)概念,各自有不同的許可權,對於一個文檔來說,其許可權具體分配如下:

十位字元表示含義:

  第1位:表示文檔類型,取值常見的有“d表示文件夾”、“-表示文件”、“l表示軟連接”、“s表示套接字”、“c表示字元設備”、“b表示塊狀設備”等等;

  第2-4位:表示文檔所有者的許可權情況,第2位表示讀許可權的情況,取值有r、-;第3位表示寫許可權的情況,w表示可寫,-表示不可寫,第4位表示執行許可權的情況,取值有

x、-。

  第5-7位:表示與所有者同在一個組的用戶的許可權情況,第5位表示讀許可權的情況,取值有r、-;第6位表示寫許可權的情況,w表示可寫,-表示不可寫,第7位表示執行許可權

的情況,取值有x、-。

  第8-10位:表示除了上面的前2部分的用戶之外的其他用戶的許可權情況,第8位表示讀許可權的情況,取值有r、-;第9位表示寫許可權的情況,w表示可寫,-表示不可寫,第10

位表示執行許可權的情況,取值有x、-。

  註意:除了許可權位上的rwx以及-之外,還有一些特殊的許可權代碼“s”、“t”,這些不在本次考慮範圍內。

  許可權分配中,均是rwx的三個參數組合,且位置順序不會變化。沒有對應許可權就用 – 代替。

四、許可權設置(重點)

語法:#chmod [選項] 許可權模式 文檔

註意事項:

  常用選項:

  -R:遞歸設置許可權 (當文檔類型為文件夾的時候)

  許可權模式:就是該文檔需要設置的許可權信息

  文檔:可以是文件,也可以是文件夾,可以是相對路徑也可以是絕對路徑。

註意點:如果想要給文檔設置許可權,操作者要麼是root用戶,要麼就是文檔的所有者。

1、字母形式

給誰設置:

u:表示所有者身份owner(user)

g:表示給所有者同組用戶設置(group)

o:表示others,給其他用戶設置許可權

a:表示all,給所有人(包含ugo部分)設置許可權

如果在設置許可權的時候不指定給誰設置,則預設給所有用戶設置

許可權字元:

r:讀

w:寫

x:表示執行

-:表示沒有許可權

許可權分配方式:

+:表示給具體的用戶新增許可權(相對當前)

-:表示刪除用戶的許可權(相對當前)

=:表示將許可權設置成具體的值(註重結果)【賦值】

設置多個身份的許可權時候,每個身份之間需要通過英文逗號分開。

例如:需要給/root/anaconda-ks.cfg文件(-rw-------.)設置許可權,要求所有者擁有全部的許可權,同組用戶擁有讀和寫許可權,其他用戶只讀許可權。

答案:

所有者(u):rwx

同組用戶(g):rw

其他用戶(o):r

方式1:

#chmod u=rwx,g=rw,o=r 1.txt

方式2:

#chmod u-x,g=r,o=r 1.txt

提示:當文檔擁有執行許可權(任意部分),則其顏色在終端中是綠色。

#chmod ug=rwx 形式,如果有兩部分許可權一樣則可以合在一起寫

等價於:

#chmod u=rwx,g=rwx

例如:如果anaconda-ks.cfg文件什麼許可權都沒有,可以使用root用戶設置所有的人都有執行許可權,則可以寫成

什麼許可權都沒有應該是:----------

目標的效果:---x--x--x

#chmod a=x anaconda-ks.cfg

#chmod a+x anaconda-ks.cfg

#chmod u+x,g+x,o+x anaconda-ks.cfg

#chmod ugo=x anaconda-ks.cfg

#chmod ugo+x anaconda-ks.cfg

#chmod +x anaconda-ks.cfg

案例:設置文件“~/yunwei/yunwei.txt”許可權,要求所有者全部許可權,同組用戶擁有讀許可權、寫許可權,其他人擁有讀許可權

#chmod u=rwx,g=rw,o=r ~/yunwei/yunwei.txt

更改要求:所有者全部許可權,同組用戶擁有讀許可權、寫許可權,其他人擁有讀許可權、寫許可權

練習:

①設置文件夾/tmp/yunwei的許可權(如果文件夾不存在,自行創建),要求許可權為遞歸許可權,並且所有者有全部許可權,同組用戶有讀執行許可權,其他用戶只讀許可權;

②設置文件/tmp/yunwei/class04.sh許可權,文件如果不存在則自行創建,要求許可權為所有者全部許可權,同組用戶讀和執行許可權,其他用戶沒有許可權;

③使用普通用戶在/tmp/yunwei目錄下創建test目錄,設置目錄許可權為所有者擁有全部許可權,同組用戶只讀,其他用戶只讀;

2、數字形式

經常會在一些技術性的網頁上看到類似於#chmod 777 a.txt 這樣的一個許可權,這種形式稱之為數字形式許可權(777)。

讀:r 4

寫:w 2

執行:x 1

沒有任何許可權(-):0

例如:需要給anaconda-ks.cfg設置許可權,許可權要求所有者擁有全部許可權,同組用戶擁有讀執行許可權,其他用戶只讀。

分析:、

所有者:全部許可權 = 讀 + 寫 + 執行 = 4 + 2 + 1 = 7

同組用戶:讀執行許可權 = 讀 + 執行 = 4 + 1 = 5

其他用戶:只讀許可權 = 讀 = 4

最終得出的結果是754

#chmod 754 anaconda-ks.cfg

面試題:用超級管理員設置文檔的許可權命令是#chmod -R 731 aaa,請問這個命令有沒有什麼不合理的地方?

所有者 = 7 = 4 + 2 + 1 = 讀 + 寫 + 執行

同組用戶 = 3 = 2 + 1 = 寫 + 執行

其他用戶 = 1 = 執行

  問題在許可權731中3表示寫+執行許可權,但是寫又不必須需要能打開之後才可以寫,因此必須需要具備讀許可權,因此許可權不合理。以後建議各位在設置許可權的時候不要設置這

種“奇葩許可權”。單獨出現2、3的許可權數字一般都是有問題的許可權

註意:在寫許可權的時候千萬不要設置類似於上面的這種“奇葩許可權”。如果一個許可權數字中但凡出現2與3的數字,則該許可權有不合理的情況。

練習:

  ①使用root用戶設置文件夾/root/20180811的許可權為:所有者全部許可權,同組用戶擁有讀和執行許可權,其他用戶沒有許可權,請使用數字許可權的形式設置,寫出指令;750

  ②請使用root用戶寫出設置文件/root/20180811.txt文件的許可權,許可權要求為:所有者擁有全部許可權,同組用戶要求可以讀寫,其他用戶只讀,要求使用數字形式;764

  ③張三瘋(root)收到某個MM的情書,請使用數字形式設置張三瘋的Email情書許可權(文件為/root/email.doc),許可權要求只有所有者可以讀寫,除此之外任何人沒有權

限;600

3、註意事項

使用root用戶創建一個文件夾(/oo),許可權預設,許可權如下:

需要在oo目錄下創建文件(oo/xx.txt),需要給777許可權:

擴展:

在Linux系統中,創建文檔的許可權有一個預設值,以當前的系統為例,其創建文件夾之後的預設許可權是755,創建文件之後的許可權是644。

之所以會這樣是受到了系統中umask(掩碼)的值的影響,其是用於指定文檔創建好之後的許可權,umask預設為022。

計算方式:

對於文件:文件的許可權 = 666 – umask掩碼、

對於文件夾:文件夾的許可權 = 777 - umask掩碼

切換到zhang用戶(不是文檔所有者,也不是同組用戶,屬於other部分):

問題1:zhang用戶是否可以打開oo/xx.txt文件?

問題2:zhang用戶是否可以編輯oo/xx.txt文件?

問題3:zhang用戶是否可以刪除oo/xx.txt文件?

在Linux中,如果要刪除一個文件,不是看文件有沒有對應的許可權,而是看文件所在的目錄是否有寫許可權,如果有才可以刪除

五、屬主與屬組

屬主:所屬的用戶(文件的主人),文檔所有者

屬組:所屬的用戶組(同組用戶的組名稱)

前面的那個root就是屬主

後面的那個root就是屬組

這兩項信息在文檔創建的時候會使用創建者的信息(用戶名、用戶所屬的主組名稱)。

之所以需要設置這個:如果有時候去刪除某個用戶,則該用戶對應的文檔的屬主和屬組信息就需要去修改(類似離職之前的工作交接)。

1、chown(重點)

作用:更改文檔的所屬用戶(change owner)

語法:#chown [-R] 新的username 文檔路徑

案例:將先前設置的1.txt目錄的所有者設置成成lijingyi

#chown -R lijingyi /1.txt

可以更改所屬的用戶,也可以修改所屬的用戶組

chown [-R] username:groupname 文檔路徑

案例:將剛纔1.txt的文檔的所屬組所屬用戶修改為root

#chown -R guozhengyuan:guozhengyuan /1.txt

     

2、chgrp

作用:更改文檔的所屬用戶組(change group)

語法:#chgrp [-R] groupname 文檔的路徑

案例:將剛纔oo目錄的所有用戶組名改為guozhengyuan

#chgrp -R guozhengyuan /1.txt

六、sudo

問題:reboot、shutdown、init、halt,在普通用戶身份上都是操作不了,但是有些特殊的情況下又需要有執行許可權。又不可能讓root用戶把自己的密碼告訴普通用戶,這個問題該怎麼解決?

該問題是可以被解決的,可以使用sudo(switch user do)命令來進行許可權設置。Sudo可以讓管理員(root)事先定義某些特殊命令誰可以執行(事先放權規則)

預設sudo中是沒有除root之外用戶的規則,要想使用則先配置sudo。

Sudo配置文件:/etc/sudoers

該文件預設只讀,不允許修改,因此不能直接修改。

a. 配置sudo文件請使用“#visudo”,打開之後其使用方法和vim一致

b. 配置普通用戶的許可權

Root表示用戶名,如果是用戶組,則可以寫成“%組名”

ALL:表示允許登錄的主機(地址白名單)

(ALL):表示以誰的身份執行,ALL表示root身份、

ALL:表示當前用戶可以執行的命令,多個命令可以使用“,”分割

一般需要調整的就是用戶/用戶組名稱與可以執行的指令名。

案例:使用zhang這個用戶,賦予其添加用戶許可權。

註意:在寫sudo規則的時候不建議寫直接形式的命令,而是寫命令的完整路徑

路徑可以使用which(whereis亦可)命令來查看

語法:#which 指令名稱

whereis會找出一些非可執行文件,建議使用which

在普通用戶下怎麼查看自己具有哪些特殊許可權呢?

例如:sudo -l

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

-Advertisement-
Play Games
更多相關文章
  • 二:Java 基礎知識 一、標識符和關鍵字 1. 標識符 1. 在java語言中,用來標誌類名、對象名、變數名、方法名、類型名、數組名、包名的有效字元序列,稱為“標識符”; 2. 標識符由字母、數字、下劃線、美元符號組成,且第一個字元不能是數字; 3. java語言區分大小寫; 4. 標誌符命名規則 ...
  • (1)前言:總結三次題目集的知識點、題量、難度等情況 第一次的作業基本就是熟悉一下java基本的語法,這部分Java就算需要自學也並不算難,並且本身就有了一些c語言的基礎,作業的問題主要是我們對於輸入輸出和判斷迴圈語句的使用,總體的難度很低。第二次的作業就是類的使用以及私有化和相關封裝。第三次是是除 ...
  • Dart語言是純面向對象的編程語言,就算是函數(對象的成員函數一般稱為方法)也是對象,它也有類型,那麼函數也可以作為其他函數的參數,或者賦值給其他變數。除此之外,Dart中的函數還有什麼特別之處、它有什麼規則和約束…… ...
  • 相信小伙伴們在日常的開發中,調試代碼時,免不了經常修改代碼,這個時候,為了驗證效果,必須要重啟 Spring Boot 應用。 頻繁地重啟應用,導致開發效率降低,加班隨之而來。有沒有什麼辦法,能讓 Spring Boot 項目熱部署呢,從而不用每次都手點。答案是肯定的。 第一步:添加 spring- ...
  • Capstone 是一款開源的反彙編框架,目前該引擎支持的CPU架構包括x86、x64、ARM、MIPS、POWERPC、SPARC等,Capstone 的特點是快速、輕量級、易於使用,它可以良好地處理各種類型的指令,支持將指令轉換成AT&T彙編語法或Intel彙編語法等多種格式。Capstone的... ...
  • Seata 簡介 傳統的單體應用中,業務操作使用同一條連接操作不同的數據表,一旦出現異常就可以整體回滾。隨著公司的快速發展、業務需求的變化,單體應用被拆分成微服務應用,原來的單體應用被拆分成多個獨立的微服務,分別使用獨立的數據源,業務操作需要調用三個服務來完成。此時每個服務內部的數據一致性由本地事務 ...
  • Css實現瀏覽滾動條效果 前言 也是有大半個月沒有更新文章了,大部分時間都在玩,然後就是入職的事。今天就更新一個小知識,刷抖音的時候看到的,感覺還不錯。 屬性介紹 關鍵屬性animation-timeline:動畫名稱; 用於控制動畫的時間軸。它可以讓你在一個元素上同時播放多個動畫,控制它們的開始時 ...
  • 一、官網下載JDK1.8 https://www.oracle.com/java/technologies/oracle-java-archive-downloads.html JDK1.8 因為1.8是目前項目中用到最多的 基本都是基於JDK1.8 可以直接在虛擬機中的瀏覽器訪問下載,但是嘗試過的 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...