2021-05-12 14:32:11
Linux檔案系統許可權範例分析
Linux檔案系統許可權
一、屬主、屬組
在Linux檔案系統中,使用者如果要對檔案進行操作,首先要對檔案的許可權進行檢查,先判斷使用者是否是此檔案的屬主如果是則執行屬主許可權,如果不是那就檢視該使用者是否是該檔案屬組內的使用者,如果是則執行屬組許可權,如果不是執行other許可權。
二、檔案和目錄的讀寫執行
1. 檔案的讀、寫、執行
檔案能否讀寫取決於使用者對檔案是否有讀寫執行許可權。
使用者有對檔案讀許可權則可以存取此檔案,檢視檔案內的內容,但無法對內容進行修改
範例:
[root@CentOS7 data]# echo hello world > a
[root@centos7 data]# cat a
hello world
[root@centos7 data]# chmod 004 a
[root@centos7 data]# ll
total 4
-------r-- 1 root root 12 Mar 14 23:20 a
[root@centos7 data]# su masuri
[masuri@centos7 data]$ ll
total 4
-------r-- 1 root root 12 Mar 14 23:20 a
[masuri@centos7 data]$ cat a
hello world
[masuri@centos7 data]$ echo hello word >a
bash: a: Permission denied
使用者有對檔案寫許可權則可以對此檔案的內容進行修改,如果使用者只有寫許可權,則無法檢視內部容,但可以修改其內部的內容。
範例:
[root@centos7 data]# chmod 002 a
[root@centos7 data]# cat a
hello world
[root@centos7 data]# ls a
a
[root@centos7 data]# ll a
--------w- 1 root root 12 Mar 14 23:20 a
[root@centos7 data]# su masuri
[masuri@centos7 data]$ cat a
cat: a: Permission denied
[masuri@centos7 data]$ echo abc >> a
[masuri@centos7 data]$ exit
exit
[root@centos7 data]# cat a
hello world
abc
注意:使用者有對檔案的執行許可權則可以將檔案進行執行,此類操作非常危險。一般檔案不建議有執行許可權。
2.目錄的讀寫執行
目錄的讀許可權:
目錄有讀許可權則表示使用者可以檢視目錄,可以複製目錄,但無法對目錄內的檔案進行操作,若要對目錄內的檔案進行操作則必須要有執行許可權
範例1:只有讀許可權沒有執行許可權時
[root@centos7 data]# mkdir -m 004 test
[root@centos7 data]# echo hello world > test/a
[root@centos7 data]# su masuri
[masuri@centos7 data]$ ls test
ls: cannot access test/a: Permission denied 沒有執行許可權無法檢視檔案
a
[masuri@centos7 data]$ cp -R test test2
cp: cannot stat ‘test/a’: Permission denied 沒有執行許可權無法複製目錄下的內容只能複製目錄本身
[masuri@centos7 data]$ ll
total 0
d------r-- 2 root root 15 Mar 14 23:37 test
d------r-- 2 masuri masuri 6 Mar 14 23:49 test2
[masuri@centos7 data]$ rm test/a
rm: cannot remove ‘test/a’: Permission denied 沒有寫和執行無法刪除檔案
範例2:有讀和執行許可權
[root@centos7 data]# chmod 005 test
[root@centos7 data]# ll test -d
d------r-x 2 root root 15 Mar 14 23:37 test
[root@centos7 data]# su masuri
[masuri@centos7 data]$ cp -R test test3 可複製
[masuri@centos7 data]$ ls
test test2 test3
[masuri@centos7 data]$ ls test
a
[masuri@centos7 data]$ cat test/a
hello world
[masuri@centos7 data]$ rm test/a
rm: remove write-protected regular file ‘test/a’? y
rm: cannot remove ‘test/a’: Permission denied 無法刪除
目錄的寫許可權:
當目錄只有寫許可權時,無法對目錄下的檔案執行任何操作。若要能實現對目錄下的檔案進行操作,必須要有執行許可權
範例:
1.只有寫許可權
[root@centos7 data]# mkdir -m 002 test
[root@centos7 data]# echo helloworld > test/a
[root@centos7 data]# ll
total 0
d-------w- 2 root root 15 Mar 15 00:10 test
[root@centos7 data]# su masuri
[masuri@centos7 data]$ echo hello > test/a
bash: test/a: Permission denied
[masuri@centos7 data]$ ls test
ls: cannot open directory test: Permission denied
[masuri@centos7 data]$ ls test/a
ls: cannot access test/a: Permission denied
2.有寫和執行時
[root@centos7 data]# chmod 003 test
[root@centos7 data]# ll -d test
d-------wx 2 root root 15 Mar 15 00:10 test
[root@centos7 data]# ls test
a
[root@centos7 data]# su masuri
[masuri@centos7 data]$ ls test
ls: cannot open directory test: Permission denied 沒有讀許可權無法檢視
[masuri@centos7 data]$ echo hello > test/b 好像可以寫入?
[masuri@centos7 data]$ rm test/a 要想也可以刪除?
rm: remove write-protected regular file ‘test/a’? y
[masuri@centos7 data]$ exit 轉回root看結果。
exit
[root@centos7 data]# ls
test
[root@centos7 data]# ls test 原來的按檔案被刪除
b
[root@centos7 data]# cat b
cat: b: No such file or directory
[root@centos7 data]# cat test/b b檔案內為剛才寫入的資料
hello
總結:目錄的執行許可權非常重要,沒有執行權,即使有目錄的讀寫許可權也無法對目錄下的檔案進行操作。
3.chmod中大寫X的意義
當對目錄遞回施加大X時,其下的所有目錄自動新增執行許可權,但檔案不會新增
但若檔案原本有執行許可權時,則會為其新增執行許可權
範例:
[root@centos7 data]# mkdir testdir
[root@centos7 data]# cd testdir
[root@centos7 testdir]# touch a b 建立a b兩個檔案
[root@centos7 testdir]# chmod 100 a 修改許可權a為可執行
[root@centos7 testdir]# chmod 000 b 修改許可權b為什麼都沒有
[root@centos7 testdir]# mkdir -m 000 dir 建立一個dir目錄並設定許可權為000
[root@centos7 testdir]# ll
total 0
---x------ 1 root root 0 Mar 15 00:48 a
---------- 1 root root 0 Mar 15 00:48 b
d--------- 2 root root 6 Mar 15 00:48 dir
[root@centos7 testdir]# cd ..
[root@centos7 data]# chmod -R a+X testdir 對testdir目錄遞回設定大X許可權
[root@centos7 data]# cd testdir/
[root@centos7 testdir]# ll
total 0
---x--x--x 1 root root 0 Mar 15 00:48 a 對比上面當檔案有執行許可權時全部都加了執行許可權
---------- 1 root root 0 Mar 15 00:48 b 當檔案沒有執行許可權時則不新增
d--x--x--x 2 root root 6 Mar 15 00:48 dir
三、特殊許可權位
SUID:
作用在二進位制程式上,當使用者執行該程式時,執行該程式的身份為該程式的屬主而非使用者自身
範例:
[root@centos7 data]# su masuri
[masuri@centos7 data]$ ll `which cat` 此時suid沒有修改
-rwxr-xr-x. 1 root root 54160 Oct 31 03:16 /usr/bin/cat
[masuri@centos7 data]$ cat /etc/shadow shadow檔案無法存取
cat: /etc/shadow: Permission denied
[masuri@centos7 data]$ exit
exit
[root@centos7 data]# chmod u+s `which cat` 修改suid
[root@centos7 data]# ll `which cat`
-rwsr-xr-x. 1 root root 54160 Oct 31 03:16 /usr/bin/cat
[masuri@centos7 data]$ cat /etc/shadow 此時shadow檔案可以存取
root:$6$FBXKJJRgWCz23UDt$ji24UW5dVeYK55JOkBzBbmXaSGKAwhM1sjY9rg3TguL1GaTEmrlSzbDYNIu7p57/hehYEIE3LYLMHv2IqxIb70::0:99999:7:::
bin:*:17834:0:99999:7:::
daemon:*:17834:0:99999:7:::
adm:*:17834:0:99999:7:::
lp:*:17834:0:99999:7:::
SGID:
作用在目錄上,當使用者在擁有SGID許可權的目錄下建立檔案時,該檔案的屬組自動變為該目錄的屬組。
範例:
[root@centos7 data]# groupadd wang
[root@centos7 data]# mkdir testdir
[root@centos7 data]# chown .wang testdir
[root@centos7 data]# ll
total 0
drwxr-xr-x 2 root wang 6 Mar 15 01:01 testdir
[root@centos7 data]# chmod g+s testdir
[root@centos7 data]# touch testdir/{a,b}
[root@centos7 data]# ll testdir/
total 0
-rw-r--r-- 1 root wang 0 Mar 15 01:03 a
-rw-r--r-- 1 root wang 0 Mar 15 01:03 b
STICKY:
作用在目錄上,表示該目錄下建立的檔案只有該檔案的屬主才能進行刪除。
範例:
[root@centos7 data]# mkdir -m 777 testdir 建立目錄並賦予777的許可權
[root@centos7 data]# ll
total 0
drwxrwxrwx 2 root root 6 Mar 15 01:13 testdir
[root@centos7 data]# touch testdir/{a,b} 在目錄下建立a和b兩個檔案
[root@centos7 data]# ls testdir/
a b
[root@centos7 data]# su masuri 切換至masuri使用者
[masuri@centos7 data]$ rm -rf testdir/a 此時可以刪除root建立的a檔案
[masuri@centos7 data]$ ll testdir/
total 0
-rw-r--r-- 1 root root 0 Mar 15 01:13 b
[masuri@centos7 data]$ exit 切回root
exit
[root@centos7 data]# chmod o+t testdir 對testdir加sticky許可權
[root@centos7 data]# su masuri 切回masuri使用者
[masuri@centos7 data]$ touch testdir/a 在testder目錄下新增a檔案
[masuri@centos7 data]$ exit
exit
[root@centos7 data]# su wang 切換至wang使用者
[wang@centos7 data]$ touch testdir/c 建立一個c檔案
[wang@centos7 data]$ rm testdir/a
rm: remove write-protected regular empty file ‘testdir/a’? y 刪除masuri使用者的a檔案
rm: cannot remove ‘testdir/a’: Operation not permitted 無法刪除
[wang@centos7 data]$ rm testdir/c 但是可以刪除自己建立的C檔案
[wang@centos7 data]$ ll testdir/
total 0
-rw-rw-r-- 1 masuri masuri 0 Mar 15 01:20 a
-rw-r--r-- 1 root root 0 Mar 15 01:13 b
四、存取控制列表acl
setfacl:
命令格式:
setfacl [-bkndRLPvh] [{-m|-x} acl_spec] [{-M|-X} acl_file] file ...
setfacl --restore=file
說明: 存取控制列表給與了檔案更加靈活的許可權設定,除了檔案的所有者,所屬組和其它人,可以對更多的使用者設定許可權 | 選項 | 引數 |
---|---|---|
-m | 設定許可權 | |
-R | 遞回 | |
-M | ||
-x | 刪除acl許可權 | |
-X file | 參照file 檔案刪除acl 許可權 | |
-k dir | 刪除預設acl設定許可權 | |
-b file | 清空acl許可權 |
範例:
1.對???戶設定存取控制許可權
[root@centos7 data]# mkdir testdir
[root@centos7 data]# touch testdir/{a,b}
[root@centos7 data]# setfacl -m u:masuri:--- testdir
[root@centos7 data]# su masuri
[masuri@centos7 data]$ cd testdir
bash: cd: testdir: Permission denied
[masuri@centos7 data]$ ll
total 0
drwxr-xr-x+ 2 root root 24 Mar 15 03:19 testdir
[masuri@centos7 data]$ getfacl testdir
# file: testdir
# owner: root
# group: root
user::rwx
user:masuri:---
group::r-x
mask::r-x
other::r-x
2.備份acl許可權和恢復acl許可權
[root@centos7 data]# getfacl testdir
# file: testdir
# owner: root
# group: root
user::rwx
user:masuri:---
group::r-x
mask::r-x
other::r-x
[root@centos7 data]# getfacl testdir > acl.txt 讀acl許可權儲存至檔案中
[root@centos7 data]# setfacl -b testdir 清除所有acl許可權
[root@centos7 data]# ll
total 4
-rw-r--r-- 1 root root 103 Mar 15 03:24 acl.txt
drwxr-xr-x 2 root root 24 Mar 15 03:19 testdir
[root@centos7 data]# setfacl --restore=acl.txt 從檔案中讀取acl許可權並設定
[root@centos7 data]# ll
total 4
-rw-r--r-- 1 root root 103 Mar 15 03:24 acl.txt
drwxr-xr-x+ 2 root root 24 Mar 15 03:19 testdir
[root@centos7 data]# getfacl testdir/
# file: testdir/
# owner: root
# group: root
user::rwx
user:masuri:---
group::r-x
mask::r-x
other::r-x
3.mask屬性,mask的作用為限高桿,顯示檔案或目錄被讀取時的最高許可權。
[root@centos7 data]# mkdir testdir
[root@centos7 data]# ll testdir -d
drwxr-xr-x 2 root root 6 Mar 15 03:35 testdir
[root@centos7 data]# setfacl -m u:masuri:rwx testdir 給masuri設acl許可權rwx
[root@centos7 data]# setfacl -m mask::r testdir 設定mask屬性r
[root@centos7 data]# su masuri 切換至masuri
[masuri@centos7 data]$ touch testdir/a 在testdir下建立檔案
touch: cannot touch ‘testdir/a’: Permission denied 無法建立
[masuri@centos7 data]$ getfacl testdir
# file: testdir
# owner: root
# group: root
user::rwx
user:masuri:rwx #effective:r-- 最大許可權為r
group::r-x #effective:r--
mask::r--
other::r-x
需要注意的事項:
1.複製帶有acl的檔案時,需要時用cp -a 或者 -p 引數否則acl屬性會丟失
2.acl的生效順序:所有者,自定義使用者,自定義組,其他人。
五、其他
chattr +i 此命令可以鎖定重要檔案防止誤刪,即使為root使用者也無法刪除,無法修改
chattr +a 此命令可以防止檔案刪除,可以追加檔案
lsattr 檢視用chattr所設定的許可權。
[root@centos7 ~]# chattr +i a.txt 鎖定a.txt檔案
[root@centos7 ~]# lsattr a.txt
----i----------- a.txt
[root@centos7 ~]# rm -rf a.txt 無法刪除
rm: cannot remove ‘a.txt’: Operation not permitted
[root@centos7 ~]# echo lsafjla >a.txt 無法覆蓋
-bash: a.txt: Permission denied
[root@centos7 ~]# chattr -i a.txt 解除鎖定
[root@centos7 ~]# echo hello world > a.txt 可以寫入
[root@centos7 ~]# chattr +a a.txt 鎖定a.txt設定為只能追加
[root@centos7 ~]# echo hello world > a.txt 無法覆蓋檔案內容
-bash: a.txt: Operation not permitted
[root@centos7 ~]# echo hello world >> a.txt 可以追加
[root@centos7 ~]# cat a.txt
hello world
hello world
[root@centos7 ~]# lsattr a.txt
-----a---------- a.txt
[root@centos7 ~]# chattr -i a.txt
相關文章