天天看點

linux使用者身份與檔案權限

tips:可以将安裝好的系統設定為一次快照,這樣即便系統徹底崩潰了,也可以在5秒的時間内快速還原出一台全新的系統,而不用擔心資料丢失

Linux系統的管理者之是以是root,并不是因為它的名字叫root,而是因為該使用者的身份号碼即UID(User IDentification)的數值為0。

管理者UID為0:系統的管理者使用者。 系統使用者UID為1~999:Linux系統為了避免因某個服務程式出現漏洞而被黑客提權至整台伺服器,預設服務程式會由獨立的系統使用者負責運作,進而有效控制被破壞範圍。 普通使用者UID從1000開始:是由管理者建立的用于日常工作的使用者。

<code>id</code>指令用于顯示使用者的詳細資訊,文法格式為“id使用者名”

<code>useradd</code>指令用于建立新的使用者賬戶,文法格式為“useradd [參數] 使用者名”

<code>groupadd</code>指令用于建立新的使用者組,文法格式為“groupadd [參數] 群組名”

<code>usermod</code>指令用于修改使用者的屬性,英文全稱為“user modify”,文法格式為“usermod [參數] 使用者名”

<code>passwd</code>指令用于修改使用者的密碼、過期時間等資訊,英文全稱為“password”,文法格式為“passwd [參數] 使用者名”

<code>userdel</code>指令用于删除已有的使用者賬戶,英文全稱為“user delete”,文法格式為“userdel [參數] 使用者名”

對于一般檔案來說,權限比較容易了解:“可讀”表示能夠讀取檔案的實際内容;“可寫”表示能夠編輯、新增、修改、删除檔案的實際内容;“可執行”則表示能夠運作一個腳本程式。但是,對于目錄檔案來說,了解其權限設定就不那麼容易了。很多資深Linux使用者其實也沒有真正搞明白。對于目錄檔案來說,“可讀”表示能夠讀取目錄内的檔案清單;“可寫”表示能夠在目錄内新增、删除、重命名檔案;而“可執行”則表示能夠進入該目錄。

linux使用者身份與檔案權限
linux使用者身份與檔案權限
linux使用者身份與檔案權限

在圖5-3中,包含了檔案的類型、通路權限、所有者(屬主)、所屬組(屬組)、占用的磁盤大小、最後修改時間和檔案名稱等資訊

tip:排在權限前面的減号(-)是檔案類型(減号表示普通檔案),新手經常會把它跟“無權限”混淆。盡管在Linux系統中一切都是檔案,但是不同的檔案由于作用不同,是以類型也不盡相同(有一點像Windows系統的字尾名)。常見的檔案類型包括普通檔案(-)、目錄檔案(d)、連結檔案(l)、管道檔案(p)、塊裝置檔案(b)以及字元裝置檔案(c)。

1. SUID

SUID是一種對二進制程式進行設定的特殊權限,能夠讓二進制程式的執行者臨時擁有所有者的權限(僅對擁有執行權限的二進制程式有效)。

這很像在古裝劇中見到的手持尚方寶劍的欽差大臣,他手持的尚方寶劍代表的是皇上的權威,是以可以懲戒貪官,但這并不意味着他永久成為了皇上。是以這隻是一種有條件的、臨時的特殊權限授權方法。

2. SGID

SGID特殊權限有兩種應用場景:當對二進制程式進行設定時,能夠讓執行者臨時擷取檔案所屬組的權限;當對目錄進行設定時,則是讓目錄内新建立的檔案自動繼承該目錄原有使用者組的名稱。

<code>chmod</code>指令用于設定檔案的一般權限及特殊權限,英文全稱為“change mode”,文法格式為“chmod [參數] 檔案名”。

<code>chown</code>指令用于設定檔案的所有者和所有組,英文全稱為change own,文法格式為“chown所有者:所有組 檔案名”。

3. SBIT(Sticky Bit)特殊權限位

SBIT特殊權限位可確定使用者隻能删除自己的檔案,而不能删除其他使用者的檔案。換句話說,當對某個目錄設定了SBIT粘滞位權限後,那麼該目錄中的檔案就隻能被其所有者執行删除操作了。

tip:檔案能否被删除并不取決于自身的權限,而是看其所在目錄是否有寫入權限

使用chmod指令設定特殊權限的參數

linux使用者身份與檔案權限
linux使用者身份與檔案權限

​ 既然叫隐藏權限,那麼使用正常的ls指令肯定不能看到它的真面目。隐藏權限的專用設定指令是chattr,專用檢視指令是lsattr。

<code>chattr</code>指令用于設定檔案的隐藏權限,英文全稱為change attributes,文法格式為“chattr [參數] 檔案名稱”

<code>lsattr</code>指令用于檢視檔案的隐藏權限,英文全稱為“list attributes”,文法格式為“lsattr [參數] 檔案名稱”

<code>setfacl</code>指令用于管理檔案的ACL權限規則,英文全稱為“set files ACL”,文法格式為“setfacl [參數] 檔案名稱”

<code>getfacl</code>指令用于檢視檔案的ACL權限規則,英文全稱為“get files ACL”,文法格式為“getfacl [參數] 檔案名稱”

ACL權限的設定都是立即且永久生效的,不需要再編輯什麼配置檔案

在<code>備份</code>/home目錄上的ACL權限時,可使用-R遞歸參數,這樣不僅能夠把目錄本身的權限進行備份,還能将裡面的檔案權限也自動備份。

<code>ACL權限的恢複</code>也很簡單,使用的是--restore參數。由于在備份時已經指定是對/home目錄進行操作,是以不需要寫對應的目錄名稱,它能夠自動找到要恢複的對象

<code>su指令</code>可以解決切換使用者身份的需求,使得目前使用者在不登出的情況下,順暢地切換到其他使用者

su指令與使用者名之間有一個減号(-),這意味着完全切換到新的使用者,即把環境變量資訊也變更為新使用者的相應資訊,而不是保留原始的資訊。

<code>sudo指令</code>用于給普通使用者提供額外的權限,文法格式為“sudo [參數] 使用者名”。

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

但是每次執行sudo指令都要輸入一次密碼其實也挺麻煩的,這時可以添加NOPASSWD參數,使得使用者下次再執行sudo指令時就不用密碼驗證:

<code>visudo指令</code>用于編輯、配置使用者sudo的權限檔案,文法格式為“visudo [參數]”。

visudo指令隻有root管理者才可以執行,普通使用者在使用時會提示權限不足。