一、基本權限
1.權限介紹
權限類型
- r:可讀權限==>4
- w: 可寫權限==>2
- x: 可執行權限==>1
權限歸屬
- 屬主:u
- 屬組:g
- 其他人:o
例如:
[root~] ls -l a.txt
-rw-r--r-- 1 root root 1146 Jul 16 18:42 a.txt
文件類型
- -:文本文檔
- d:目錄
- b:設備block
- c:字符設備
- s:套接字文件
- l : 軟連接
2.設置權限
修改屬主、屬組
[root ~]# chown alice.hr file1 # 修改屬主,屬組
[root ~]# chown alice file1 # 只改屬主
[root ~]# chown .hr file1 # 只改屬組
[root ~]# chown -R /test # 遞歸修改
修改u、g、o、對應的權限
# 加減法
chmod u+x,g-w,o+r a.txt
# 賦值法
chmod a=rwx a.txt
chmod a=- a.txt
chmod ug=rw,o=r file1
# 數字法
chmod 644 file1
chmod -R 777 xxx/
注:把某一個非屬主用戶添加到文件的屬主里,他就擁有了該組的權限,而不是其他人
3.權限對文件or目錄的意義
文件:ls -l 文件名
- r :可以讀cat讀取文件內容
- w :可以修改文件
- x : 可以執行文件代碼,如果該文件的代碼是編譯好的結果,那么只有x權限即可執行,但如果該文件的代碼是一個解釋型的腳本文件程序,則需要配合r權限才可以執行
目錄:ls -dl 文件名
- r : 可以ls瀏覽文件下的內容
- w: 可以在目錄下創建新文件or目錄
- x :可以執行目錄下的程序,除了對目錄有執行權限外,還要對程序文件有執行權限才行
可以在正常切換到目錄下
涉及到多層目錄 如/a/b/c,需要對每一級都有x權限才可以正常走到下一級
例:要想在目錄下創建\刪除內容:對目錄的x權限+對目錄的w權限
# 設置權限 [root ~]# mkdir -p /a/b/c [root ~]# chmod -R o=x /a #其他人o 對當前目錄及其子目錄都有x權限 [root~]# chmod o+w /a/b/c # 其他人o對/a/b/c目錄有w權限 #查看權限 [root~]# ls -dl /a drwxr-x--x 3 root root 4096 Aug 11 16:24 /a [root~]# ls -dl /a/b drwxr-x--x 3 root root 4096 Aug 11 16:24 /a/b [root ~]# ls -dl /a/b/c drwxr-x-wx 2 root root 4096 Aug 11 16:25 /a/b/c #驗證 [root ~]# su - gg Last login: Tue Aug 11 16:17:28 CST 2020 on pts/2 [gg ~]$ touch /a/b/c/1.txt [gg ~]$ exit logout [root~]# ls /a/b//c/ 1.txt
例:要瀏覽目錄下內容:對目錄的x權限+對目錄的r權限
例:要瀏覽目錄下內容:對目錄的x權限+對文件的x權限,如果文件是解釋型語言的腳本程序,還需要對文件有r權限
二、特殊權限
1.SUID
普通用戶不是root也不屬於root組,於是它對/etc/shadow文件沒有任何權限
[root ~]# ll /etc/shadow
---------- 1 root root 1109 Aug 11 16:11 /etc/shadow
但普通用戶可以用passwd命令修改密碼,而修改密碼都是在修改/etc/shadow文件,如何實現?
[root ~]# ll `which passwd`
-rwsr-xr-x 1 root root 27856 Aug 9 2019 /bin/passwd
可以看到一個s權限,s權限的特殊之處
- SUID 權限僅對二進制可執行文件有效
- 如果執行者對於該二進制可執行文件具有x的權限,執行者將具有該文件的所有權限
- 本權限僅在執行該二進制可執行文件的過程中有效
示:
[root ~]# ll `which cat`
-rwxr-xr-x. 1 root root 54160 10์月31 2020/usr/bin/cat
[root~]# chmod 4755 `which cat` # 或者 chmod u+s `which cat`
[root ~]# ll `which cat`
-rwsr-xr-x. 1 root root 54160 10์ 31 2018 /usr/bin/cat
[root ~]# su - tom
[tom~]$ cat /etc/shadow # 可以看到內容
2.SGID
- 當SGID作用於普通文件時,和SUID類似,在執行該文件時,用戶將獲得該文件所屬組的權限
- 當SGID 作用與目錄時,意義就非常重大了:
當一個用戶對某一目錄有寫和執行權限時,該用戶就可以在該目錄下建立文件
如果該目錄同時用SGID修飾,則該用戶在這個目錄下建立的文件都是屬於這個目錄所屬的組
[root@localhost ~]# mkdir /test
[root@localhost ~]# chmod g+s /test/ # 等同於chmod 2755 /test/
[root@localhost ~]# ll -dl /test/
drwxr-sr-x 2 root root 6 8月 11 17:06 /test/
[root@localhost ~]# chown .coco /test/ # 后期任何人在該目錄下創建的文件or目錄的屬組都是coco
3.SBIT
SBIT 目前只對目錄有效,用來阻止非文件的所有者刪除文件,常見就是/tmp目錄
[root@localhost ~]# ls -dl /tmp/
drwxrwxrwt. 13 root root 4096 8月 11 17:09 /tmp/
[root@localhost ~]# chmod o+t /test/ # 或者chmod 1755 /test
權限信息中最后一位t表明該目錄被設置了SBIT權限。SBIT 對目錄的作用是:當用戶在該目錄下創建新文件或目錄時,僅有自己和root才有權利刪除,主要作用於一個共享的文件夾。
三、umask
新建文件、目錄的默認權限是由umask決定的
1、uid >199 並且屬主與屬主相等的用戶下,umask :0002
- 文件664
- 目錄775
2、除1之外的其他用戶下,比如root用戶,umask :0022
- 文件644
- 目錄755
linux中文件默認權限為666、目錄權限默認為777,在umask的影響下
文件權限計算方法:偶數位直接相減,奇數位后相減后加1

目錄權限計算方法:直接相減即可

結:umask設置越小,權限越大,慎用
臨時設置umask
[root@localhost ~]# umask 000 設置umask權限
永久設置
root@localhost tmp]# vim /etc/profile #或者/etc/bashrc內容一樣
if [ $UID -gt 199 ] && [ "`id -gn`" = "`id -un`" ]; then
umask 002 表示uid大於等於199的默認umask值,表示普通用戶
else
umask 022 表示uid小於199的默認umask值,表示root
fi
四、ACL
用命令setfacl設置的ACL權限是UGO權限的擴展:
setfacl命令可以用來細分linux下的文件權限。chmod命令可以把文件權限分為u,g,o三個組,而setfacl可以對每一個文件或者目錄設置更精確的文件權限。換句話說,setfacl可以更精確地控制權限的分配。
比如:讓某一個用戶對某一個文件具有某種權限
這種獨立於傳統的u,g,o的rwx權限之外的具體設置叫ACL,ACL可以針對單一用戶、單一文件或目錄來進行r,w,x的權限控制,對於需要特殊權限的使用狀況有一定幫助。
>>ACL基本用法<<>>設置:
[root@localhost ~]# touch /opt/a.txt
[root@localhost ~]# chmod o=- /opt/a.txt
[root@localhost ~]# ll /opt/a.txt
-rw-r----- 1 root root 0 8์ 11 18:46 /opt/a.txt
[root@localhost ~]# getfacl /opt/a.txt
getfacl: Removing leading '/' from absolute path names
# file: opt/a.txt
# owner: root
# group: root
user::rw--
group::r--
other::---
[root@localhost ~]# setfacl -m u:bobo:r /opt/a.txt
[root@localhost ~]# setfacl -m u:tom:w /opt/a.txt
# 驗證
[root@localhost ~]# su - bobo
上次登錄 :8月 11 18:47:27 CST 2020pts/1 上
[bobo@localhost ~]$ cat /opt/a.txt
big_bobo
[root@localhost ~]# su - tom
8月 11 18:40:21 CST 2020pts/1 上
[tom@localhost ~]$ cat /opt/a.txt
cat: /opt/a.txt: 權限不夠
[tom@localhost ~]$ echo small_bobo >> /opt/a.txt
# 也就可以對組設置,設置的組合用戶都必須存在
清除
[root@localhost ~]# setfacl -x g:group1 /opt/a.txt # 刪除組hr的 權限
[root@localhost ~]# setfacl -b /opt/a.txt #刪除所有acl權限
>>>>>ACL高級用法<<<<<
1.mask設置完mask后,除了所有者和other不受影響,其他都會受到mask的影響,mask決定他們的最高權限與mask權限按位與運算得到最終的權限

建議:為了方便管理文件權限,其他人的權限置為空:chmod o= - /opt/a.txt
1.保證其他人對/opt/a.txt沒有權限,然后展開實驗
[root@bobo opt]# cat /opt/a.txt
111
[root@bobo opt]# chmod o=- /opt/a.txt
[root@bobo opt]# ll /opt/a.txt
-rw-r-----. 1 root root 4 10์ 29 19:33 /opt/a.txt
2.添加acl權限
[root@bobo opt]# getfacl /opt/a.txt
getfacl: Removing leading '/' from absolute path names
# file: opt/a.txt
# owner: root
# group: root
user::rwgroup::r--
other::---
[root@bobo opt]# setfacl -m u:egon:rw /opt/a.txt # 其他人bobo對a.txt有rw權限
[root@bobo opt]# setfacl -m u:lili:r /opt/a.txt # 其他人lili對a.txt有r權限
[root@bobo opt]# getfacl /opt/a.txt # 可以看到mask默認值為rw-
getfacl: Removing leading '/' from absolute path names
# file: opt/a.txt
# owner: root
# group: root
user::rw-
user:lili:r--
user:bobo:rw-
group::r--
mask::rw-
other::---
[root@bobo opt]# ll /opt/a.txt
-rw-rw----+ 1 root root 4 10์ 29 19:33 /opt/a.txt
[root@bobo opt]#
按位與運算
lili權限:r--
mask權限:rw--
lili๋最終權限: r--
[root@bobo opt]# su - lili -c "cat /opt/a.txt"
111
222
[root@bobo opt]# su - lili -c "echo 666 >> /opt/a.txt"
-bash: /opt/a.txt: 權限不夠
bobo權限: rw-
mask權限:rw-
最終權限: rw-
[root@bobo opt]# su -bobo -c "cat /opt/a.txt"
111
[root@bobo opt]# su - bobo -c "echo 222 >> /opt/a.txt"
4.設置mask
[root@bobo opt]# setfacl -m m:- /opt/a.txt
[root@bobo opt]# getfacl /opt/a.txt
getfacl: Removing leading '/' from absolute path names
# file: opt/a.txt
# owner: root
# group: root
user::rw-
user:lili:r-- #effective:---
user:bobo:rw- #effective:---
group::r-- #effective:---
mask::---
other::---
[root@bobo opt]# su - egon -c "cat /opt/a.txt"
cat: /opt/a.txt: 權限不夠
[root@bobo opt]# su - lili -c "cat /opt/a.txt"
cat: /opt/a.txt: 權限不夠
ps:我們一般不更改mask權限,只賦予mask最大權限(也就是rwx),則給用戶或群設定的ACl權限本身就是有效的
2.default:繼承(默認)要求:希望bobo能夠對/home 及以以后在/home下新建的文件有讀、寫、執行權限
思路:
1.賦予bobo對/home讀、寫、執行權限[root@~] # set -m u: bobo :rwx: /home
2.賦予bobo對以后在/home下新建的文件有讀、寫、執行權限(使bobo的繼承權)
注意:是作用到子目錄,對當前文件沒有相應權限[root@~] # setfacl -m d:u:bobo:rwx:/home
[root@bobo opt]# mkdir /test
[root@bobo opt]# setfacl -m u:bobo:rwx /test
[root@bobo opt]# setfacl -m d:u:bobo:rwx /test
[root@bobo opt]# getfacl /test
getfacl: Removing leading '/' from absolute path names
# file: test
# owner: root
# group: root
user::rwx
user:bobo:rwx
group::r-x
mask::rwx
other::r-x
default:user::rwx
default:user:bobo:rwx
default:group::r-x
default:mask::rwx
default:other::r-x
[root@bobo opt]# mkdir /test/aaa
[root@bobo opt]# touch /test/b.txt
[root@bobo opt]# getfacl /test/aaa/
getfacl: Removing leading '/' from absolute path names
# file: test/aaa/
# owner: root
# group: root
user::rwx
user:bobo:rwx
group::r-x
mask::rwx
other::r-x
default:user::rwx
default:user:bobo:rwx
default:group::r-x
default:mask::rwx
default:other::r-x
[root@bobo opt]# getfacl /test/b.txt
getfacl: Removing leading '/' from absolute path names
# file: test/b.txt
# owner: root
# group: root
user::rwuser:egon:rwx #effective:rw- # 權限已經繼承過來了,但是因為mask的影響變成了rw-
group::r-x #effective:r--
mask::rw
other::r--
五、文件屬性
[root@localhost ~]# touch /opt/{1..3}.txt
[root@localhost ~]# chmod 000 /opt/*
[root@localhost ~]# lsattr /opt/
---------------- /opt/1.txt
---------------- /opt/2.txt
---------------- /opt/3.txt
[root@localhost ~]# chattr +a /opt/1.txt # 允許追加內容
[root@localhost ~]# chattr +i /opt/2.txt # 禁止修改時間
[root@localhost ~]# chattr +A /opt/3.txt # 不更改文件訪問時間
[root@localhost ~]# lsattr /opt/
-----a---------- /opt/1.txt
----i----------- /opt/2.txt
-------A-------- /opt/3.txt
# 驗證
[root@localhost ~]# echo 111 >> /opt/1.txt
[root@localhost ~]# cat /opt/1.txt
111
[root@localhost ~]# rm -rf /opt/1.txt
rm: 無法刪除/opt/1.txt": 不允許操作
#去掉
[root@localhost ~]# chattr -a /opt/1.txt
[root@localhost ~]# chattr -i /opt/2.txt
[root@localhost ~]# chattr -A /opt/3.txt
實驗
[root@localhost ~]# echo 123131231 > e.txt
[root@localhost ~]# chattr +A e.txt
[root@localhost ~]# stat e.txt
文件:"e.txt"
大小:10 塊:8 IO 塊:4096 普通文件
設備:803h/2051d Inodeғ17154806 硬鏈接:1
權限(0644/-rw-r--r--) Uid:( 0/ root) Gid:( 0/ root)
最近訪問:2020-08-11 19:15:15.548257742 +0800
最近更改:2020-08-11 19:15:15.548257742 +0800
最近改動:2020-08-11 19:15:22.494283808 +0800
創建時間:-
