天天看點

Linux系統設定檔案權限,多使用者模式下檔案權限管理

作者:黑貓程式設計

為什麼要給檔案設定權限

首先,Linux是多使用者作業系統,一台伺服器,可能有開發、運維、測試等多個部門構成,同時還有有一個超級管理者root,也就是項目負責人CTO負責整個項目的進度周期。

Linux系統設定檔案權限,多使用者模式下檔案權限管理

然而,Linux中的指令十分靈活,專業度要求也很高,如果一個剛剛實習的程式員擁有root權限,不小心删除了重要檔案或者資料,就可能導緻整個項目付之一炬。或者員工離職跑路直接删除公司資料庫,這樣的案例業内屢見不鮮。

Linux系統設定檔案權限,多使用者模式下檔案權限管理

是以,就要給每個使用者配置設定不同權限,比如,每個使用者對自己建立的檔案擁有最高權限,同時,開發組内使用者對組内檔案可以進行修改。每個操作都有日志記錄。然而,開發組員工進入運維組目錄,隻可以觀看,不可以更改。每個部門再設定一個共享目錄,共享目錄都不可以修改,隻有将内容拷貝到自己的目錄下才可以修改。

這樣,才可以更好的保障Linux系統的安全性,一方面防止自己内部人員危險操作,另一方面也可以防止黑客入侵,即時黑客破解了某個使用者的賬号密碼,由于權限有限,也難以進行大規模損害操作。

Linux系統設定檔案權限,多使用者模式下檔案權限管理

權限的基本概念

Linux下一切皆檔案,不同的使用者對檔案擁有不同的權限。在多使用者計算機系統的管理中,權限是指某個特定的使用者具有特定的系統資源使用權利。

Linux系統設定檔案權限,多使用者模式下檔案權限管理

在Linux 中分别有讀、寫、執行權限:

權限針對檔案 權限針對目錄
讀r 表示可以檢視檔案内容 表示可以檢視目錄中存在的檔案名稱
寫w 表示可以更改檔案的内容 表示是否可以删除目錄中的子檔案或者建立子目錄(
執行x 表示是否可以開啟檔案當中記錄的程式,一般指二進制檔案(.sh) 表示是否可以進入目錄中

檢視檔案權限

Linux系統設定檔案權限,多使用者模式下檔案權限管理

Linux中,不同使用者角色建立檔案預設權限不同,root使用者建立檔案預設權限如上圖所示。

Linux系統設定檔案權限,多使用者模式下檔案權限管理

-代表檔案類型是一個普通檔案

紅框代表檔案擁有者user

綠框代表檔案所屬組group組内其他使用者

藍框代表其他使用者other

如果是目錄,檔案類型為d

Linux系統設定檔案權限,多使用者模式下檔案權限管理

檔案類型

Linux一共有7種檔案類型,分别如下:

-:普通檔案

d:目錄檔案

l: 軟連結(類似Windows的快捷方式)

b:block,塊裝置檔案(例如硬碟、光驅等)

p:管道檔案

c:字元裝置檔案

s:套接口檔案/資料接口檔案

檔案權限設定-字母

chmod [選項] 權限設定 檔案或目錄的名稱

選項說明:
-R :遞歸設定,針對檔案夾(目錄)           

權限設定:

1:确認要給哪個身份設定權限,u、g、o、ugo(a)

2:确認是添權重限(+)、删除權限(-)還是賦予權限(=)

3:确認給這個使用者針對這個檔案或檔案夾設定什麼樣的權限,r、w、x

Linux系統設定檔案權限,多使用者模式下檔案權限管理
sudo chmod -R ugo=rwx AA/
sudo chmod -R a=rwx AA/           

檔案權限設定-數字

權限 對應數字 意義
r 4 可讀
w 2 可寫
x 1 可執行
- 沒有權限
chmod 777 1.txt            
Linux系統設定檔案權限,多使用者模式下檔案權限管理

檔案擁有者和所屬組設定

擁有者設定

chown [選項] 新檔案擁有者名稱 檔案名稱
選項說明:
-R :代表遞歸修改,主要針對檔案夾           
chown blackcat 1.txt            
Linux系統設定檔案權限,多使用者模式下檔案權限管理

所屬組設定

chgrp [選項] 新檔案所屬組名稱 檔案名稱
選項說明:
-R : 代表遞歸修改,主要針對檔案夾           
Linux系統設定檔案權限,多使用者模式下檔案權限管理

同時修改擁有者和所屬組

chown [選項] 檔案擁有者名稱:檔案所屬組名稱 檔案名稱
或
chown [選項] 檔案擁有者名稱.檔案所屬組名稱 檔案名稱
選項說明:
-R : 代表遞歸修改,主要針對檔案夾           
Linux系統設定檔案權限,多使用者模式下檔案權限管理

特殊權限

冒險位SETUID(針對二進制檔案)

作用:為了讓一般使用者臨時具有該檔案所屬主/組的執行權限。

例如:/usr/bin/passwd在執行它的時候需要去修改/etc/passwd和/etc/shadow等檔案,這些檔案除了root外,其他使用者都沒有寫權限,但是又為了能讓普通使用者修改自己的密碼,那麼該如何操作?

去除S位權限

chmod u-s /usr/bin/passwd 
或者
chmod 0755 /usr/bin/passwd           

添加S位權限

chmod u+s /usr/bin/passwd
或者
chmod 4755 /usr/bin/passwd           

強制位SETGID(針對目錄)

作用:如果一個目錄有強制位,那麼任何使用者在該目錄裡所建立的檔案屬組都會繼承該目錄的屬組。

去除S位權限

chmod g-s 目錄名           

添加S位權限

chmod g+s 目錄名
或
chmod 2xxx 目錄名           

粘附位T(針對目錄)

作用:隻允許檔案的建立者和root使用者删除檔案(防止誤删除權限位)

去除粘附位

chmod -R o-t /share
或
chmod -R 0777 /share           

添加粘附位

chmod -R o+t /share
或
chmod -R 1777 /share           
Linux系統設定檔案權限,多使用者模式下檔案權限管理

umask

umask表示建立檔案時的預設權限(即建立檔案時不需要設定而天生的權限)

我們建立一個普通檔案最高權限666,而建立一個檔案夾其最高權限777。

實際檔案權限 = 最高權限 - umask的值

擷取使用者umask值

umask

0022

注:0022中第一位0代表特殊權限位,可以不設定。
umask的預設值,在root和普通使用者下是不一樣的,分别是022和002           

修改umask值(一般不要更改)

臨時修改

umask 002

777 - 002 = 775           

永久修改

vim ~/.bashrc 
1:在檔案末尾添加umask 002
2:儲存退出 
3:新開終端生效           

ACL權限

ACL,是 Access Control List(通路控制清單)的縮寫,在 Linux 系統中, ACL 可實作對單一使用者或者某個組設定通路檔案的權限,ACL優勢就是讓權限控制更加的精準。

安裝acl

apt install acl            

擷取ACL權限

getfacl 檔案或目錄名稱           

設定ACL權限

setfacl [選項] 檔案或目錄名稱

選項說明:
-m : 修改acl政策
-x : 去掉某個使用者或者某個組的權限
-b : 删除所有的acl政策
-d : 該目錄下建立的檔案和目錄都會繼承acl政策,但已存在的沒有
-R : 該目錄下已存在的檔案和目錄都會繼承acl政策,但建立的沒有
mask :指的是使用者或群組能擁有的最大ACL權限,也就是說,給使用者或群組設定的ACL權限不能超過mask規定的權限範圍,超出部分做無效處理。           
示例-給使用者增加acl權限:
setfacl -m u:hioier:rw 1.txt

示例-給使用者删除acl權限:
setfacl -x u:hioier 1.txt            
Linux系統設定檔案權限,多使用者模式下檔案權限管理
Linux系統設定檔案權限,多使用者模式下檔案權限管理
示例-給使用者組增加acl權限:
setfacl -m g:blackcat:rw 2.txt

示例-給使用者組删除acl權限:
setfacl -x g:blackcat 2.txt            
Linux系統設定檔案權限,多使用者模式下檔案權限管理
Linux系統設定檔案權限,多使用者模式下檔案權限管理
示例-删除所有權限:
setfacl -b 1.txt             

mask權限設定:

setfacl -m m::r 1.txt             
Linux系統設定檔案權限,多使用者模式下檔案權限管理

目錄遞歸授權

Linux系統設定檔案權限,多使用者模式下檔案權限管理
Linux系統設定檔案權限,多使用者模式下檔案權限管理

視訊講解

視訊加載中...

相關推薦

  • 什麼是Linux系統?我們是否要用Linux
  • 學習Linux指令行,用手就行!
  • Linux神之編輯器VIM,史上最強編輯器!
  • 遠端登入Linux伺服器,SSH加密傳輸協定,一種更安全的協定
  • Linux如何建立使用者,支援多使用者共同使用的作業系統
  • 什麼是C++程式設計,經久不衰的老牌程式設計語言
  • 什麼是C++變量,就是存儲資料的盒子

繼續閱讀