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
  • 前言 本文介紹一款使用 C# 與 WPF 開發的音頻播放器,其界面簡潔大方,操作體驗流暢。該播放器支持多種音頻格式(如 MP4、WMA、OGG、FLAC 等),並具備標記、實時歌詞顯示等功能。 另外,還支持換膚及多語言(中英文)切換。核心音頻處理採用 FFmpeg 組件,獲得了廣泛認可,目前 Git ...
  • OAuth2.0授權驗證-gitee授權碼模式 本文主要介紹如何筆者自己是如何使用gitee提供的OAuth2.0協議完成授權驗證並登錄到自己的系統,完整模式如圖 1、創建應用 打開gitee個人中心->第三方應用->創建應用 創建應用後在我的應用界面,查看已創建應用的Client ID和Clien ...
  • 解決了這個問題:《winForm下,fastReport.net 從.net framework 升級到.net5遇到的錯誤“Operation is not supported on this platform.”》 本文內容轉載自:https://www.fcnsoft.com/Home/Sho ...
  • 國內文章 WPF 從裸 Win 32 的 WM_Pointer 消息獲取觸摸點繪製筆跡 https://www.cnblogs.com/lindexi/p/18390983 本文將告訴大家如何在 WPF 裡面,接收裸 Win 32 的 WM_Pointer 消息,從消息裡面獲取觸摸點信息,使用觸摸點 ...
  • 前言 給大家推薦一個專為新零售快消行業打造了一套高效的進銷存管理系統。 系統不僅具備強大的庫存管理功能,還集成了高性能的輕量級 POS 解決方案,確保頁面載入速度極快,提供良好的用戶體驗。 項目介紹 Dorisoy.POS 是一款基於 .NET 7 和 Angular 4 開發的新零售快消進銷存管理 ...
  • ABP CLI常用的代碼分享 一、確保環境配置正確 安裝.NET CLI: ABP CLI是基於.NET Core或.NET 5/6/7等更高版本構建的,因此首先需要在你的開發環境中安裝.NET CLI。這可以通過訪問Microsoft官網下載並安裝相應版本的.NET SDK來實現。 安裝ABP ...
  • 問題 問題是這樣的:第三方的webapi,需要先調用登陸介面獲取Cookie,訪問其它介面時攜帶Cookie信息。 但使用HttpClient類調用登陸介面,返回的Headers中沒有找到Cookie信息。 分析 首先,使用Postman測試該登陸介面,正常返回Cookie信息,說明是HttpCli ...
  • 國內文章 關於.NET在中國為什麼工資低的分析 https://www.cnblogs.com/thinkingmore/p/18406244 .NET在中國開發者的薪資偏低,主要因市場需求、技術棧選擇和企業文化等因素所致。歷史上,.NET曾因微軟的閉源策略發展受限,儘管後來推出了跨平臺的.NET ...
  • 在WPF開發應用中,動畫不僅可以引起用戶的註意與興趣,而且還使軟體更加便於使用。前面幾篇文章講解了畫筆(Brush),形狀(Shape),幾何圖形(Geometry),變換(Transform)等相關內容,今天繼續講解動畫相關內容和知識點,僅供學習分享使用,如有不足之處,還請指正。 ...
  • 什麼是委托? 委托可以說是把一個方法代入另一個方法執行,相當於指向函數的指針;事件就相當於保存委托的數組; 1.實例化委托的方式: 方式1:通過new創建實例: public delegate void ShowDelegate(); 或者 public delegate string ShowDe ...