🔑 權限管理


一、基本權限

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權限
[root ~]# mkdir -p /a/b/c
[root ~]# chmod -R o=x /a
[root ~]# chmod o+r /a/b/c
[root ~]# touch /a/b/c/{1..3}.txt
 
[root ~]# su - gg
Last login: Tue Aug 11 16:27:33 CST 2020 on pts/2
[gg ~]$ ls /a/b/c
1.txt 2.txt 3.txt
 
例:要瀏覽目錄下內容:對目錄的x權限+對文件的x權限,如果文件是解釋型語言的腳本程序,還需要對文件有r權限
[root ~]# mkdir -p /a/b/c
[root ~]# chmod -R o=x /a/b/c
[root ~]# cp /bin/echo /a/b/c
[root ~]# chmod o=x /a/b/c/echo
[root ~]#
[root ~]# su - gg
Last login: Tue Aug 11 16:30:17 CST 2020 on pts/2
[gg~]$ /a/b/c/echo "hello coco"
hello coco

二、特殊權限

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 -m g:group1:rx /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::rw￾group::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
創建時間:- 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM