Linux - 許可權管理(檔案)
阿新 • • 發佈:2020-11-28
一:基本許可權
1.基本許可權介紹
基本許可權型別
型別 | 全拼 | 釋義 | 許可權位 |
---|---|---|---|
r | read | 可讀 | 4 |
w | write | 可寫 | 2 |
x | execute | 可執行 | 1 |
許可權的歸屬
歸屬 | 字母 |
---|---|
屬主 | u |
屬組 | g |
其他使用者 | o |
2.設定許可權
修改屬主、屬組
# 修改檔案:1.txt的 屬主為:darker 屬組為:human [root@localhost ~]# chown darker.human 1.txt # 修改檔案:1.txt的 屬主為:darker [root@localhost ~]# chown darker 1.txt # 修改檔案:1.txt的 屬組為:human [root@localhost ~]# chown .human 1.txt # 遞迴修改目錄:file1的 屬主為:darker 屬組為:human [root@localhost ~]# chown -R darker.human file1
修改u、g、o對應的許可權
# 加減法 # 修改檔案:1.txt的許可權為:屬主為u 屬組為w [root@localhost ~]# chmod u+x,g-w 1.txt # 賦值法 # 修改檔案:1.txt的許可權為:所有使用者為rwx [root@localhost ~]# chmod a=rwx 1.txt # 修改檔案:1.txt的許可權為:- [root@localhost ~]# chmod a=- 1.txt # 修改檔案:1.txt的許可權為:屬主屬組為rw 其他使用者為r [root@localhost ~]# chmod ug=rw,o=r 1.txt # 數字 # 修改檔案:1.txt的許可權為:所有使用者的許可權為rwx [root@localhost ~]# chmod 777 1.txt # 遞迴修改目錄:file1的許可權為:所有使用者的許可權為rwx [root@localhost ~]# chmod 777 file1
注意:把某一個非屬主使用者新增到檔案的屬組裡,他就擁有了該組的許可權,而不再是其他人
許可權對檔案/目錄的意義
檔案:ls -l 檔名
許可權 | 釋義 |
---|---|
r | 可以cat讀取檔案內容 |
w | 可以修改檔案 |
x | 可以執行檔案程式碼,如果該檔案的程式碼是編譯好的結果 那麼只有 x 許可權即可執行但如果該檔案的程式碼是一個解釋型的指令碼程式 則需要配合 r 許可權才可執行 |
目錄:ls -dl 檔名
許可權 | 釋義 |
---|---|
r | 可以ls 瀏覽檔案下的內容 |
w | 可以在目錄下建立 新檔案or目錄 |
x | 可以執行 目錄下的程式,除了對目錄有執行許可權外,還要對程式檔案有執行許可權才行可以正常 cd 涉及到多層目錄如/a/b/c,需要對每一級都有x許可權才可以正常走到下一級 |
對資料夾的操作(不操作檔案內容),需要當前使用者具備的許可權
- 對沿途所有資料夾有x許可權
- 對目標資料夾有r或w許可權
許可權 | 釋義 |
---|---|
r | 可以瀏覽 |
w | 可以建立、刪除、移動子檔案和子目錄 |
對檔案的操作(操作檔案內容),需要當前使用者具備的許可權
- 對沿途所有資料夾有x許可權
- 對目標檔案有r或w許可權
許可權 | 釋義 |
---|---|
r | 可以讀取檔案內容 |
w | 可以修改檔案內容 |
注意點:
vim修改的原理是將原檔案刪掉,然後再將內容的內容覆蓋寫入了新檔案,新檔名重新命名為原檔名
驗證vim修改的原理
# (root使用者)切換到/usr/local目錄
[root@localhost local]# cd /usr/local
# (root使用者)遞迴建立test01/dir1目錄
[root@localhost local]# mkdir -p test01/dir1
# (root使用者)遞迴修改目錄test01許可權為733
[root@localhost local]# chmod -R 733 test01
# (root使用者)在test01目錄下建立1.txt並寫入內容“123”
[root@localhost local]# echo "123" > test01/1.txt
# (root使用者)檢視1.txt的內容
[root@localhost local]# cat test01/1.txt
123
# (root使用者)檢視test01目錄下的檔案1.txt的詳情資訊:其他使用者只有(r)讀的許可權
[root@localhost local]# ll test01/1.txt
-rw-r--r--. 1 root root 4 Nov 25 10:02 test01/1.txt
# (root使用者)檢視test01目錄下的檔案1.txt的iNode資訊
[root@localhost local]# stat test01/1.txt
File: ‘test01/1.txt’
Size: 4 Blocks: 8 IO Block: 4096 regular file
Device: fd00h/64768d Inode: 23609 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Context: unconfined_u:object_r:usr_t:s0
Access: 2020-11-25 10:02:58.471562017 -0500
Modify: 2020-11-25 10:02:58.471562017 -0500
Change: 2020-11-25 10:02:58.471562017 -0500
Birth: -
# 切換到其他使用者/用其他使用者登入
PS C:\Users\Darker> ssh [email protected]
[email protected]'s password:
[darker@localhost ~]$ whoami
darker
# (普通使用者)用vim開啟/usr/local/test01目錄下的1.txt
[darker@localhost ~]$ vim /usr/local/test01/1.txt
123
~
~
~
"/usr/local/test01/1.txt" [readonly] 1L, 4C 1,1 All # [readonly] 只讀
# 按i進入插入模式
-- INSERT -- W10: Warning: Changing a readonly file
# (普通使用者)修改1.txt的內容,強制儲存並退出
456
Esc
:wq!
# 回到原來的root使用者的視窗
# (root使用者)檢視1.txt的內容
[root@localhost local]# cat test01/1.txt
456
# (root使用者)檢視test01目錄下的檔案1.txt的詳情資訊:屬主和屬主變了
[root@localhost local]# ll test01/1.txt
-rw-r--r--. 1 darker darker 4 Nov 25 10:21 test01/1.txt
# (root使用者)檢視test01目錄下的檔案1.txt的iNode資訊
[root@localhost local]# stat test01/1.txt
File: ‘test01/1.txt’
Size: 4 Blocks: 8 IO Block: 4096 regular file
Device: fd00h/64768d Inode: 23609 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 1000/ darker) Gid: ( 1000/ darker)
Context: unconfined_u:object_r:usr_t:s0
Access: 2020-11-25 10:30:54.822530748 -0500
Modify: 2020-11-25 10:21:17.823541511 -0500
Change: 2020-11-25 10:21:17.824541511 -0500
Birth: -
結論
vim修改檔案時:會將原檔案刪除,生成新的檔案,屬主和主組會變成修改的那個使用者和使用者所在的組
二:特殊許可權
許可權 | 許可權位 |
---|---|
SUID | 4 |
SGID | 2 |
SBIT | 1 |
SUID
1.疑問
普通使用者既不是root也不屬於root組,因此 它對/etc/shadow檔案沒有任何許可權(全是---
)
# 檢視/etc/shadow資訊
[darker@localhost ~]# ll /etc/shadow
----------. 1 root root 970 Nov 24 07:29 /etc/shadow
但是:普通使用者為何可以用passwd
直接修改密碼?並且修改的是/etc/shadow
檔案,如何實現的?
[darker@localhost ~]$ ll `which passwd`
-rwsr-xr-x. 1 root root 27832 Jun 10 2014 /usr/bin/passwd
這裡可以看到,本應為rwx
的第三個x
變成了s
,這就是s許可權
2.s許可權的特殊之處
- SUID許可權僅對
二進位制可執行檔案
有效(對目錄無效) - 如果執行者對於該二進位制可執行檔案具有
x
的許可權,執行者將具有該檔案的所有者的許可權
- 本許可權 僅在執行該二進位制可執行檔案的過程中有效
3.許可權設定的方法
- 字母表示法
chmod u+s 可執行檔案 # 給屬主新增s許可權
chmod u-s 可執行檔案 # 刪除屬主的s許可權
- 數字表示法(第1位
4
表示SUID
,後3位表示普通許可權 rwx
)
chmod 4755 可執行檔案 # 新增SUID許可權到二進位制可執行檔案
chmod 0xxx ... # 可以刪除檔案的SUID(但是無法刪除目錄的SUID)
4.例項
# (root使用者)檢視which cat
[root@localhost ~]# ll `which cat`
-rwxr-xr-x. 1 root root 54048 Nov 20 2015 /usr/bin/cat
# (普通使用者)檢視/etc/shadow:沒有許可權(普通使用者雖然是r-x,但是無法直接檢視)
[darker@localhost local]$ cat /etc/shadow
cat: /etc/shadow: Permission denied
# (root使用者)修改 which cat 許可權
[root@localhost ~]# chmod u+s `which cat` # 或者 chmod 4755 `which cat`
#(root使用者) 再次檢視which cat
[root@localhost ~]# ll `which cat`
-rwsr-xr-x. 1 root root 54048 Nov 20 2015 /usr/bin/cat
# (普通使用者)檢視/etc/shadow:有許可權了
[darker@localhost local]$ cat /etc/shadow
root:$6$Jvw3z/jmU1ASO4P1$vpTJ5OGEtfBOmIpjyK55k87iQPHXCC3.kKOFW9jkyslqC2DMdN7SZdT/zYRfmQ4hBAQXG6CQ4kKdRQ8eFqChf.::0:99999:7:::
bin:*:16659:0:99999:7:::
daemon:*:16659:0:99999:7:::
adm:*:16659:0:99999:7:::
lp:*:16659:0:99999:7:::
...
5.上例的工作原理
環境前提:
Linux中有1個二進位制程式:cat,屬組屬組都是root
Linux中有一個系統檔案:/etc/shadow,屬組屬組是: root:root
有一個普通使用者:darker
普通使用者:darker 屬於其他使用者,對二進位制程式:cat 有執行(x)的許可權
普通使用者:darker 對系統檔案:/etc/shadow 沒有任何許可權
預設情況下:
普通使用者:darker 執行二進位制程式:cat
系統會建立1個:cat程序
該程序的屬主屬組是該程式的發起者:darker,也就是: darker:darker
cat程序 訪問系統檔案:/etc/shadow
cat程序的屬主和屬主:darker:darker /etc/shadow檔案的屬主和屬主:root:root
二者的屬主屬組不匹配,所以被拒絕訪問了:Permission denied
給二進位制程式:cat 設定SUID之後:
普通使用者:darker 執行二進位制程式:cat
系統會建立1個:cat程序
執行者對於該二進位制可執行檔案具有 x 的許可權,執行者將擁有該檔案的屬組的許可權
該程序屬主是程式的發起者:darker,屬組是cat原來的:root,屬主屬組就是:darker:root
cat程序 訪問系統檔案:/etc/shadow
cat程序的屬主和屬主:root:darker /etc/shadow檔案的屬主和屬主:root:root
二者的屬主匹配,可以正常訪問
SGID
1.許可權設定的方法
- 字母表示法
chmod g+s 檔案/目錄 # 給檔案/目錄的屬組新增s許可權
chmod g-s 檔案/目錄 # 刪除檔案/目錄的屬組的s許可權
- 數字表示法(第1位
2
表示SGID
,後3位表示普通許可權 rwx
)
chmod 2755 檔案/目錄 # 給檔案/目錄的屬組新增s許可權
chmod 0755 檔案/目錄 # 刪除檔案/目錄的屬組的s許可權
chmod 755 檔案/目錄 # 同上
2.檔案許可權位的表示
[root@localhost ~]# ll 1.txt
-rwxr-sr-x. 1 root root 3243 Nov 25 15:41 1.txt
3.SGID相關說明
作用在二進位制可執行檔案上時:
執行有SGID許可權的程式時,該使用者將繼承該程式的屬組許可權
作用在目錄上時:
該目錄下所有使用者新建的檔案 都會自動繼承該目錄的屬組
當一個使用者對某一目錄有寫
和執行
許可權時,該使用者就可以在該目錄下建立檔案
如果該目錄同時用 SGID
修飾,則該使用者在這個目錄下建立的檔案都是屬於這個目錄的屬組
4.例項
# (root使用者)切換到/usr/loca/目錄 並建立目錄:test02
[root@localhost ~]# cd /usr/local
[root@localhost local]# mkdir test02
# (root使用者)檢視目錄:test02 的資訊
[root@localhost local]# ls -dl test02/
drwxr-xr-x. 2 root root 6 Nov 25 14:19 test02/
# !測試(root使用者)在目錄:test02 下建立檔案:1.txt 並檢視該檔案的資訊
[root@localhost local]# touch /usr/local/test02/1.txt
[root@localhost local]# ll /usr/local/test02/1.txt
-rw-r--r--. 1 root root 0 Nov 25 14:19 /usr/local/test02/1.txt
# !測試(普通使用者)在目錄:test02 下建立檔案:2.txt 並檢視該檔案的資訊
[darker@localhost ~]$ touch /usr/local/test02/2.txt
[darker@localhost ~]$ ll /usr/local/test02/2.txt
-rw-rw-r--. 1 darker darker 0 Nov 25 14:20 /usr/local/test02/2.txt
# (root使用者)修改目錄:test02 的許可權
[root@localhost local]# chmod 2773 test02
# (root使用者)再次檢視目錄:test02 的資訊
[root@localhost local]# ls -dl test02/
drwxr-sr-x. 2 root root 6 Nov 25 14:20 test02/
# !測試(root使用者)在目錄:test02 下建立檔案:3.txt 並檢視該檔案的資訊
[root@localhost local]# touch /usr/local/test02/3.txt
[root@localhost local]# ll /usr/local/test02/3.txt
-rw-r--r--. 1 root root 0 Nov 25 14:21 /usr/local/test02/3.txt
# !測試(普通使用者)在目錄:test02 下建立檔案:4.txt 並檢視該檔案的資訊
[darker@localhost ~]$ touch /usr/local/test02/4.txt
[darker@localhost ~]$ ll /usr/local/test02/4.txt
-rw-rw-r--. 1 darker root 0 Nov 25 14:21 /usr/local/test02/4.txt
SBIT
SBIT 是 the restricted deletion flag or sticky bit
的簡稱,有時也稱為Sticky
,粘滯位
SBIT 與 SUID 和 SGID 的關係並不大
1.許可權設定的方法
- 字母表示法
chmod o+t 檔案/目錄 # 給檔案/目錄的其他使用者設定Sticky
chmod o-t 檔案/目錄 # 刪除檔案/目錄的其他使用者的Sticky
- 數字表示法(第1位
1
表示新增Sticky位
,後3位表示普通許可權 rwx
)
chmod 1755 檔案/目錄 # 給檔案/目錄的其他使用者設定Sticky
chmod 0755 檔案/目錄 # 刪除檔案/目錄的其他使用者的Sticky
chmod 755 檔案/目錄 # 同上
2.檔案許可權位的表示
- 檔案other位有
x許可權
,並且用t
代替了,表示被設定了Sticky
- 如果other位
沒有x許可權
,會顯示為大寫T
,表示有故障
(許可權無效)
[root@localhost local]# ls -dl test03
drwxr-xr-t. 2 root root 18 Nov 25 14:34 dir01
3.相關說明
- 對於一個多人可寫的目錄,如果設定了sticky,則每個使用者僅能刪除和改名自己的檔案/目錄
- 只能作用在目錄上,普通檔案設定無意義,而且會被Linux核心忽略
- 使用者在設定 Sticky 許可權的目錄下
新建的目錄
不會自動繼承Sticky許可權
4.例項
# (root使用者)切換到 /usr/loca/目錄
[root@localhost ~]# cd /usr/local
# (root使用者)遞迴建立test03目錄及2個子目錄dir1和dir2
[root@localhost local]# mkdir -p test03/dir{1,2}
# (root使用者)建立2個使用者:user01、user02
[root@localhost local]# useradd user01
[root@localhost local]# useradd user02
# (root使用者)分別設定dir1和dir2的屬主屬組為user01和user02
[root@localhost local]# chown -R user01:user01 test03/dir1
[root@localhost local]# chown -R user02:user02 test03/dir2
# (root使用者)檢視目錄:test03的資訊
[root@localhost local]# ls -dl test03
drwxr-xr-x. 4 root root 28 Nov 25 15:37 test03
[root@localhost local]# ll test03
total 0
drwxr-xr-x. 2 user01 user01 6 Nov 25 15:37 dir1
drwxr-xr-x. 2 user02 user02 6 Nov 25 15:37 dir2
# (root使用者)修改目錄:test03 的許可權
[root@localhost local]# chmod 1777 test03
# (root使用者)檢視目錄:test03的資訊
[root@localhost local]# ls -dl test03
drwxrwxrwt. 4 root root 28 Nov 25 15:37 test03
[root@localhost local]# ll test03
total 0
drwxr-xr-x. 2 user01 user01 6 Nov 25 15:37 dir1
drwxr-xr-x. 2 user02 user02 6 Nov 25 15:37 dir2
# 切換到普通使用者:user01
[root@localhost local]# su - user01
# !測試(普通使用者)切換到test03目錄
[user01@localhost ~]$ cd /usr/local/test03
# !測試(普通使用者)檢視當前目錄下的資訊
[user01@localhost test03]$ ll
total 0
drwxr-xr-x. 2 user01 user01 6 Nov 25 15:37 dir1
drwxr-xr-x. 2 user02 user02 6 Nov 25 15:37 dir2
# !測試(普通使用者)使用者user01將dir1重新命名為dir11
[user01@localhost test03]$ mv dir1 dir11
# !測試(普通使用者)使用者user01將dir2重新命名為dir22
[user01@localhost test03]$ mv dir2 dir22
mv: cannot move ‘dir2’ to ‘dir22’: Operation not permitted
# !測試(普通使用者)使用者user01在dir11目錄中建立檔案:1.txt
[user01@localhost test03]$ touch dir11/1.txt
# !測試(普通使用者)使用者user01在dir2目錄中建立檔案:2.txt
[user01@localhost test03]$ touch dir2/2.txt
touch: cannot touch ‘dir2/2.txt’: Permission denied
5.注意點
- SBIT 目前只對目錄有效,用來
阻止非檔案的所有者刪除檔案
:比較常見的例子就是/tmp
目錄 - 許可權資訊中最後一位
t
表示該目錄被設定了 SBIT 許可權 - SBIT 對目錄的作用是:當用戶在該目錄下建立 新檔案或目錄時,僅有自己和 root 才有權力刪除,主要作用於一個
共享的資料夾(目錄)
三:chattr
引言
你是否遇到過檔案或目錄具有可讀寫許可權
,但是使用root使用者刪除、修改時提示"Operation not permitted
"的情況?
可能是由chattr設定了檔案的隱藏保護許可權
導致
通過chattr命令修改檔案或目錄屬效能夠提高系統的安全性
與chmod命令相比,chmod只是改變檔案的讀寫、執行許可權,更底層的屬性控制是由chattr命令改變的。
說明
這兩個命令在工作中用的比較少,經常用到的場景就是解決"Operation not permitted"問題
chattr 命令語法
語法
chattr [+-=] [ASacdistu] File/Directory
選項說明
選項 | 釋義 |
---|---|
+-= | 分別為 [+ 增加] [- 減少] [= 設定] 指定屬性 |
A | 當設定了 A 這個屬性時,檔案或目錄的存取時間atime (訪問時間) 將不可被修改 |
S | 這個功能有點類似 sync 的功能!就是會將資料同步寫入磁碟當中! 可以有效的避免資料流失! |
a | 檔案將只能增加資料,而不能刪除,只有 root 才能設定這個屬性 |
C | 這個屬性設定之後,將會自動的將此檔案『壓縮』 在讀取的時候將會自動解壓縮出來,但是在儲存的時候,將會先進行壓縮之後再儲存 |
d | 當 dump (備份)程式被執行的時候,設定 d 屬性將可使該檔案(或目錄)具有 dump 功效! |
i | 指定檔案不能被刪除、改名、也無法寫入或新增資料!對於系統安全性有相當大的幫助! |
j | 當使用 ext3 這個檔案系統格式時,設定 j 屬性將會使檔案在寫入時先記錄在 journal 中! 但是當 filesystem 設定引數為 data=journalled 時,由於已經設定了日誌了,所以這個屬性無效! |
s | 當檔案設定了 s 引數時,他將會被完全的移除出這個硬碟空間 |
u | 與 s 相反的 當使用 u 來設定檔案時,則資料內容其實還存在磁碟中,可以使用來 undeletion |
chattr 使用例項
1.設定指定檔案的隱藏屬性,使其無法刪除、修改
# 新增"i"隱藏屬性後,就無法更動config.conf這個檔案了
chattr +i /home/config/config.conf
2.取消檔案的刪除、修改保護許可權
# 解除"i"這個隱藏屬性
chattr -i /home/config/config.conf
lsattr 命令語法
語法
lsattr [-aR] File/Directory
選項說明
選項 | 釋義 |
---|---|
-a | 將隱藏檔案的屬性也列出來 |
-R | 連同子目錄的資料也一併列出來 |
lsattr 使用例項
檢視指定檔案隱藏屬性
# 檢視檔案:file.txt的隱藏屬性
lsattr file.txt
四:umask
1.新建檔案、目錄的預設許可權是由umask決定的
① uid>199
並且屬主與屬組相等的使用者下,umask: 0002
- 檔案:664
- 目錄:775
② 除1之外的其他使用者下,比如root使用者,umask: 0022
- 檔案:664
- 目錄:755
③ 預設許可權(在umask的影響下)
- 檔案預設許可權:666
- 目錄許可權預設:777
2.許可權的計算方法
檔案許可權的計算方法:偶數位直接相減,奇數位相減後加1
檔案的起始許可權值 | umask值 | 操作 | 計算後的檔案許可權值 |
---|---|---|---|
666 | 022 (每位如果都是偶數) | 直接相減 | 644 |
666 | 033 (每位如果有奇數或偶數) | 相減(奇數位相減後在其原奇數 位加1) | 644 |
666 | 325(每位如果有奇數或偶數) | 相減(奇數位相減後在其原奇數 位加1) | 442 |
目錄許可權的計算方法:直接相減即可
檔案的起始許可權值 | umask值 | 操作 | 計算後的檔案許可權值 |
---|---|---|---|
777 | 022 | 相減 | 755 |
777 | 033 | 相減 | 744 |
777 | 325 | 相減 | 452 |
3.設定umask
臨時設定umask
[root@localhost local]# umask 000 # 設定umask為000
永久設定umask
# 用vim編輯/stc/profile
[root@localhost local]# vim /etc/profile # 或者:vim /etc/bashrc
# 在最後新增如下程式碼
if [ $UID -gt 199 ] && [ "`id -gn`" = "`id -un`" ]; then
umask 002 //表示uid大於等於199的預設umask值,表示普通使用者
else
umask 022 //表示uid小於199的預設umask值,表示root
fi
4.總結
能力(許可權)越大,責任越大
資料(生命)無價,謹慎操作