linux權限模型,指的是對文件、文件夾同的讀寫權限,同用戶之間的權限管理模型html
使用ls -l
命令便可查看當前路徑下的文件、文件夾的權限。linux
lrwxrwxrwx
。從左開始,第一個字符表示文件的類型,能夠有l,-,d
其中l
表示當前項目是個連接文件,-
表示當前項目是文件,d
表示當前項目是文件夾。從截圖中能夠看到,前三個項目分別是:連接文件、文件夾、文件這部分操做是不改變文件全部者和所屬組,而只對其現有全部者,組、其它人能操做文件、文件夾的權限進行修改。shell
以三位二進制來表明讀、寫、執行的權限。爲1表示具備權限,0表示沒有權限。3位二進制轉成的十進制爲從0到7。 好比二進制111,即爲7,表示讀寫執行權限都有
編程
chmod 764 sample
上述基於數字的方式賦權,須要計算二級制到十進制的轉化,不夠友好。而使用英文縮寫的方式,見名知意,更容易使用。
用戶角色的字母指代bash
而權限自己的字母指代爲post
將權限賦予給某個角色,或從某個角色上摘除的操做符以下ui
chmod u+x filename
給文件擁有者賦執行權限chmod u-x filename
將文件擁有者的執行權限移除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
文件便可。該文件中一行表明一個分組。一行的含義解讀爲
經過/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,他們用來設置可執行文件的執行行爲
可以讓全部用戶,以該文件的實際全部者身份執行該文件。注意這跟other角色的可執行權限不同,後者是實際賦予其它用戶有執行該文件的權限。而前者是以擁有者的身份執行
這在一些有權限控制的地方頗有用,好比該文件執行,須要擁有root的權限,好比程序代碼裏,就有判斷名字是不是'root'的用戶啓動的該程序。你但願其它用戶能夠執行該文件,又不可能把全部人編程root,那可使用這種方式。
設置命令爲: sudo chmod u+s filename
跟上述相似,只是其它用戶的執行行爲,最終會議文件實際所屬組的用戶啓動。
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
通常不會對文件夾setuid。 只會對文件夾setgid。文件夾設置setgid後,其下新建立的文件,其組,都是改文件夾的組。不設置的話,通常文件的組,都是跟建立人的名字同樣。
這個設置,不會影響文件夾下已經存在的文件。
能夠手動去修改find /path/to/directory -type d -exec chmod g+s '{}' \;
通常一個文件被setuid和setgid後,其執行權限項會變成s
setuid和setgid設置,容許全部其它用戶執行文件,且執行的時候,是以文件全部者,或文件所屬組的用戶啓動執行。啓動的實際用戶和組信息丟失了
通常設置在文件夾上,設置文件上無效。設置文件夾上,那麼其下文件,只能被文件擁有者、目錄擁有者、root用戶來進行刪除和重命名,其它人則無權限。
設置命令chmod +t foldername
。相應的,移除用chmod -t foldername
該命令能解決的問題是,將文件的刪除、重命名權限鎖定給文件擁有者或管理員。即使當前用戶跟文件全部者在一個組,他也沒辦法把文件刪除.
一個加了sticky 位的文件權限列表形如,其Other的執行權限變成了t
直接使用chmod對文件、文件夾進行上述權限控制,控制的粒度較粗,只能控制到Owner、owner group、others的粒度
若是咱們想對除owner group外的其它特定分組,定製權限
若是咱們想對others中,某個特定的用戶,定製權限
顯然以前的九位,就不能實現了,須要一個表的形式,來存儲多個特定用戶的特質化權限信息,這個東西叫作Access Controll List,簡稱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不會被限制 |
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
使用setfacl -m u::rmx filename
的方式,用戶、group,others的簡稱仍是爲u,g,o。其中兩個冒號,分隔成三塊數據角色:具體名稱:讀寫執行
,兩個冒號中間不指定內容,則說明就是原始的權限模型。好比前面就是對文件owner賦讀寫執行的權限
setfacl -m u:tom:rmx filename
表示對名爲tom的用戶賦讀寫執行的權限
getfacl filename
我有一個文件,經過ls -l
看起權限控制是
drwsr-Srwt 4 root root 110 5月 20 17:10 temp
經過acl方式看是這樣的
能夠看到,除了前面說的ower, group, others三個權限角色對應權限項外。flags中表名的是setuid、setgid、sticky bit這三個權限位的狀況,這裏顯然都開啓了
其實經過chmod定義那幾種權限,最終也體現到了ACL中。
default ACL通常加載文件夾上,他不會改變文件夾自己的權限,而是對多一個default模板,使得其下的文件都具備這個模板中定義的權限
指定方式是對setfacl命令加-d參數,如setfacl -d -m u:dummy:rw test
,而後看該文件夾的acl列表爲
其中的default項會成爲其下新文件的acl
umask是一個權限反碼,用來約束新建立的文件、文件夾的默認權限。
好比將umask設爲077, 其對應的二進制爲000, 111, 111, 將其取反後變爲 111,000,000 , 對應rwx即爲'rwx------'
也即,默認建立的文件、文件夾其Owner,擁有讀寫執行的權限
其所屬組,沒有任何權限
其它全部用戶,沒有任何權限
umask 077
umask u=rwx,g=x,o=x
,這種方式直接限制了默認的owner權限爲rwx, group權限爲x , others權限爲xumask g=
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