Linux的許可權

来源:https://www.cnblogs.com/alongdidi/archive/2018/12/11/10075377.html
-Advertisement-
Play Games

要瞭解Linux的許可權,需要和Linux的用戶與組的概念一併理解,不瞭解的同學請參考Linux的用戶和組 簡介 在Linux中,每個文件除了有用戶和組的信息以外,還有其對應的許可權。可使用來查看。 看第一個欄位的第二位至第十位,一共九位。 左三位(rw-):表示文件所有者的許可權。 中三位(r--):表 ...


要瞭解Linux的許可權,需要和Linux的用戶與組的概念一併理解,不瞭解的同學請參考Linux的用戶和組

簡介

在Linux中,每個文件除了有用戶和組的信息以外,還有其對應的許可權。可使用來查看。

[root@C7 ~]# ls -l /etc/fstab 
-rw-r--r--. 1 root root 465 Sep 27 15:49 /etc/fstab

 看第一個欄位的第二位至第十位,一共九位。

-rw-r--r--.

左三位(rw-):表示文件所有者的許可權。

中三位(r--):表示文件所有組的許可權。

右三位(r--):表示其他人的許可權。

註意:某個進程對於文件是否具備足夠的許可權,取決於運行該進程的用戶對其的許可權!

進程安全上下文

進程對文件的訪問許可權應用模型:

  1. 檢查進程的屬主是否與文件的屬主一致,若一致則應用文件屬主許可權;否則下一步。
  2. 檢查進程的屬組是否與文件的屬組一致,若一致則應用文件屬組許可權;否則下一步。
  3. 應用文件其他人許可權。

讀寫執行

對於文件:

  • 讀(readable,簡寫r):可以獲取文件的數據。
  • 寫(writable,簡寫w):可以增刪改文件的數據。
  • 執行(executable,簡寫x):若文件為可執行的格式,例如bash腳本、PHP文件等,則可以執行文件。

對於目錄:

  • 讀:可以使用ls命令獲取目錄的內容,不包含ls -l
  • 寫:可以修改目錄列表,即增加、刪除和重命名目錄下的文件。
  • 執行:可以對目錄使用cd和ls -l命令。

許可權組合機制

Linux的許可權除了使用rwx字母表示以外,還可以使用八進位數字表示,如下表所示。

一般我們在使用過程中,也習慣使用八進位表示法。

許可權 二進位 八進位
--- 000 0
--x 001 1
-w- 010 2
-wx 011 3
r-- 100 4
r-x 101 5
rw- 110 6
rwx 111 7

 

 

 

 

 

 

 

 

 

 

 

 

 

 

chmod命令

簡介

chmod用於修改文件的許可權。

普通用戶只能修改屬主為自己的文件,root可以修改所有文件。

語法格式

第一種語法格式表示以字元表示法設置許可權;第二種語法格式表示以八進位表示法設置許可權;第三種語法格式表示參照某個文件設置許可權。

在選項當中,基本只會用到遞歸-R, --recursive(用於修改目錄及其子文件的許可權)和--reference=RFILE(見下文“許可權複製”)

chmod [OPTION]... MODE[,MODE]... FILE...
chmod [OPTION]... OCTAL-MODE FILE...
chmod [OPTION]... --reference=RFILE FILE...

描述

chmod可以根據mode來修改文件的許可權,文件的許可權也叫作mode bits。mode可以是以字元表示法修改許可權或者是以八進位表示法來重置新的許可權。

字元表示法

字元表示法的格式如下。

[ugoa...][[+-=][perms...]...]

ugoa分別表示所有者(user)、所有組(group)、其他(other)和所有人(all)。

perms是具體的許可權,可以為空(表示無許可權)或者為rwxXst中的任意字母。Xst是特殊的許可權,目前暫時不做介紹。 

[root@C7 ~]# ls -l mode.txt
-rw-r--r-- 1 root root 0 Dec  7 16:58 mode.txt
[root@C7 ~]# chmod u+x mode.txt
[root@C7 ~]# ls -l mode.txt
-rwxr--r-- 1 root root 0 Dec  7 16:58 mode.txt
[root@C7 ~]# chmod o-r mode.txt
[root@C7 ~]# ls -l mode.txt
-rwxr----- 1 root root 0 Dec  7 16:58 mode.txt
[root@C7 ~]# chmod g=rw mode.txt
[root@C7 ~]# ls -l mode.txt
-rwxrw---- 1 root root 0 Dec  7 16:58 mode.txt
[root@C7 ~]# ls -l mode.txt
-rwxrw-rw- 1 root root 0 Dec  7 16:58 mode.txt
[root@C7 ~]# chmod a= mode.txt
[root@C7 ~]# ls -l mode.txt
---------- 1 root root 0 Dec  7 16:58 mode.txt

也可以是ugo的任意字母。表示參照其他成員配置許可權。

[root@C7 ~]# ls -l mode.txt
-rwxrw---- 1 root root 0 Dec  7 16:58 mode.txt
[root@C7 ~]# chmod o=g mode.txt
[root@C7 ~]# ls -l mode.txt
-rwxrw-rw- 1 root root 0 Dec  7 16:58 mode.txt

字元表示法可以有多個,使用逗號隔開。

[root@C7 ~]# chmod u=rwx,g=rw,o=r mode.txt
[root@C7 ~]# ls -l mode.txt
-rwxrw-r-- 1 root root 0 Dec  7 16:58 mode.txt

如果省略了ugoa的話,那麼預設表示a,但是如此設置許可權會受到umask的影響。umask後面會做介紹。

[root@C7 ~]# chmod =rwx mode.txt
[root@C7 ~]# ls -l mode.txt
-rwxr-xr-x 1 root root 0 Dec  7 16:58 mode.txt
[root@C7 ~]# umask
0022

操作符“+”表示增加許可權;操作符“-”表示減少許可權;操作符“=”表示增加許可權並刪除沒提到的許可權,除了目錄的SUID和SGID。

八進位表示法

八進位表示法由4位八進位組成,第一位是特殊許可權位表示SUID(4)、SGID(2)或者sticky(1),第二位表示用戶,第三位表示組,第四位表示其他。

不一定要4位都寫出來,省略的話表示前置0。例如

chmod 755 等價於 chmod 0755

chmod 7 不等價於 chmod 0700 而等價於 chmod 0007

chmod與字元鏈接文件

chmod不會修改字元鏈接文件的許可權(因為chmod的系統調用無法做到),而是修改字元鏈接文件所指向的文件的許可權。但是,如果是遞歸修改目錄的話,那麼就會忽略掉目錄下字元連接文件了。

許可權複製

chmod可以以某個文件作為參照物來設置許可權,類似於將某個文件的許可權複製到一個或多個文件上。

[root@C7 ~]# ls -l {1,2,3,refer}.txt
-rw-r--r-- 1 root root 0 Dec 10 15:23 1.txt
-rw-r--r-- 1 root root 0 Dec 10 15:23 2.txt
-rw-r--r-- 1 root root 0 Dec 10 15:23 3.txt
-rwxrwxrwx 1 root root 0 Dec 10 15:22 refer.txt
[root@C7 ~]# chmod --reference=refer.txt {1,2,3}.txt
[root@C7 ~]# ls -l {1,2,3,refer}.txt
-rwxrwxrwx 1 root root 0 Dec 10 15:23 1.txt
-rwxrwxrwx 1 root root 0 Dec 10 15:23 2.txt
-rwxrwxrwx 1 root root 0 Dec 10 15:23 3.txt
-rwxrwxrwx 1 root root 0 Dec 10 15:22 refer.txt
[root@C7 ~]# ls -ld testdir
drwxr-xr-x 2 root root 6 Dec 10 15:24 testdir
[root@C7 ~]# chmod --reference=refer.txt testdir
[root@C7 ~]# ls -ld testdir
drwxrwxrwx 2 root root 6 Dec 10 15:24 testdir

 

 

chown命令

簡介

用於修改文件的屬主/所有者(owner)和屬組/所有組(group),屬主和屬組合起來也稱為ownership。

語法格式

chown [OPTION]... [OWNER][:[GROUP]] FILE...
chown [OPTION]... --reference=RFILE FILE...

 

第一種格式有以下幾種情況:

  1. 僅修改文件的屬主。
    # chown OWNER FILE
  2. 修改文件的屬主和屬組。
    # chown OWNER:GROUP FILE
  3. 修改文件的屬主和屬組,且屬組為屬主的GID。
    # chown OWNER: FILE
  4. 僅修改文件的屬組,效果等同於chgrp,因此本博文不會討論chgrp命令。
    # chown :GROUP FILE

常用選項

--from=[CURRENT_OWNER]:[CURRENT_GROUP]:當且僅當文件的ownership為這裡指定的屬主和屬組的時候,才會修改文件的許可權;如果屬主和屬組都指定了,那麼必須同時滿足才會修改;如果省略了屬主或者屬組,那麼只要滿足了給出的屬主或者屬組,就算會發生修改操作。這個選項在結合-R選項遞歸修改的時候比較有用。

[root@C7 ~]# ls -l 1.txt
-rwxrwxrwx 1 test03 test03 0 Dec 10 15:23 1.txt
[root@C7 ~]# chown --from=:test03 test01:test01 1.txt
[root@C7 ~]# ls -l 1.txt
-rwxrwxrwx 1 test01 test01 0 Dec 10 15:23 1.txt

-H、-L和-P:影響當遞歸一個目錄的時候,如何處理字元鏈接文件的。

 

umask

參考資料:https://wiki.archlinux.org/index.php/umask

在Linux上,當用戶創建文件或者目錄的時候,會自動為文件或者目錄創建一個許可權。

[root@C7 ~]# touch 1.txt
[root@C7 ~]# ls -l 1.txt
-rw-r--r-- 1 root root 0 Dec 10 16:54 1.txt
[root@C7 ~]# mkdir umask_dir
[root@C7 ~]# ls -ld umask_dir
drwxr-xr-x 2 root root 6 Dec 10 16:55 umask_dir

這種機制,我們就叫做Linux的umask。

umask中的u表示user,mask表示掩碼。也就是說umask設置的是創建文件或者目錄的時候,應該被剝奪的許可權。

umask是shell的內置命令,語法格式如下:

umask [-p] [-S] [mode]

不帶選項和參數的時候,是以八進位表示法顯示當前shell中的umask值。

-p和-S也是用於顯示umask的值的。前者的輸出格式可用於再次作為命令執行,後者的輸出格式是字元表示法。

如果加上-S選項以字元表示法顯示的話,那麼顯示的就是ugo目前所具備的許可權,而不是被拿掉的許可權了。

[root@C7 ~]# umask
0022
[root@C7 ~]# umask -p
umask 0022
[root@C7 ~]# umask -S
u=rwx,g=rx,o=rx

只有當需要重新設置umask的時候,才會帶上mode參數。

[root@C7 ~]# umask
0022
[root@C7 ~]# umask 027
[root@C7 ~]# umask
0027

在Linux中,預設不允許文件具備執行的許可權。因此,對於文件的預設創建許可權為“666-umask”,對於目錄的預設創建許可權為“777-umask”。

即便我們設置的umask剛好可以使得文件具備可執行許可權,也是不行的。許可權具體是如何計算的,可以看一下參考資料,涉及一些數學知識,我不太懂。

[root@C7 ~]# umask 023
[root@C7 ~]# touch umask.txt
[root@C7 ~]# ls -l umask.txt
-rw-r--r-- 1 root root 0 Dec 11 16:50 umask.txt

在Linux中,umask只會影響新建文件的ugo的rwx許可權,不會影響新建文件的suid、sgid和sticky許可權。因此umask中的第一個0表示的是八進位,可以省略,而不是表示用來設置suid、sgid和sticky許可權。

[root@C7 ~]# umask 7022
-bash: umask: 7022: octal number out of range
[root@C7 ~]# umask 1022
-bash: umask: 1022: octal number out of range

在當前會話中設置的umask只會在當前的shell(bash)進程中有效,退出會話後就無效了。

要想使其永久生效的話,一般是寫入相關的配置文件中。


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

-Advertisement-
Play Games
更多相關文章
  • 1. 首先繼承一個listbox,來獲得按住ctrl鍵時,點擊的item 2 在listbox 的調用處: 獲得listbox 的選中項:SelectedItemsList 3 在mouseleftdown事件裡面添加處理程式 ...
  • 基於Visual Studio .NET2015的單元測試 如果類或者方法沒有用public修飾,會提示錯誤。 l Assert.Inconclusive() 表示一個未驗證的測試 l Assert.AreEqual() 測試指定的值是否相等,如果相等,則測試通過 l AreSame() 用於驗證指 ...
  • 在開發Winform程式界面的時候,我們往往會使用一些較好看的圖表,以便能夠為我們的程式界面增色,良好的圖標設置可以讓界面看起來更加美觀舒服,而且也比較容易理解,圖標我們可以通過一些網站獲取各種場景的圖標資源,不過本篇隨筆主要介紹如何利用DevExpress的內置圖標資源來實現界面圖標的設置。 ...
  • 在之前有些過一篇文章 "《使用 DryIoc 替換 Abp 的 DI 框架》" ,在該文章裡面我嘗試通過以替換 內部的 來實現使用我們自己的 DI 框架。替換了之後我們基本上是可以正常使用了,不過仍然還存在有以下兩個比較顯著的問題。 1. 攔截器功能無法正常使用,需要重覆遞歸查找真實類型,消耗性能。 ...
  • 上一章我們通過kubectl run簡單運行了一個.netcore網站,但實際的開發中,我們都是通過yaml來實現的。 1.編寫yaml文件 關於yaml文件的格式在此就不多描述了,不熟悉的可以去網上搜一下示例。 2.運行yaml 我們可以查看創建出來的資源 我們可以查看一下我們指定的label 我 ...
  • Linux下經常出現permission denied,原因是由於許可權不足,有很多文章通過chmod命令更改許可權為777,但是很不方便也不適合新手,簡單粗暴的方法如下: 命令行中輸入 sudo passwd 他會提示你輸入新密碼,再次輸入密碼,就輸入以前的一樣的就行,成功之後,輸入 su root ...
  • 初識filebeat ...
  • 一、VM虛擬機添加一個網路適配器。 選擇自己需要的模式類型 二、啟動虛擬機,配置網卡 按原先配置網卡的方式配置完(ip地址及預設網關還有網卡名不能跟原先的一樣) 重啟所有網卡(service network restart)後檢查網卡 三、測試新增網卡環境 關閉原先網卡,檢查新增網卡是否能與外網鏈接 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...