linux是多用戶操作系統,一臺服務器,可能有開發、運維、測試等多個部門構成,同時還有有一個超級管理員root,也就是項目負責人CTO負責整個項目的進度周期。
為什么要給文件設置權限
首先,Linux是多用戶操作系統,一臺服務器,可能有開發、運維、測試等多個部門構成,同時還有有一個超級管理員root,也就是項目負責人CTO負責整個項目的進度周期。
然而,Linux中的命令十分靈活,專業度要求也很高,如果一個剛剛實習的程序員擁有root權限,不小心刪除了重要文件或者數據,就可能導致整個項目付之一炬。或者員工離職跑路直接刪除公司數據庫,這樣的案例業內屢見不鮮。
因此,就要給每個用戶分配不同權限,比如,每個用戶對自己創建的文件擁有最高權限,同時,開發組內用戶對組內文件可以進行修改。每個操作都有日志記錄。然而,開發組員工進入運維組目錄,只可以觀看,不可以更改。每個部門再設置一個共享目錄,共享目錄都不可以修改,只有將內容拷貝到自己的目錄下才可以修改。
這樣,才可以更好的保障Linux系統的安全性,一方面防止自己內部人員危險操作,另一方面也可以防止黑客入侵,即時黑客破解了某個用戶的賬號密碼,由于權限有限,也難以進行大規模損害操作。
權限的基本概念
Linux下一切皆文件,不同的用戶對文件擁有不同的權限。在多用戶計算機系統的管理中,權限是指某個特定的用戶具有特定的系統資源使用權利。
在Linux 中分別有讀、寫、執行權限:
|
權限針對文件 |
權限針對目錄 |
讀r |
表示可以查看文件內容 |
表示可以查看目錄中存在的文件名稱 |
寫w |
表示可以更改文件的內容 |
表示是否可以刪除目錄中的子文件或者新建子目錄( |
執行x |
表示是否可以開啟文件當中記錄的程序,一般指二進制文件(.sh) |
表示是否可以進入目錄中 |
查看文件權限
Linux中,不同用戶角色創建文件默認權限不同,root用戶創建文件默認權限如上圖所示。
- -代表文件類型是一個普通文件
- 紅框代表文件擁有者user
- 綠框代表文件所屬組group組內其他用戶
- 藍框代表其他用戶other
- 如果是目錄,文件類型為d
文件類型
Linux一共有7種文件類型,分別如下:
- -:普通文件
- d:目錄文件
- l: 軟鏈接(類似windows的快捷方式)
- b:block,塊設備文件(例如硬盤、光驅等)
- p:管道文件
- c:字符設備文件
- s:套接口文件/數據接口文件
文件權限設置-字母
chmod [選項] 權限設置 文件或目錄的名稱
選項說明:
-R :遞歸設置,針對文件夾(目錄)
權限設置:
1:確認要給哪個身份設置權限,u、g、o、ugo(a)
2:確認是添加權限(+)、刪除權限(-)還是賦予權限(=)
3:確認給這個用戶針對這個文件或文件夾設置什么樣的權限,r、w、x
sudo chmod -R ugo=rwx AA/
sudo chmod -R a=rwx AA/
文件權限設置-數字
權限 |
對應數字 |
意義 |
r |
4 |
可讀 |
w |
2 |
可寫 |
x |
1 |
可執行 |
- |
0 |
沒有權限 |
chmod 777 1.txt
文件擁有者和所屬組設置
擁有者設置
chown [選項] 新文件擁有者名稱 文件名稱
選項說明:
-R :代表遞歸修改,主要針對文件夾
chown blackcat 1.txt
所屬組設置
chgrp [選項] 新文件所屬組名稱 文件名稱
選項說明:
-R : 代表遞歸修改,主要針對文件夾
同時修改擁有者和所屬組
chown [選項] 文件擁有者名稱:文件所屬組名稱 文件名稱
或
chown [選項] 文件擁有者名稱.文件所屬組名稱 文件名稱
選項說明:
-R : 代表遞歸修改,主要針對文件夾
特殊權限
冒險位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
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
示例-給用戶組增加acl權限:
setfacl -m g:blackcat:rw 2.txt
示例-給用戶組刪除acl權限:
setfacl -x g:blackcat 2.txt
示例-刪除所有權限:
setfacl -b 1.txt
mask權限設置:
setfacl -m m::r 1.txt
目錄遞歸授權