用戶的權限管理

兄弟們,我又回來了,幾天不寫博客真是渾身難受呢(當然是騙人的。。。)但本週學的內容還蠻多的,感覺不整理一下又得白學了。還有本週學了聽着很高大上的腳本,雖然感覺蠻難的吧,但是聽老師的口氣貌似和之前一些基本命令的用法有着很大的關係,命令學的好不好直接決定你腳本編的好不好,第一感覺腳本就跟C++裏面的函數是一個東西,就是把很多命令集中成一個文件,讓計算機集中去處理,完成某一特定功能,感覺好像走遠了,先從用戶的權限管理說起吧。


用戶的權限管理主要分爲一下兩點:

普通權限:

特殊權限:

跟其相關的還有一個叫做FACL的東西這個後面再討論


首先我們先明確一下爲什麼用戶的權限要分爲普通和特殊權限?

因爲每一個用戶使用計算機的過程中,必然存在對有限計算機資源使用的限制性,那麼操作系統就必須提供一種途徑來保證每個用戶獨立、合理的使用計算機。

解決完這個問題後我們來淺析一下用戶的權限管理



首先用戶的普通權限:

說到用戶的普通權限我們又不得不說到上週提到過的安全上下文


進程安全上下文:

1.判斷進程的所有者是否爲想要操作的文件的所有者,如果是,就按照屬主的權限進行授權,如果不是,就轉到第二條

2.在判斷進程的所有者是否爲想要操作的文件的屬組中的成員,如果是,就按照屬組的權限進行授權,如果不是就轉到第三條

3.按照文件其他用戶權限進行授權


對於用戶的授權一般按照以上順序進行,下面我們來說說用戶權限的構成

用戶的權限分爲使用權(MODE0)和所有權(OWNERSHIP)


MODE(Permission):使用權

r:Readable,可讀

w:Writable,可寫

x:Executable,可執行


我們分幾個方面對用戶的使用權進行理解一下,首先是對於目錄而言:

r:可以使用ls命令獲得其中所有的文件名的列表:ls -l命令來獲取目錄文件中的詳細的屬性信息,不能使用cd命令進入其中,也不能在路徑中引用該目錄


w:可以修改此目錄下的文件名或文件名列表,即:可以在此目錄中創建、修改或刪除文件名


x:可以使用ls-l命令來獲取其中的文件的詳細屬性信息,也可以在路徑中引用該目錄,也可以使用cd命令進入其中

注意:x權限是最基本權限,任何目錄都必須對任何用戶開放x權限


爲什麼說對於目錄而言,必須給任何用戶開放x權限呢,對於目錄文件來說,我們在進行命令操作的時候,經常要通過引用文件的目錄去指引計算機找到這個文件,如果不給予計算機這個權限的話,這會對我們用戶管理計算機帶來極大的不便


在一個就是對於文件而言:

文件:

r:可以查看或獲取文件中存放的數據

w:可以修改文件中存放的數據

x:可以將此文件發起運行爲進程


前兩個選項不難理解,基本上和目錄一樣,對於x權限,我們認爲,一旦文件對我們用戶開放了這個權限,我們就可以將其發起爲一個進程去執行,而不是簡單地打開去讀取它或者修改它。


對於權限在計算機中的表示我們使用以下幾種表示方式


例:rw-r--r--:三個權限位-屬主、屬組、其他用戶

屬主權限:rw-

屬組權限:r--

其他用戶權限:r--

顯而易見,屬主對於其有可讀和可寫的權限,而屬組對於其只有刻度的權限,其他用戶和屬組一樣,只對其有可讀的權限


除此之外我們還可以用三元組的方式表示權限

---  000  0

--x  001  1

-w-  010  2

-wx  011  3

r--  100  4

r-x  101  5

rw-  110  6

rwx  111  7

例:rw-r--r--

    110100100

    644


 權限既然存在,我們就必然可以修改它,但是我們爲了計算機安全考慮,必須對於權限修改作出嚴格規定,我們規定只有某個文件的屬主才能修改文件的使用權,root除外。


修改文件的使用權限:

chmod --> change mod

chmod - change file mode bits

一共有以下三種方式:

 1.chmod [OPTION]... MODE[,MODE]... FILE...

 MODE:符號權限標識符

 u,g,o,a標識所有權

 +,-,=標識授權方式


 +:在原有的權限基礎上加上某些權限

 -:在原有的權限基礎上減去某些權限

 =:不考慮原有權限,直接將權限設置爲目標權限


 r,w,x表示具體權限內容:

 例:

 chmod u+w file

 chmod g+rw file

 chmod u+x,g-wx,o-x file

 chmod u=rw,g=r,o=r file

 chmod ug-x file

 chmod +x file 默認的爲a添加執行權限

 chmod +w file 默認的只爲屬主添加寫權限


 注意:文件的執行權限:Linux的文件系統來說,非常重要的安全標識,一旦文件具備了執行權限,就意味着該文件可以被髮起執行爲進程,所以默認情況下文件都不具備執行權限


 2.chmod [OPTION]... OCTAL-MODE FILE...

 如果使用八進制數字標識法的話,則每次必須給足所有的權限位,如果給的權限位不完整,文件系統會自動補足,將給定的權限放置在右側,左側使用0來補

 chmod 640 file


 3.chmod [OPTION]... --reference=RFILE FILE...

 chmod --reference=/PATH/TO/SOMEFILE DES_FILE

 chmod --reference=a b


 這是linux中給出的幾種修改文件權限的方式,大家根據具體情況靈活使用


選項:

-R:--Recursive:將目錄中的文件及子目錄和子目錄中的文件統一的設置爲指定的權限標識



說完了使用權,再說說所有權:

OWNERSHIP:所有權

屬主:資源掌控的某個特定用戶:owner(user),u

屬組:是資源掌控的某些特定用戶:group,g

其他用戶:未曾掌控資源的那些用戶:other,o

全部用戶:all,a


對於文件的屬主和屬組我們也可以進行修改,主要用到chown和chgrp命令:

chown:可以修改文件屬主和屬組

chown - change file owner and group

       chown [OPTION]... [OWNER][:[GROUP]] FILE...

       chown OWNER FILE

       chown :GROUP FILE

       chown OWNER:FILE //將目標文件的屬主改爲OWNER,同時將屬組改爲OWNER的基本組

       chown OWNER:GROUP FILE //將目標文件的屬主和屬組改爲OWNER和GROUP


       chown [OPTION]... --reference=RFILE FILE...


-R:--Recursive:將目錄中的文件及子目錄和子目錄中的文件統一的設置爲指定的所有權root


注意修改OWNERSHIP操作只有超級用戶(root)可以完成


chgrp:只能修改文件的屬組

chgrp - change group ownership

chgrp [OPTION]... GROUP FILE...

       chgrp [OPTION]... --reference=RFILE FILE...


一般我們用chown就可以滿足用戶對於文件屬主和屬組的修改,對於chgrp我們也可以記住。


下面我們再來說幾個命令


1.install命令:

install - copy files and set attributes

安裝:複製文件:

常用選項:

-m:指定目標文件的權限,默認爲755   

-o, --owner=OWNER:設定目標文件的屬主:只能是root可用

-g, --group=GROUP:設定目標文件的屬組:只能是root可用


注意:install命令不能複製目錄,即其源不能爲目錄,如果其源爲目錄,則install經歷了會進入目錄,依次複製其中的所有非目錄文件到目標位置


我們用install命令可以在複製文件的過程中,對其使用權和所有權進行修改,比如說在複製過程中給文件加上了執行權限,那麼複製完之後的文件就可以被髮起爲進程


mktemp命令:

一般來講,臨時文件都會創建在/tmp或/var/tmp目錄中,無需手動刪除,系統會定期刪除這兩個目錄中的文件


選項:

-d, --directory:可以創建臨時目錄


例:

mktemp [-d] /PATH/TO/TMP.XXXXXXXXXXXX


這個命令方便我們創建臨時目錄,而且不用自己手動對其進行刪除操作,計算機會定期清理



說完了普通權限,我們再說一下特殊權限,特殊權限主要就是SUID、SGID、STICKY

默認情況下,用戶發起執行一個進程,該進程的發起者是其屬主,也就是說,該進程是以其發起者的身份在運行

SUID:

功能作用:用戶發起一個進程時,該程序文件如果擁有SUID權限的話,則此程序發起的進程其屬主爲該程序文件的屬主,而不是其發起者,這句話的意思就是我們不管是哪個用戶發起的這個進程,只要這個文件具有SUID權限的話,我們都認爲其所有者是這個文件的屬主,而不是發起這個進程的用戶


SUID權限顯示的位置:文件的屬主權限中的執行權限位,如果屬主本來就有執行權限則顯示爲s,否則顯示爲S


管理文件的SUID權限:

chmod u+|-s FILE


SGID:

如果某個目錄的對於一些用戶有寫權限並且設置了SGID權限,則所有對此目錄有寫權限的用戶在創建新的文件或目錄以後,新文件的屬組不再是創建用戶的基本組,而是繼承了該目錄的屬組


SGID顯示位置:文件的屬組權限中的執行權限位:如果屬組本來有執行權限,顯示爲s,否則顯示爲S


管理文件的SGID權限:

chmod g+|- s FILE


SICKY:sticky(粘性的):粘滯位

如果某個目錄中,有超過一個用戶可以有寫權限,則這多個用戶都可以在該目錄中隨意創建、修改和刪除文件名


STICKY的功能作用:

如果爲上述的類似目錄設置了STICKY權限,則每個用戶仍舊能夠創建和修改文件名,但每個用戶只能刪除那些屬主爲其自身的文件名


STICKY權限的顯示位置:在文件權限的其他用戶的執行權限位,如果原來就有執行權限的話顯示爲t,否則顯示爲T


管理文件的STICKY權限:

chmod o+|- t FILE...


suid sgid sticky

---  000    0

--t  001    1

-s-  010    2

-st  011    3

s--  100    4

s-t  101    5

ss-  110    6

sst  111    7

特殊權限另一種修改方式:

將特殊權限對應的八進制數字放置於普通權限八進制數字的前面即可

例:想要給某個目錄加上粘滯位

chmod 1755 DIRECTORY


粘滯位的存在主要是對root用戶提供限制,防止root用戶由於失誤對計算機做出不可挽回的損失。


下面我們再瞭解一下權限遮罩碼的概念,我們知道我們在創建文件的時候,計算機會默認的給文件授權,那麼計算機是根據什麼標準給文件授權的呢,我們就得說到權限遮罩碼的概念了。


root:0022

不考慮特殊權限位

對於新創建的文件或目錄,不遮擋屬主的任何權限,遮住了數組的寫權限和其他用戶的寫權限

理解遮罩碼的方法:將遮罩碼的值變爲二進制,凡是有1的位置,其權限在創建文件是就不設置


0033:000011011 ---110100100 644

               ---111100100 744

默認情況下,文件的遮罩碼已經有了一個0111,在此基礎上再次應用umask來遮罩權限


文件還有一些比較特殊的屬性:

查看文件的特殊屬性:

lsattr - list file attributes on a Linux second extended file system

lsattr [ -RVadv ] [ files...  ]


修改設置文件的特殊屬性:

chattr - change file attributes on a Linux file system

chattr [ -RVf ] [ -v version ] [ mode ] files...

mode:會使用+-=的方式來設置

整個chattr命令最關鍵最核心的設置就是mode部分:

[aAcCdDeijsStTu]都是所需要的屬性


+:在原有屬性設定的基礎上添加新屬性

-:從原有屬性設定中移除指定的屬性

=:不考慮原有的屬性設置,直接將文件的屬性更新爲指定的屬性內容


a:append 設置這個屬性的文件其內容不能被更改和刪除,只能以追加的方式向文件中寫數據,多數的服務器日誌類文件會設置爲此屬性

A:atime,文件的訪問時間戳,IO瓶頸:設置A屬性可以使得文件在被訪問時不更改文件的訪問時間戳,從而可以有效地防止IO瓶頸事件的發生

c:設置文是否自動壓縮後再行存儲

C:設置文件是否開啓“寫時複製”屬性

d:設置文件在使用dump進行備份的時候,不會成爲備份目標

D:設置文件在文件系統中的異步寫操作

i:設置文件不能被刪除、修改、設定鏈接關係

s:設置文件的保密性刪除,一旦設置s屬性的文件被刪除,其對應存儲設備中的使用空間會被一併收回

u:跟s屬性相反,如果這樣的文件被刪除,則其存儲於設備中的數據被留存


最常用的屬性其實就是i和a


常用選項:

-R:遞歸的去設置指定目錄中的所有文件和子目錄中的文件


除了以上所講的管理用戶的權限方法之外,計算機還提供給我們另一種管理文件權限的方法

爲文件賦予額外的權限的機制:FACL:File Access Control List,文件訪問控制列表

文件的額外賦權機制:

在原有的u,g,o權限位之外,讓普通用戶能夠控制權限賦予另外的用戶和組的一種賦權機制


一般推薦爲在centos或RHEL7版本以後的發行版中,才逐漸成熟;

與FACL有關的命令:

getfacl:getfacl - get file access control lists

getfacl [-aceEsRLPtpndvh] file ...

user:USERNAME:MODE

group:GROUPNAME:MODE



setfacl:setfacl - set file access control lists

setfacl [-bkndRLPvh] [{-m|-x} acl_spec] [{-M|-X} acl_file] file ...


acl_spec: acl specification,指定的訪問控制列表

u:USERNAME:MODE

g:GROUPNAME:MODE

MODE:一般使用符號權限標識法


爲用戶賦予額外權限:

setfacl -m u:USERNAME:MODE FILE...


爲組賦予額外權限:

setfacl -m g:USERNAME:MODE FILE...


撤銷爲用戶賦予額外權限:

setfacl -x u:USERNAME


撤銷爲組賦予額外權限:

setfacl -x g:USERNAME


注意:如果設置了FACL之後再修改目標文件的使用權限,那麼FACL中設置的條目就可能收到影響而導致與要求不符,因此,如果真的需要設置FACL,就要在已經確定目標文件的使用權限以後再進行設置


以上就是關於用戶的權限管理,學的有點雲裏霧裏的,還得配合着作業去鞏固一下。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章