Linux的文件許可權管理

来源:https://www.cnblogs.com/heyongshen/archive/2023/03/14/17213795.html
-Advertisement-
Play Games

Linux文件許可權管理介紹 一:Ubuntu 簡介 1 、什麼是Ubuntu Ubuntu是基於Debian開發的一個開源的Linux操作系統,Ubuntu這個名字名稱來⾃⾮洲南部某種語言的一個詞語,Ubuntu每6個月會發佈⼀個新版本,每隔兩年,在四月份的時候,會推出⼀個⻓期⽀持版本(LTS)。其 ...


Linux文件許可權管理介紹

一:Ubuntu 簡介

1 、什麼是Ubuntu

Ubuntu是基於Debian開發的一個開源的Linux操作系統,Ubuntu這個名字名稱來⾃⾮洲南部某種語言的一個詞語,Ubuntu每6個月會發佈⼀個新版本,每隔兩年,在四月份的時候,會推出⼀個⻓期⽀持版本(LTS)。其⽀持期⻓達五年,⽽⾮ LTS 版本的⽀持期通常只有半年。

ubuntu的第⼀個版本是發佈於2004 年,所以Ubuntu的⽣⽇是2004年的10⽉20⽇,後面Ubuntu版本的命名規則是根據正式版發佈的年⽉命名,Ubuntu 16.04 也就意味著 2016年4⽉發佈的Ubuntu。

https://baike.baidu.com/item/ubuntu # Ubuntu歷史版本⼀覽表

image

2、使用ubuntu的場景

  • 桌面應用程式:Ubuntu 提供了一個易於使用的桌面環境,適合日常電腦使用。
  • 伺服器:Ubuntu 是一個流行的伺服器操作系統,因為它提供了高度可定製的安裝選項,安全更新和廣泛的應用程式支持。
  • 雲計算:Ubuntu 在雲計算中也很流行,因為它提供了雲服務商所需的安全性、性能和可擴展性等關鍵功能。
  • 物聯網:Ubuntu 可以作為 IoT 設備的操作系統,它提供了穩定的核心操作系統,同時也提供了與雲服務連接和遠程管理的工具。
  • 開發:Ubuntu 內置了各種編程語言和工具,適合開發者進行軟體開發和測試

3、Ubuntu 的軟體管理

剛開始的時候,開源軟體最初只提供了源碼,安裝軟體的時候需要自行編譯安裝,但是編譯安裝存在很多依賴,這樣就造成了早期軟體的部署困難。

後面Debian誕生的時候,開發了一個包管理工具dpkg,通過將編譯好的二進位文件、配置文件、庫文件和幫助文件等信息封裝在一個軟體包裡面,通過dpkg工具來進行快速安裝。

因為ubuntu是基於Debian開發而來的,所以ubutu也繼承了Debian的軟體包和包管理工具等。

離線安裝:

如果是離線安裝,就使用dpkg這個工具,並且dpkg只能用來管理本地的軟體包,需要將指定的軟體包下載到本地才可以使用dpkg進行管理,並且dpkg只能管理.deb格式的軟體包。dpkg安裝軟體包的時候不會自動解決軟體包之間的依賴關係。

線上安裝:

如果是線上安裝,就使用apt(Advanced Package Tool)這個工具,apt是一個高級軟體包管理工具,只能線上管理軟體包,只需要提供軟家源就可以線上下載安裝。並且可以自動解決軟體包的依賴關係。apt工具也是基於dpkg開發而來的。

dpkg 的使用

# 安裝
    # 通常用於查詢已安裝的軟體包的信息。 -I
    sudo dpkg -I pacakage_name
 
# 卸載刪除
	# 刪除已經安裝在系統上的軟體包(包括配置文件) -P 或者 --purge 
	sudo dpkg -p package_name
 
# 查看
    # 用於查看系統中都裝了哪些軟體包  -l 或 list
    sudo dpkg -l 

    # 查看已安裝的軟體包的文件路徑
    sudo dpkg -L  pacakage_name

    # 查詢某個文件屬於哪個軟體包。 -S
    sudo dpkg -S file_name

    # 詢軟體包的基本信息,不需要詳細信息 -s
    sudo dpkg -s package_name 

    # 查詢軟體包的詳細信息 -p
    sudo dpkg -p package_name 

例如:查看系統中是否已經安裝了指定的軟體包

root@ubuntu:~# dpkg -l | grep redis
ii  libhiredis0.14:amd64                       0.14.0-6                              amd64        minimalistic C client library for Redis
ii  redis-server                               5:5.0.7-2ubuntu0.1                    amd64        Persistent key-value database with network interface
ii  redis-tools                                5:5.0.7-2ubuntu0.1                    amd64        Persistent key-value database with network interface (client)

例如:查詢ls屬於哪個軟體包

[root@ubuntu1804 ~]#dpkg -S /bin/ls
coreutils: /bin/ls

apt的使用

apt這個工具是在ubuntu1604的LTS版本中引入的,引入apt以後,將之前的apt-get、apt-cache等工具對軟體包的操作整合到一個命令中,使得軟體包管理更加方便和簡單。

例如:

# 更新軟體包列表: update
sudo apt update

# 升級所有已安裝的軟體包: upgrade
sudo apt upgrade

# 安裝一個或多個軟體包: install
sudo apt install package1 package2 ...

# 卸載一個或多個軟體包:	remove或purage
sudo apt remove package1 package2 ...  # 只會卸載軟體包,不會刪除相關的配置文件
sudo apt purge  package1 package2 ...  # 卸載軟體包時,刪除相關配置文件

# 清理本地軟體包緩存: clean
sudo apt clean

# 顯示軟體包之間的依賴關係: depends
apt depends package_name

# 只下載deb包和這個包的依賴,不進行安裝  --download-only
sudo apt --download-only install package_name

# 查看下載的軟體包和依賴: /var/cache/apt/archives/是預設的軟體包下載目錄
ls /var/cache/apt/archives/

例如:查看keepalived這個軟體包的依賴信息

# 查看某個軟體包的依賴信息時,需要先在系統中安裝了該軟體包才能查看其依賴信息。
[root@ubuntu1804 ~]#apt depends keepalived
keepalived
 Depends: iproute2
   iproute2:i386
 Depends: libc6 (>= 2.27)
 Depends: libglib2.0-0 (>= 2.26.0)
 Depends: libip4tc0 (>= 1.6.0+snapshot20161117)
 Depends: libip6tc0 (>= 1.6.0+snapshot20161117)
 Depends: libnl-3-200 (>= 3.2.27)
 Depends: libnl-genl-3-200 (>= 3.2.7)
 Depends: libnl-route-3-200 (>= 3.2.7)
 Depends: libsnmp30 (>= 5.7.3+dfsg-1.8ubuntu3.1~dfsg)
 Depends: libssl1.1 (>= 1.1.0)
 Depends: libxtables12 (>= 1.6.0+snapshot20161117)
 Recommends: ipvsadm

二:Linux目錄結構

Linux的哲學思想:

  • 一切皆文件(包括硬體):將設備也視為一個文件,使得用戶可以使用相同的命令和工具來管理文件和設備
  • 配置存放在文本文件中:將配置保存在文本文件中,可以讓配置的查看、編輯更加方便。

1、Linux的目錄結構

image

目錄的功能:

  • bin:binary。的相關目錄存放的是二進位程式(所有人都可執行的二進位文件)
  • sbin :super binary。 管理員可以執行的二進位文件
  • boot: 和電腦啟動相關的文件,如內核等文件
  • dev: device。 存放硬體設備
  • etc:et cetera, 相當於windows的註冊表,存放各種程式的配置文件
  • home: 普通用戶的家目錄
  • usr: 相當於第二個根(usr下麵的文件夾根下麵都有,相當於windows系統下的windows這個文件夾的功能
  • run: 系統運行過程中生成的臨時文件
  • tmp: 臨時文件
  • var:variety 。存放經常變化的內容 ,比如日誌、網站
  • lib: library。存放庫文件,程式的依賴等內容
  • proc: process 。存放進程相關的信息
  • sys: 和硬體相關的文件,數據存放在記憶體中的

2、Linux文件的類型

  • - :普通文件
  • d :目錄文件directory
  • l :符號鏈接文件link
  • b :塊設備block ,例如硬碟文件,訪問的時候是一塊一塊訪問的
  • c :字元設備character。訪問的時候是一個字元一個字元訪問的
  • p : 管道文件pipe
  • s :套接字文件socket

3、Linux 文件的顏色

  • 綠色: 可執行文件

  • 紅色: 壓縮文件、打包文件

  • 白色: 文本文件

  • 藍色: 目錄文件

  • 黃色: 設備文件

  • 淺藍色: 鏈接文件(軟連接)

image

Linux 查看文件的類型:

方法一:通過顏色判斷

方法二:通過ls -l或者file命令查看

三:Linux用戶管理

Linux用戶分類:

image

相關文件:

/etc/passwd:存儲系統中所有用戶的信息,例如用戶名、用戶ID、用戶主目錄和預設shell等

可以通過查看/etc/passwd內容來確定系統是否存在指定的用戶。

# 查看passwd文件的方式
root@ubuntu1804:~# cat /etc/shadow | grep nginx
nginx:!:19339::::::

# 使用id命令進行查看
root@ubuntu1804:~# id nginx
uid=999(nginx) gid=999(nginx) groups=999(nginx)

/etc/shadow:存儲用戶的密碼和其他敏感信息

1、useradd

useradd用於創建用戶。

#選項
-s   # 指定該用戶使用的shell類型
-u   # 指定uid ,不指定預設從1000開始
-r   # 創建系統用戶,也就是 UID 在 1~499 之間,供系統程式使用的用戶。
       # 由於系統用戶主要用於運行系統所需服務的許可權配置,因此系統用戶的創建預設不會創建主目錄
-d   # 指定家目錄,這個目錄要提前存在
-p   # 指定用戶的密碼(需要的是加密的密碼,明文密碼不可以
-m   # 建立用戶時強制建立用戶的家目錄。在建立系統用戶時,該選項是預設的
-g   # 指定用戶所屬於的主要組
-G   # 指定用戶的附加組。我們把用戶加入其他組,一般都使用附加組;

例如:創建一個普通用戶指定家目錄

#創建一個普通用戶指定家目錄
root@ubuntu1804:~# useradd -m bob 

root@ubuntu1804:~# ll -d /home/bob/
drwxr-xr-x 2 bob bob 4096 Dec  8 14:28 /home/bob//

root@ubuntu1804:~# id bob 
uid=1001(bob) gid=1001(bob) groups=1001(bob)

例如:創建系統用戶:

# 1.先創建組 使用 -g指定gid
# 2.創建系統用戶 使用-r表示創建系統用戶 使用 -u指定uid 使用-g指定組
# 這樣做的好處是多台伺服器上創建的用戶gid、uid保持一致

#系統用戶的uid和gid範圍是1-999
root@ubuntu1804:~# groupadd -g 666 bob

root@ubuntu1804:~# useradd -r -s  /sbin/nologin -u 666 -g bob  user1

root@ubuntu1804:~# id user1	
uid=666(user1) gid=666(bob) groups=666(bob)  

2、userdel

userdel用於刪除系統中指定的用戶

# userdel [-r] user_name 添加-r參數就刪除用戶的所有信息。

root@ubuntu1804:~# userdel -r bob
userdel: bob mail spool (/var/mail/bob) not found

3、usermod

更改用戶的相關信息

# 修改用戶的用戶名:使用 -l 選項:
usermod -l 新用戶名 老用戶名

# 修改用戶的家目錄:使用 -d 選項:
usermod -d /新的/家目錄 要修改的用戶名

# 修改用戶的預設 shell:使用 -s 選項:
usermod -s /bin/bash 要修改的用戶名

# 將用戶添加到一個或多個附加組中:使用 -aG 選項,-a 選項表示將用戶添加到附加組中,而不是替換用戶的組
usermod -aG 組名 要修改的用戶名

四:Linux 組管理

在Linux中的每個用戶必須屬於一個組,不能獨立於組外。一般創建用戶的時候會以該用戶的名稱為組名創建一個用戶組。

相關文件;

/etc/gshadow文件

存儲用戶組的密碼和其他敏感信息。

/etc/group文件

存儲系統中所有用戶組的信息,可以通過這個文件查看是否存在指定的用戶組。

/etc/login.defs文件

用於配置Linux系統中各種登錄相關的預設值和策略信息。

1、groupadd

用於創建一個用戶組。

例如:

sudo groupadd group_name

# 參數
	-g:指定gid,未指定系統隨機分配
	-r:創建系統用戶組,系統用戶組通常用於管理系統進程和服務

2、groupdel

用於刪除一個用戶組。

例如:

sudo groupdel group_name

# 參數
	-f:強制刪除,不管該組中是否還存在用戶,慎用,強制刪除可能會導致一些問題。
	-r:刪除組時,同時刪除與該組相關的文件和目錄

3、groupmod

用於修改一個組的信息。

例如:

sudo groupmod group_name

# 參數
	-g:設置用戶的gid
	-n:--new-name,修改組名

五:Linux文件許可權

在Linux操作系統中,因為設計思想就是一切皆文件,所以可以針對文件或目錄所設定的訪問許可權控制規則。這些許可權規則可以控制不同用戶或用戶組對文件或目錄的讀、寫、執行等操作許可權。

1、文件許可權的組成

由三部分組成:所有者許可權、群組許可權和其他用戶許可權。每個用戶或用戶組在訪問文件或目錄時,都會受到這三個許可權規則的限制。

說明:root用戶例外。

2、文件的許可權屬性

Linux的文件許可權屬性用10個字元表示,分為四部分。

  • 第一部分:一個字元來表示文件的類型
  • 第二部分:三個字元表示文件的所有者
  • 第三部分:三個字元表示文件的所屬組
  • 第四部分:三個字元表示文件的其它用戶許可權

image

許可權屬性說明:

r(讀)、w(寫)、x(執行)和 -(無許可權)

普通文件

  • 讀許可權(r)表示可以讀取文件內容。如果沒有讀許可權,則用戶無法查看文件內容
  • 寫許可權(w)表示可以修改文件內容,如沒有寫許可權,則用戶無法修改文件內容
  • 執行許可權(x)表示可以將文件作為可執行文件執行,如果沒有執行許可權,則用戶無法運行可執行文件

目錄文件:

  • 讀取許可權(r):表示允許查看目錄中的文件列表。如果沒有讀取許可權,則用戶無法查看目錄列表。
  • 寫入許可權(w):表示可以在目錄中創建、刪除、重命名、移動文件或目錄
  • 執行許可權(x):表示允許進入該目錄。如果沒有執行許可權,則用戶無法進入該目錄。

目錄文件的最小許可權:

目錄文件的最小許可權是可執行許可權,因為目錄是一種特殊的文件類型,用於存儲其他文件和目錄。對於一個目錄來說,必須擁有執行許可權才能進入這個目錄。

如果一個目錄沒有執行許可權,那麼用戶就不能進入這個目錄,也就無法訪問該目錄下的任何文件或子目錄,即使這些文件或子目錄的訪問許可權是允許的,所以目錄的最小許可權是可執行許可權。

例如:執行 cp /etc/issue /data/dir/ 所需要的最小許可權?

/bin/cp     # 需要x許可權,需要對cp有可執行的許可權
/etc/       # 需要x許可權,需要進入到etc目錄下
/etc/issue  # 需要r許可權,需要能讀取issue文件的內容
/data       # 需要x許可權,需要能進入data目錄下
/data/dir   # 需要w,x許可權,需要能進入dir目錄,並且能在下麵創建一個叫做issue的文件。

3、文件所有者

文件所有者指的是創建該文件的用戶的UID或進程的UID,這個UID會被寫入文件的元數據中作為文件的所有者屬性,文件所有者屬性不會隨著文件的複製或移動而改變。

如何理解文件所有者指的是創建該文件的用戶的UID或進程的UID

例如當tom用戶執行touch命令創建一個文件A的時候,因為touch的本質就是一個用戶空間的應用程式,當在終端中輸入touch命令並按下回車鍵時。系統會為該命令創建一個新進程,並將該進程的有效用戶ID設置為tom的UID,然後,該進程創建文件A時,文件A的所有者就會被設置為該進程的有效用戶ID,也就是tom的UID。因此,文件A的所有者就是tom用戶。

如何理解文件的所有者和所屬組不會隨著文件的移動而改變:

例如創建了一個新文件A,文件系統會為這個新文件A分配一個唯一的inode號,併在系統中為其分配空間,在文件系統中,每個文件都有一個與之相關聯的inode數據結構,這個數據介面就是用來存放文件屬性信息的包括文件所有者、所屬組、許可權等,創建文件的時候就把A文件的所有者屬性寫入文件的inode中了,當使用mv命令將文件從一個目錄移動到另一個目錄時,實際上是在文件系統中修改了文件的路徑。文件本身的內容和屬性不會被修改,包括文件的所有者和所屬組。因此,無論您將文件移動到哪個目錄,文件的所有者和所屬組都將保持不變。

註意:複製的本質就是創建一個新的文件,使用cp命令將文件複製到另一個目錄中,則複製的文件將具有與原始文件相同的所有者和所屬組。

六:Linux文件許可權管理

Linux文件許可權包含了普通許可權,特殊許可權,特殊屬性和ACL。

1、預設許可權屬性

在Linux中,新建文件時,文件的預設許可權由umask的值來進行控制。umask是一個許可權掩碼,它會在創建新文件時掩蓋某些預設許可權。

  • root用戶:umask 預設值通常是 0022
  • 普通用戶: umask 預設值通常是 0002
# 查看umask預設值
root@ubuntu1804:~# umask 
0022

如何計算文件的預設許可權:

普通文件預設許可權: 666 - umask,如果值為奇數就 + 1

目錄文件預設許可權 :777 - umask

計算普通文件預設許可權的時候結果是奇數需要 +1的原因:

因為結果存在奇數,說明包含有可執行許可權,所以需要 +1 來保證這個文件預設不具備可執行許可權,保證系統的安全。

計算普通文件使用666和計算目錄使用777的原因:

為了保證目錄文件預設就有可執行許可權,不然用戶沒法訪問,因為只有擁有可執行許可權的目錄,才能讓用戶進入並訪問該目錄下的文件和子目錄(目錄的執行許可權表示是否允許訪問該目錄)。

普通文件不需要考慮可執行許可權,擁有可執行許可權太危險,所以就使用666(包含了讀和寫許可權)來計算預設許可權。

root用戶創建的文件許可權和普通用戶創建的文件許可權不同的原因:

root用戶和普通用戶的umask值預設是不同是為了保護系統的安全和完整性,併為不同的用戶角色提供不同的預設許可權。

對於普通用戶來說:只需要考慮對自己的文件和目錄具有讀、寫、執行的許可權,預設即拒絕組和其他用戶的寫許可權。所以預設的umask是002。所以普通用戶創建的文件和目錄的預設許可權是 664 和 775

對於root用戶來說:因為root用戶具有系統管理的特權,需要確保文件和目錄對所有用戶都是可讀的,但只有所有者才能修改或刪除它們。所以預設的umask是022,所以root 用戶創建的文件和目錄的預設許可權是 644 和 755

一個文件是否能被刪除取決於這個文件所在目錄的許可權:

一個文件是否能被刪除和自身許可權無關,取決於這個文件所在的目錄文件是否對執行刪除操作的用戶具有寫許可權。

2、修改預設的許可權

chown工具

用於更改文件或目錄的所有者,同時也可以用於更改文件所屬組。

更改文件所有者:

chown owner file_name

# 將/home/user1/file.txt的所有者更改為user2
chown user2 /home/user1/file.txt

更改文件所屬組:

chown :group file_name 或 chown .group file_name

更改文件所有者和所屬組:

chown ower:group file_name 或 chown ower.group file_name 

更改一個目錄文件以及目錄文件中所有文件的屬性:

# 需要使用 -R 參數進行遞歸修改
chown -R ower:group file_name 或 chown ower.group file_name 

chgrp工具

用於更改文件的所屬組

例如:更改文件或目錄的所屬組

chgrp group_name file_name

# 將/home/user1/file.txt的所屬組更改為dev
chgrp dev /home/user1/file.txt

chmod工具

方法一:符號法:

# who opt permission(誰對誰做什麼操作)
    who:u,g,o,a (a:all,所有)
    opt: + - = (=:會修改用戶的所有許可權)
    permission:r,w,x
  
  owner 屬主, u
  group 屬組, g
  other 其他, o

  r Readable
  w Writable
  x eXcutable

例如:

# 給文件所有者加上可執行許可權
chmod u+x filename 

# 讓文件所有者只有r的許可權
chmod u=r file_name 

# 給文件所有者讀寫執行許可權,給所屬組讀和執行許可權,不給其它用戶任何許可權
chmod u=rwx,g=rx,o= file_name

方法二:數字表示法

在Linux系統中,文件和目錄的許可權可以用數字表示法來表示。

數字表示法由三個八進位數字組成,每個數字代表一個許可權組,從左到右依次是文件所有者許可權、文件所屬組許可權和其他用戶許可權。

一個八進位數字可以表示三個二進位數字,意味著可以用二進位位表示一個許可權標誌。

例如:如果一個文件的許可權是755

7 --> 111(0b) 
5 --> 101(0b)
5 --> 101(0b)

# 這三個二進位數字從左到右分表表示讀、寫、執行三種許可權屬性。如果該位的狀態為1表示具備對應的許可權。

例如:給文件所有者讀寫執行許可權,所見所屬組讀許可權,其它用戶讀許可權

chmod 754 file_name 

3、文件的三種特殊許可權

SUID許可權

作用:允許一個普通用戶以該文件所有者的許可權來執行該文件。

例如:

普通用戶使用 passwd 命令修改自己的密碼時,需要訪問 /etc/shadow 文件,但是該文件只有 root 用戶才有許可權訪問。

為了允許普通用戶修改自己的密碼,passwd 程式需要擁有 SUID 許可權,這樣普通用戶在運行 passwd 程式時,就會暫時獲得 root 用戶的許可權,可以訪問 /etc/shadow 文件並修改自己的密碼。

ehigh@ubuntu:~$ ll /etc/shadow
-rw-r----- 1 root shadow 1697 5月  24  2022 /etc/shadow

ehigh@ubuntu:~$ ls -l /usr/bin/passwd
-rwsr-xr-x 1 root root 68208 7月  15  2021 /usr/bin/passwd

SGID許可權

作用:讓用戶在運行某些程式時暫時獲得程式所屬組的許可權。

例如:需要多個用戶共用一個目錄並保持目錄下文件的訪問許可權時非常有用

Sticky Bit許可權

作用:該目錄下的文件只能由文件的所有者、目錄的所有者以及超級用戶刪除或移動,其他用戶無法刪除或移動該目錄下的文件。

例如:linux系統的/tmp這個臨時文件目錄就設置了stick bit許可權,只允許文件所有者刪除這個文件。

ehigh@ubuntu:~$ ll -d /tmp/
drwxrwxrwt 24 root root 4096 3月  13 09:20 /tmp/

4、三個特殊許可權的設置

SUID許可權設置

如果文件設置了 suid 許可權,則在文件所有者的可執行許可權的位置上會顯示一個 s 字元。

# 方法一:字元法:u+s
chmod u+s filename  

# 方法二:先寫出傳統許可權 然後再加4
# 比如: 傳統許可權是755 加suid許可權後: 4755 ---> rwsr-xr-x
chomod 4755 filename

SGID許可權設置

如果文件設置了 sgid 許可權,則在文件所屬組的可執行許可權的位置上會顯示一個 s 字元。

# 方法一:字元法:g+s
chmod g+s filename

# 方法二:數字法: 2
# 比如:傳統許可權是755 加sgid許可權後: 2755 ---> rwsr-xr-x
chmod 2775 filename

Sticky Bit許可權設置

如果文件設置了 sticky bit 許可權,則在其他用戶的可執行許可權的位置上會顯示一個 t 字元.

# 方法一:字元法:o+t
chmod o+t filename

#方法二:數字法 1
例如:原來的許可權是744,設置了Sticky Bit許可權後是 1744
chmod 1744 filename

5、文件的特殊屬性

因為文件的所有者、所屬組和其它這三種許可權是不會限制root用戶的操作。

root 用戶是系統的超級管理員,具有最高的許可權,可以執行任何操作,包括讀、寫、執行任何文件,即使該文件的許可權是 000(即沒有任何許可權),root 用戶也可以對其進行讀寫操作。

所以有些時候為了防止root用戶誤操作一些數據,可以給文件設置一些特殊屬性來限制對文件的刪除、修改、追加等操作,從而保護文件的安全性。

chattr工具

可以通過charrt工具來設置文件的特殊屬性。

語法:

# 格式
	chattr [選項] [+/-][屬性] 文件名

# 選項:
    -R:遞歸處理目錄下的所有文件和子目錄
    -v:顯示文件的屬性設置過程
    
# + -
	+:表示添加這個屬性
	-:表示取消這個屬性

# 屬性
    a:
    	# 普通文件:表示只允許追加到文件中,不允許其它修改、刪除、移動等操作;
    	# 目錄文件:表示只能在目錄中建立和修改文件,但是不允許刪除文件
    i:
    	# 普通文件:設置文件為不可修改,不可刪除;
    	# 目錄文件: 只能修改目錄下文件中的數據,但不允許建立和刪除文件
    	
   	u:文件刪除後,數據內容還保存在磁碟中,可以使用恢復工具進行恢復,常用來防止意外刪除文件或目錄。
   	

例如:

# 設置文件為只讀模式
ehigh@ubuntu:~/test$ sudo chattr +i a.txt 
ehigh@ubuntu:~/test$ sudo rm -rf a.txt 
rm: cannot remove 'a.txt': Operation not permitted

# 防止文件被刪除或改變
ehigh@ubuntu:~$ sudo chattr +a a.txt 
ehigh@ubuntu:~$ echo 1234 >> a.txt 

ehigh@ubuntu:~$ echo 1234 > a.txt 
-bash: a.txt: Operation not permitted

lsattr工具

通過lsattr可以查看某個文件是否設置了特殊屬性。

例如:

root@ubuntu1804:~# lsattr test 
----i---------e--- test

6、ACL

ACL:Access Control List,訪問控制列表。一種在文件系統上控制文件和目錄許可權的機制。

允許用戶在不更改所有權或許可權模式的情況下,對文件和目錄進行更細粒度的控制。

主要是用於實現單獨給某個用戶設置許可權,因為chmod只能整體給文件所有者、所屬組和其它用戶設置許可權。

setfacl工具

setfacl工具是Linux系統中用於設置文件和目錄訪問控制列表(ACL)的工具,ACL可以授予用戶和組不同於標準Unix許可權的訪問許可權。

例如:

設置acl:

# 格式
	setfacl -m u:username:rwx filename

# 設置tom用戶對A文件有讀寫執行的許可權 
	root@ubuntu1804:~# setfacl -m  u:tom:rwx A

刪除acl:

# 刪除某個文件所有的acl設置
	setfacl -b filename

# 刪除ACL中的一個特定條目
	setfacl -x u:username filename

修改acl:

# 格式
	setfacl -m u:username:rx filename

# 修改tom對A文件的許可權為讀和執行
	root@ubuntu1804:~# setfacl -m  tom:r-x A

getfacl工具

使用getfacl可以查看一個文件是否設置了acl,以及acl的詳細信息。

# 格式
	getfacl filename

# 查看A文件的acl信息
    root@ubuntu1804:~# getfacl A
    # file: A
    # owner: root
    # group: root
    user::rw-
    user:tom:rwx 
    group::r--
    mask::rwx
    other::r--

image

7、mask

mask 是用來限制了除了文件所有者和所屬組之外的其他用戶或組的許可權,因為文件所有者和所屬組本來就有文件所有權和群組許可權,不受 ACL 許可權的限制。

說明:

設置了acl後,使用ls -l命令查看文件許可權時,所屬組現實的許可權是mask的值,真正的組的許可權是getfacl中的group。

#  原文件許可權
root@ubuntu1804:~# ll -l test 
-rw-r--r-- 1 root root 10485760 Mar 13 15:23 test

#設置acl 
root@ubuntu1804:~# setfacl -m u:tom:rwx test 

# 所屬組許可權這兒顯示的是mask的值
root@ubuntu1804:~# ls -l test 
-rw-rwxr--+ 1 root root 10485760 Mar 13 15:23 test

# group顯示的才是所屬組的許可權
root@ubuntu1804:~# getfacl test 
# file: test
# owner: root
# group: root
user::rw-
user:tom:rwx
group::r--
mask::rwx
other::r--

總結:

  • 如果沒有設置acl,那麼使用ls -l 命令看到的許可權屬性就是文件所有者、文件所屬組和其它用戶的許可權屬性信息。
  • 如果設置了acl,使用ls -l命令查看的時候,原來文件所屬組的位置顯示的就是mask許可權的值。

七:文件許可權的生效順序

不設置ACL,文件許可權的生效順序:

從左到右匹配,匹配到了就不匹配了

例如:

文件A的許可權是rw-rw-r,如果一個用戶tom需要對A文件進行寫操作,會先判斷tom是否是A文件的所有者,如果是就不在匹配,不是就繼續匹配。

設置了ACL後,文件許可權的生效順序:

文件件所有者 -->自定義的用戶(單獨給文件設置的acl許可權) --> 文件所屬組 --> 自定義的組(acl中定義的) --> other(其它用戶)

目錄文件下的兩個特殊文件:

root@ubuntu1804:~/nginx-1.20.2# ls -a
.  ..  auto  CHANGES  CHANGES.ru  conf  configure  contrib  html  LICENSE  Makefile  man  objs  README  src

# .  :表示的是當前文件的一個硬鏈接,
# .. :表示的是當前文件所在目錄的一個硬鏈接
  • . 代表當前目錄,是當前目錄的一個硬鏈接。
  • .. 代表上一級目錄,是上級目錄的一個硬鏈接。

在linux中,創建一個文本文件鏈接數為1,創建一個目錄文件鏈接數為2的原因:

  • 普通文件: 創建一個新文件時,鏈接數為1的原因是該文件自己就是自己的一個硬鏈接。
  • 目錄文件:創建要給目錄文件時,鏈接數為2的原因是創建新目錄的同時會在這個目錄的內部創建一個名字位 . 的硬鏈接

例如:創建一個目錄文件xx,使用stat命令查看該文件和該文件下的.文件,發現inode號相同,說明是同一個文件。

image


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

-Advertisement-
Play Games
更多相關文章
  • 主要步驟: ChatGPT 的回答: 你可以嘗試使用 Visual Studio 創建一個類庫項目,然後將你寫的兩個類添加到該項目中,併進行編譯,最終生成 DLL 文件。具體步驟如下: 打開 Visual Studio,選擇 "文件" -> "新建" -> "項目"; 在 "新建項目" 視窗中,選擇 ...
  • #4. 自定義配置提供程式 在 .NET Core 配置系統中封裝一個配置提供程式關鍵在於提供相應的 IconfigurationSource 實現和 IConfigurationProvider 介面實現,這兩個介面在上一章 ASP.NET Core - 配置系統之配置提供程式 中也有提到了。 I ...
  • consul 是一個用來做服務發現的框架,具有分散式、高可用以及可橫向擴展的特性 什麼是服務發現?為什麼要實現服務發現? 舉個常見的例子: 假設有一臺 client 想要實現不同的業務,就需要調用介面去訪問後端的server 那這樣 client 就需要知道後端 server 的網路配置,通常是將 ...
  • DNS功能變數名稱系統服務 1.DNS 介紹 1.1什麼是功能變數名稱? 功能變數名稱(Domain Name),簡稱功能變數名稱、網域,是由一串用點分隔的名字組成的Internet上某一臺電腦或電腦組的名稱,用於在數據傳輸時標識電腦的電子方位。具有獨一無二,不可重覆的特性。 1.2什麼是 DNS? 功能變數名稱系統(Domain ...
  • iptables是一個Linux內核中的包過濾工具,可以用來過濾、轉發、修改、控制網路流量等。如果想要將主機的所有流量轉發至其他機器,可以使用iptables進行配置。 以下是具體步驟: 1. 首先需要在其他機器上開啟轉發功能,可以使用以下命令開啟: echo 1 > /proc/sys/net/i ...
  • 初識 chrony chrony 是網路時間協議(Network Time Protocol )的通用實現 它不但可以提供保持系統時間與 NTP 時鐘伺服器同步的服務,還能作為 NTP 伺服器對其他伺服器提供時間同步服務 chrony 特點: 任何情況下都能穩定良好運行(例如不穩定的網路中、不穩定的 ...
  • 項目中有個需求是要對文本內容檢索並重寫,我們使用的是 WriteFile 覆蓋舊的文本內容 最小示例: #include <Windows.h> #include <iostream> int main() { HANDLE hFile = CreateFile(L"File.txt", // Op ...
  • Linux操作系統是一種多任務、多用戶的操作系統,這意味著它可以同時運行多個進程,每個進程都可以執行不同的任務。 在本文中,我們將介紹如何在Linux系統中創建和銷毀進程。 進程的創建 在Linux系統中,進程的創建可以通過fork()系統調用來實現。 fork()函數將當前進程複製一份,創建一個新 ...
一周排行
    -Advertisement-
    Play Games
  • Dapr Outbox 是1.12中的功能。 本文只介紹Dapr Outbox 執行流程,Dapr Outbox基本用法請閱讀官方文檔 。本文中appID=order-processor,topic=orders 本文前提知識:熟悉Dapr狀態管理、Dapr發佈訂閱和Outbox 模式。 Outbo ...
  • 引言 在前幾章我們深度講解了單元測試和集成測試的基礎知識,這一章我們來講解一下代碼覆蓋率,代碼覆蓋率是單元測試運行的度量值,覆蓋率通常以百分比表示,用於衡量代碼被測試覆蓋的程度,幫助開發人員評估測試用例的質量和代碼的健壯性。常見的覆蓋率包括語句覆蓋率(Line Coverage)、分支覆蓋率(Bra ...
  • 前言 本文介紹瞭如何使用S7.NET庫實現對西門子PLC DB塊數據的讀寫,記錄了使用電腦模擬,模擬PLC,自至完成測試的詳細流程,並重點介紹了在這個過程中的易錯點,供參考。 用到的軟體: 1.Windows環境下鏈路層網路訪問的行業標準工具(WinPcap_4_1_3.exe)下載鏈接:http ...
  • 從依賴倒置原則(Dependency Inversion Principle, DIP)到控制反轉(Inversion of Control, IoC)再到依賴註入(Dependency Injection, DI)的演進過程,我們可以理解為一種逐步抽象和解耦的設計思想。這種思想在C#等面向對象的編 ...
  • 關於Python中的私有屬性和私有方法 Python對於類的成員沒有嚴格的訪問控制限制,這與其他面相對對象語言有區別。關於私有屬性和私有方法,有如下要點: 1、通常我們約定,兩個下劃線開頭的屬性是私有的(private)。其他為公共的(public); 2、類內部可以訪問私有屬性(方法); 3、類外 ...
  • C++ 訪問說明符 訪問說明符是 C++ 中控制類成員(屬性和方法)可訪問性的關鍵字。它們用於封裝類數據並保護其免受意外修改或濫用。 三種訪問說明符: public:允許從類外部的任何地方訪問成員。 private:僅允許在類內部訪問成員。 protected:允許在類內部及其派生類中訪問成員。 示 ...
  • 寫這個隨筆說一下C++的static_cast和dynamic_cast用在子類與父類的指針轉換時的一些事宜。首先,【static_cast,dynamic_cast】【父類指針,子類指針】,兩兩一組,共有4種組合:用 static_cast 父類轉子類、用 static_cast 子類轉父類、使用 ...
  • /******************************************************************************************************** * * * 設計雙向鏈表的介面 * * * * Copyright (c) 2023-2 ...
  • 相信接觸過spring做開發的小伙伴們一定使用過@ComponentScan註解 @ComponentScan("com.wangm.lifecycle") public class AppConfig { } @ComponentScan指定basePackage,將包下的類按照一定規則註冊成Be ...
  • 操作系統 :CentOS 7.6_x64 opensips版本: 2.4.9 python版本:2.7.5 python作為腳本語言,使用起來很方便,查了下opensips的文檔,支持使用python腳本寫邏輯代碼。今天整理下CentOS7環境下opensips2.4.9的python模塊筆記及使用 ...