linux 權限筆記

權限模型

linux權限模型,指的是對文件、文件夾同的讀寫權限,同用戶之間的權限管理模型html

三種角色

  • user 文件、文件夾的建立者,全部人
  • group 一個group對應多個user,user自動具備group的權限
  • all 也叫others, 就是除開上述兩個角色以外的全部用戶

三種權限

  • 讀 r .文件讀表示能夠讀內容,文件夾的讀,表示能夠查看其下的文件列表。具體其下的文件的讀寫權限,要在單個的文件上控制
  • 寫w. 文件的寫權限能讓你修改文件內容。文件夾的寫權限,讓你有權限在其下添加、刪除文件和更改文件名。若是你沒有文件夾的寫權限,只有其下某個文件的寫權限,那麼你能夠更改文件的內容,但確沒法添加新文件,或刪除該文件,或更改文件名
  • 執行x. 文件的可執行,就是能不能執行該文件,文件夾的可執行則是限制對應角色可否進入該文件夾,好比你把一個文件夾組的x的權限去掉,那麼全部該組下的用戶將沒法進入該該文件夾

查閱方式

使用ls -l命令便可查看當前路徑下的文件、文件夾的權限。linux

  • 紅色部分是文件全部人、文件所屬組、其它用戶各自的讀、寫、可執行的權限。形如:lrwxrwxrwx。從左開始,第一個字符表示文件的類型,能夠有l,-,d 其中l表示當前項目是個連接文件,-表示當前項目是文件,d表示當前項目是文件夾。從截圖中能夠看到,前三個項目分別是:連接文件、文件夾、文件
  • 藍色框選部分顯示的是當前項目的全部人和所屬組。第一個root是全部人,第二個root是所屬組。通常一個用戶建立後,其默認的分組跟他的用戶名相同
  • 黑色框選部分,爲項目的名稱,即連接路徑,或文件名,或文件夾名

權限更改

這部分操做是不改變文件全部者和所屬組,而只對其現有全部者,組、其它人能操做文件、文件夾的權限進行修改。shell

數字更改

以三位二進制來表明讀、寫、執行的權限。爲1表示具備權限,0表示沒有權限。3位二進制轉成的十進制爲從0到7。 好比二進制111,即爲7,表示讀寫執行權限都有
編程

chmod 764 sample

英文縮寫更改

上述基於數字的方式賦權,須要計算二級制到十進制的轉化,不夠友好。而使用英文縮寫的方式,見名知意,更容易使用。
用戶角色的字母指代bash

  • u 文件、文件夾的擁有者user
  • g 文件、文件夾的所屬組group
  • o 除上述二者以外的其它用戶others
  • a 上述三個角色的指代 all

而權限自己的字母指代爲post

  • r 讀權限read
  • w 寫權限write
  • x 執行權限executive

將權限賦予給某個角色,或從某個角色上摘除的操做符以下ui

  • +表示添加權限 chmod u+x filename 給文件擁有者賦執行權限
  • -表示刪除指定權限 chmod u-x filename 將文件擁有者的執行權限移除
  • = 從新設置對應角色的權限,也即會將對應角色的權限覆蓋成新的。好比原來其它用戶的權限爲rwx, 你執行chmod o=r filename後,其它用戶的權限就只有'r'了。但用戶全部者和所屬組的權限不會給覆蓋

能夠chmod u+wx filename一次性給某文件的全部者賦幾個權限。
再次總結下,賦值符號,=和+,-的區別在於。=是會覆蓋對應角色的全部權限,+和-只修改制定的權限項。好比你改的是執行權限,那麼文件的讀寫權限仍是原來的。翻譯

角色更改

前面介紹的只是改文件對應角色的權限。這裏介紹下,怎麼改文件屬於的角色。好比改其擁有者,改其所屬組。代理

更改文件全部者的命令code

chown user filename//更改文件的全部者

文件全部者,文件所屬組一塊兒更改

chown user:group filename

更改文件所屬組

chgrp group_name filename

查看當前用戶的組

使用groups命令便可

查看當前用戶的分組狀況

id

查看系統都有哪些組

經過/etc/group文件便可。該文件中一行表明一個分組。一行的含義解讀爲

  • 1表示分組名
  • 2表示密碼,通常沒使用密碼功能,都是x
  • 3表示分組id
  • 4表示該分組下的用戶列表,以逗號分隔

查看系統都有哪些用戶

經過/etc/passwd查看。該文件每一行表明一個用戶,每一行的解釋以下

mark:x:1001:1001:mark,,,:/home/mark:/bin/bash
[--] - [--] [--] [-----] [--------] [--------]
|    |   |    |     |         |        |
|    |   |    |     |         |        +-> 7. Login shell
|    |   |    |     |         +----------> 6. Home directory
|    |   |    |     +--------------------> 5. GECOS
|    |   |    +--------------------------> 4. GID
|    |   +-------------------------------> 3. UID
|    +-----------------------------------> 2. Password
+----------------------------------------> 1. Username

查看一個組有哪些用戶

前面說的/etc/group文件中,能夠有一個組的用戶列表,但經過這個文件去看一個組有哪些用戶,每每是不許確的。由於一個組的用戶,每每不必定在該文件中體現。最準確的查看方式爲

lid -g groupname

刪除一個用戶

在root用戶下執行userdel username命令。若是刪除遇到組「username」沒有移除,由於它包含其它成員。記得去將username對應組下面的其它用戶刪除。

附加屬性setuid和setgid

文件、文件夾除了擁有九位關於文件擁有者、所屬組、其它用戶的讀寫執行權限控制以外。還有兩個屬性位setuid和setgid,他們用來設置可執行文件的執行行爲

可執行文件代理到用戶擁有者setuid

可以讓全部用戶,以該文件的實際全部者身份執行該文件。注意這跟other角色的可執行權限不同,後者是實際賦予其它用戶有執行該文件的權限。而前者是以擁有者的身份執行

這在一些有權限控制的地方頗有用,好比該文件執行,須要擁有root的權限,好比程序代碼裏,就有判斷名字是不是'root'的用戶啓動的該程序。你但願其它用戶能夠執行該文件,又不可能把全部人編程root,那可使用這種方式。

設置命令爲: sudo chmod u+s filename

可執行文件代理到用戶組setgid

跟上述相似,只是其它用戶的執行行爲,最終會議文件實際所屬組的用戶啓動。
For example, if the file is owned by user root and group wheel, it will run as root:wheel no matter who executes the file.

設置命令爲: sudo chmod g+s filename

對文件夾設置setgid

通常不會對文件夾setuid。 只會對文件夾setgid。文件夾設置setgid後,其下新建立的文件,其組,都是改文件夾的組。不設置的話,通常文件的組,都是跟建立人的名字同樣。

這個設置,不會影響文件夾下已經存在的文件。

能夠手動去修改find /path/to/directory -type d -exec chmod g+s '{}' \;

通常一個文件被setuid和setgid後,其執行權限項會變成s

總結

setuid和setgid設置,容許全部其它用戶執行文件,且執行的時候,是以文件全部者,或文件所屬組的用戶啓動執行。啓動的實際用戶和組信息丟失了

附加屬性sticky bit

通常設置在文件夾上,設置文件上無效。設置文件夾上,那麼其下文件,只能被文件擁有者、目錄擁有者、root用戶來進行刪除和重命名,其它人則無權限。
設置命令chmod +t foldername。相應的,移除用chmod -t foldername

該命令能解決的問題是,將文件的刪除、重命名權限鎖定給文件擁有者或管理員。即使當前用戶跟文件全部者在一個組,他也沒辦法把文件刪除.

一個加了sticky 位的文件權限列表形如,其Other的執行權限變成了t

ACL

直接使用chmod對文件、文件夾進行上述權限控制,控制的粒度較粗,只能控制到Owner、owner group、others的粒度

若是咱們想對除owner group外的其它特定分組,定製權限
若是咱們想對others中,某個特定的用戶,定製權限

顯然以前的九位,就不能實現了,須要一個表的形式,來存儲多個特定用戶的特質化權限信息,這個東西叫作Access Controll List,簡稱ACL

ACL的配置列表

ACL除了能配置一個文件本來的owner、和本身的group、others以外,還能配置指定名字的user, 指定名字的group的訪問信息

被配置權限的角色 配置權限的格式 說明
owner user::rwx 就是本來的owner權限,這裏對owner配置的是讀寫執行的權限
Owning group group::rwx 就是本來的owner所屬組的權限,這裏對group配置的是讀寫執行的權限
Others other::rwx 就是將對原來的其它用戶配置的權限,這裏配置的是讀寫執行。下面三項都是ACL獨有的概念
Named user user:name:rwx 經過一個用戶名具體指定一個用戶,指定其對當前文件的權限。好比user:tom:rmx,即表示對tom這個用戶賦予讀寫執行的權限
Named group group:name:rwx 經過一個組名具體指定一個用戶,指定其對當前文件的權限。好比group:sales:rmx,即表示對sales這個組的用戶賦予讀寫執行的權限
Mask mask::rwx 上述各角色能夠配置的權限項約束。好比這裏若是限制了rw。那麼上述全部的角色配置執行權限都不會生效,固然文件owner不會被限制

mask單拎

user::rwx
user:joe:rwx            #effective:r-x
group::r-x
mask::r-x
other::---

前面說過mask所列的權限項,會影響除owner之外的其它分組的權限生效狀況。好比joe這個user,雖然被賦予了rwx權限。但Mask只容許rx權限,若依其acl的後面有一列註釋#effective:r-x,說明其實際生效的權限只有rx

ACL的配置方式

使用setfacl -m u::rmx filename的方式,用戶、group,others的簡稱仍是爲u,g,o。其中兩個冒號,分隔成三塊數據角色:具體名稱:讀寫執行,兩個冒號中間不指定內容,則說明就是原始的權限模型。好比前面就是對文件owner賦讀寫執行的權限

setfacl -m u:tom:rmx filename 表示對名爲tom的用戶賦讀寫執行的權限

ACL的讀取方式及ACL詳解

getfacl filename

我有一個文件,經過ls -l看起權限控制是

drwsr-Srwt  4 root root        110 5月  20 17:10 temp

經過acl方式看是這樣的

能夠看到,除了前面說的ower, group, others三個權限角色對應權限項外。flags中表名的是setuid、setgid、sticky bit這三個權限位的狀況,這裏顯然都開啓了

ACL同原來的模型關係

其實經過chmod定義那幾種權限,最終也體現到了ACL中。

default ACL

default ACL通常加載文件夾上,他不會改變文件夾自己的權限,而是對多一個default模板,使得其下的文件都具備這個模板中定義的權限
指定方式是對setfacl命令加-d參數,如setfacl -d -m u:dummy:rw test,而後看該文件夾的acl列表爲

其中的default項會成爲其下新文件的acl

umask

umask是一個權限反碼,用來約束新建立的文件、文件夾的默認權限。
好比將umask設爲077, 其對應的二進制爲000, 111, 111, 將其取反後變爲 111,000,000 , 對應rwx即爲'rwx------'
也即,默認建立的文件、文件夾其Owner,擁有讀寫執行的權限
其所屬組,沒有任何權限
其它全部用戶,沒有任何權限

  • umask的設置方法1:umask 077
  • umask的設置方法2,相比於使用二進制反碼,直接使用rwx的符號來指定默認文件夾權限,顯然更直觀。好比:umask u=rwx,g=x,o=x,這種方式直接限制了默認的owner權限爲rwx, group權限爲x , others權限爲x
  • 要取消某個角色權限的全部umask g=
  • 要查看當前的umask限制的權限列表,直接用umask

umask對文件、文件夾的影響不同。即使umask中容許的權限有執行,但新建立的文件依然沒有執行權限。但文件夾則是嚴格按照umask限制的權限列表來的。

好比當前的umask爲0002,按照上述的翻譯,它容許的權限列表爲:rwxrwxr-x。咱們建立一個文件夾temp2,和一個文件test2.txt。 能夠看下其權限狀況

drwxrwxr-x  2 ops  ops           6 5月  23 16:09 temp2
-rw-rw-r--  1 ops  ops           0 5月  23 16:08 test2.txt//它的每一個角色都沒有執行權限

umask只會對新建立的文件、文件夾生效。修改umask不會對已經存在的文件、文件夾產生任何影響。

參考資料

https://www.guru99.com/file-permissions.html
https://www.cyberciti.biz/faq/understanding-etcgroup-file/
https://linuxize.com/post/etc-passwd-file/
https://en.wikipedia.org/wiki/Setuid#Sticky_bit
https://www.geeksforgeeks.org/setuid-setgid-and-sticky-bits-in-linux-file-permissions/
https://www.usenix.org/legacy/publications/library/proceedings/usenix03/tech/freenix03/full_papers/gruenbacher/gruenbacher_html/main.html
https://linuxconfig.org/how-to-manage-acls-on-linux

相關文章
相關標籤/搜索