1. 程式人生 > >18文件權限管理

18文件權限管理

log 依然 新用戶 安全性 服務 合並 用戶權限 hat 鏈接文件

一. 文件權限概述

盡管在Linxu系統中一切都是文件,但是每個文件的類型不盡相同,因此Linux系統使用了不同的字符來加以區分。

-       普通文件
d       目錄文件
l       鏈接文件
b       塊設備文件
c       字符設備文件
p       管道文件

Linux 中規定義了文件的所有者、所有組以及其他人對文件所擁有的可讀(r)、可寫(w)、可執行(x)等權限。

對於一般文件來說,權限比較容易理解:“可讀”表示能夠讀取文件的內容;“可寫”表示能夠編輯、新增、修改、刪除文件的實際內容;“可執行”則表示能夠運行一個腳本程序。

但是,對於目錄文件來說,其權限設置就不那麽容易了。

可讀      表示能夠讀取目錄內的文件列表
可寫      表示能夠在目錄內新增、刪除、重命名文件
可執行     表示能夠進入該目錄

[root@rockman 0620]# ls -l
total 8
#文件類型為:普通文件;所有者權限:讀寫執行;同組權限:讀;其他人權限:讀
-rw-r--r--. 1 root root 28 Jun 20 09:32 atcopy.txt

二. 文件的特殊權限

主要包括SUID、SGID與SBIT的特殊權限位。這是一種對文件權限進行設置的特殊功能,可以與一般權限同時使用,以彌補一般權限不能實現的功能。

  1. SUID

SUID是一種對二進制程序進行設置的特殊權限,可以讓二進制程序的執行者臨時擁有屬豬的權限。

  1. SGID

SGID主要實現如下兩種工能:

讓執行者臨時擁有屬組的權限(對擁有執行權限的二進制程序進行設置);

在某個目錄中常見的文件自動繼承該目錄的用戶組(只可以對目錄進行設置);

  1. SBIT

SBIT特殊權限位可確保用戶只能刪除自己的文件,而不能刪除其他用戶的文件。換句話說,當對某個目錄設置了SBIT粘滯位權限後,那麽該目錄中的文件就只能被其所有者執行刪除操作了。

三. 文件的隱藏權限

隱藏權限,指被隱藏起來的權限,默認情況下不能直接被用戶發覺。(不是隱藏文件的權限!!!)

  1. chattr 命令

chattr命令用於設置文件的隱藏權限,格式為“chattr [參數] 文件”。

如果想要把某個隱藏功能添加到文件上,則需要在命令後面追加“+參數”,如果想要把某個隱藏功能移出文件,則需要追加“-參數”。

chattr命令中可供選擇的隱藏權限參數:

i       無法對文件進行修改;若對目錄設置了改參數,則僅能膝蓋其中的子文件內容而不能新建或者刪除文件
a       僅允許補充(追加)內容,無法覆蓋/刪除內容(Append Only)
S       文件內容在變更後立刻同步到硬盤(sync)
s       徹底從硬盤中刪除,不可恢復(用0填充原文件所在硬盤)
A       不在修改這個文件或目錄的最後訪問時間(atime)
b       不在修改文件或目錄的存取時間
D       檢查壓縮文件中的錯誤
d       使用dump命令備份時忽略忽略本文件/目錄
c       默認將文件或者目錄進行壓縮
u       當刪除改文件後依然保留其在硬盤中的數據,方便日後恢復
t       讓文件系統支持尾部合並
X       可以直接訪問壓縮文件中的內容

#創建一個普通文件,可以直接刪除掉
[root@localhost 0623]# echo "for test file" > test.txt
[root@localhost 0623]# rm test.txt
rm: remove regular file ‘test.txt’? y
[root@localhost 0623]# ls
#創建一個普通文件,加上 a 隱藏屬性(只允許追加),則無法刪除
[root@localhost 0623]# echo "for test file" > test.txt
[root@localhost 0623]# chattr +a test.txt
[root@localhost 0623]# rm test.txt
rm: remove regular file ‘test.txt’? y
rm: cannot remove ‘test.txt’: Operation not permitted
#創建一個普通文件,移出 a 隱藏屬性,則可以刪除
[root@localhost 0623]# chattr -a test.txt
[root@localhost 0623]# rm test.txt
rm: remove regular file ‘test.txt’? y
[root@localhost 0623]# ls
[root@localhost 0623]#
  1. lsattr 命令

lsattr命令用於顯示文件的隱藏屬性,格式為“lsattr [參數] 文件”。Linux系統中,文件的隱藏權限必須使用lsattr命令查看,平時使用的ls之類的命令則看不出端倪。

[root@localhost 0623]# ls -al test.txt
-rw-r--r--. 1 root root 10 Jun 23 11:03 test.txt
[root@localhost 0623]# chattr +a test.txt
[root@localhost 0623]# lsattr -al test.txt
test.txt                     Append_Only
[root@localhost 0623]# lsattr test.txt
-----a---------- test.txt
[root@localhost 0623]#

四. su命令與sudo 服務

  1. su 命令

在學習中,使用root更加方便,但是在生產環境中還是要對安全多一份敬畏之心,不要用root管理員去做所有事情。因為一旦執行了錯誤的命令,可能會直接到時系統崩潰。

盡管Linux系統為了安全考慮,使得許多系統命令和服務只能被root管理員使用,但是這也讓普通用戶受到了更多的權限束縛,從而導致無法順利完成特定的工作任務。

su命令可以解決切換用戶身份的需求,使得當前用戶在不退出登錄的情況下,順暢地切換到其他用戶。

[root@localhost 0623]# id
uid=0(root) gid=0(root) groups=0(root) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
#su命令之後的減號(-),意味著完全切換到新用戶,即把環境變量信息也變更為新用戶的相應信息,而不是保留原始的信息。
[root@localhost 0623]# su - hk
Last login: Fri Jun  8 09:55:59 CST 2018 on tty1
[hk@localhost ~]$ id
uid=1000(hk) gid=1000(hk) groups=1000(hk) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
[hk@localhost ~]$

盡管像上面這樣使用su命令之後,普通用戶完全可以切換到root管理員身份來完成相應工作,但是這將暴露root管理員密碼,從而增大了系統密碼被黑客獲取的幾率,這病不是最安全的方案。

  1. sudo 服務

sudo命令把特定命令的執行權限賦予給指定用戶,這樣既可以保證普通用戶能夠完成特定的工作,也可以皮面泄露root管理員密碼。我們要做的就是合理配置sudo服務,以便兼顧系統的安全性和用戶的便捷性。

sudo 命令用於給普通用戶提供額外的權限來完成原本root管理員才能完成的任務,格式為“sudo [參數] 命令名稱”。

總的來說,sudo命令具有如下功能:
限制用戶執行指定的命令
記錄用戶執行的每一條命令
配置文件(/etc/sudoers)提供集中的用戶管理、權限主機等參數
驗證密碼後的5分鐘內(默認值)無需再讓用戶再次驗證密碼

當然,如果擔心直接修改配置文件會出現問題,則可以使用sudo命令提供的visudo命令來配置用戶權限。

18文件權限管理