Linux的許可權控制

谢友海發表於2024-07-27

本章將和大家分享Linux中的許可權控制。廢話不多說,下面我們直接進入主題。

一、基礎知識

Linux作為一種多使用者的作業系統(伺服器系統),允許多個使用者同時登陸到系統上,並響應每個使用者的請求。

任何需要使用作業系統的使用者,都需要一個系統賬號,賬號分為:管理員賬號與普通使用者賬號

在Linux中,作業系統根據UID來判斷使用者,而不是使用者名稱,只要id為0就是管理員,哪怕有多個id為0的賬號

系統在新建賬號時,會根據賬號型別,自動分配遞增賬號的UID與GID (使用者身份編號,組編號),也可自行分配。通常情況下,應當保證UID與GID唯一且不重複

1、組的類別

在Linux中,每個使用者必須有一個主組。當建立賬號時,系統會自動建立一個同名組作為該賬戶的主組。使用者必須屬於一個且只有一個主組。使用者可以屬於零個或者多個附加組。

2、使用者與組的配置檔案

在Linux中,萬物皆檔案,所以使用者與組也以配置檔案的形式儲存在系統中,以下為使用者和組的主要配置檔案詳解:

-   /etc/passwd:使用者及其屬性資訊(名稱、 UID、主組ID等)
-   /etc/group:組及其屬性資訊
-   /etc/shadow:使用者密碼及其相關屬性
-   /etc/gshadow:組密碼及其相關屬性

1)passwd檔案格式

依次含義為(用 : 分割):

  • 登入使用者名稱
  • 密碼
  • UID
  • GID
  • 全名或註釋
  • 使用者主目錄
  • 使用者預設使用shell

2)group檔案格式

依次含義為(用 : 分割):

  • 群組名稱
  • 群組密碼(通常不需要設定,密碼被記錄在/etc/gshadow)
  • GID:群組ID
  • 組成員(以“,”來分割,該賬戶沒有附加組所以為空)

3)shadow檔案格式

依次含義為(用 : 分割):

  • 登入使用者名稱
  • 密碼(通常使用shad512加密)
  • 從1970年1月1日起計算到現在為止密碼最近一次被更改的時間
  • 密碼再過幾天就可以被修改(0表示隨時可改)
  • 密碼幾天後必須變更(99999表示永不過期)
  • 密碼過期前多久提示使用者
  • 密碼過期多久後賬戶將被鎖定
  • 多少天后賬戶將失效(從1970-1-1算起)

4)gshadow檔案格式

依次含義為(用 : 分割):

  • 群組名稱
  • 群組密碼
  • 組管理員列表
  • 當前使用者的附加組

二、使用者賬號管理

在Linux,管理員在預設情況下為root賬戶,UID=0。普通使用者UID預設範圍為1-65535。在centos 6中,新建使用者,預設系統使用者的UID範圍為1-499,普通使用者為500+。

在centos 7中,系統使用者範圍為1-999,普通使用者為1000+。對系統的操作許可權由使用者決定

通常對使用者賬號的操作分為新增,修改,刪除。

1、新增賬戶

透過 useradd 命令來新增使用者,語法如下:

useradd [opentions] login

引數說明:

  • -u UID 自定義UID(預設系統遞增)
  • -o 配合-u 選項,不檢查UID的唯一性(不建議)
  • -g GID:指明使用者所屬基本組,可為組名,也可以GID
  • -c comment 指定一段註釋性描述。
  • -d 目錄 指定使用者主目錄,如果此目錄不存在,則同時使用-m選項,可以建立主目錄。
  • -g 使用者組 指定使用者所屬的使用者組(主組)。
  • -G 使用者組,使用者組 指定使用者所屬的附加組。
  • -s Shell檔案 指定使用者的登入Shell。
  • -u 使用者號 指定使用者的使用者號,如果同時有-o選項,則可以重複使用其他使用者的標識號。

示例1(常用):

useradd -d /usr/ddz ddz

建立了一個使用者ddz,並將他的家目錄(主目錄)設定到/usr/ddz

示例2:

groupadd 組名 新增使用者組
   -g :新增組時指定組ID
groupmod 組名 修改使用者組資訊
   -n :修改組名
   -g :修改組ID
groupdel 組名 刪除組
*如果一個組下有使用者,那麼這個組是無法刪除的。
useradd -s /sbin/bash -g root -G mage,wang ddz

此命令新建了一個使用者ddz,設定該使用者使用的shell為/sbin/bash,設定他的主組屬於root使用者組,設定附加組為mage和wang。(當設定組時,要保證組已經存在,否則請先建立該組

小技巧:

  • 增加使用者賬號就是在/etc/passwd檔案中為新使用者增加一條記錄,同時系統會自動更新其他系統檔案如/etc/shadow,/etc/group等。
  • 通常情況建立賬戶,賬戶ID會按照最大的值遞增,但是遞增的值必須在最大範圍內。
  • 在部署軟體時,通常會需要使用賬戶,所以需要指定UID,來部署所有的賬號都用同一個UID,來方便管理。
  • newusers [passwd格式檔案] 用於批次建立賬戶,只需要每一列賬戶資訊格式,按照passwd中書寫,之後上傳到Linux中替換即可。
  • chpasswd 批次修改使用者口令。將檔案格式寫為:user:passwd 。每行一個,之後匯入Linux即可。
  • 建立賬戶的預設值設定位於: /etc/default/useradd檔案中,該檔案記錄了建立使用者賬戶時的預設資訊,可透過修改該檔案來修改建立賬戶時的資訊。

2、刪除帳號

如果一個使用者的賬號不再使用,可以從系統中刪除。刪除使用者賬號就是要將/etc/passwd等系統檔案中的該使用者記錄刪除,必要時還需刪除使用者的主目錄。

通常在運維工作中,一般使用讓賬號失效,或者修改賬戶名的方式,來便捷的操作賬號。

刪除一個已有的使用者賬號使用userdel命令,其格式如下:

userdel 選項 使用者名稱

常用的選項是 -r,它的作用是把使用者的主目錄一起刪除。

例如:

userdel -r sam

此命令刪除使用者sam在系統檔案中(主要是/etc/passwd, /etc/shadow, /etc/group等)的記錄,同時刪除使用者的主目錄。

刪除賬號需要該賬戶沒有人在使用,才能刪除成功。請使用命令刪除,不要去手動改檔案。

3、修改帳號

修改使用者賬號就是根據實際情況更改使用者的有關屬性,如使用者號、主目錄、使用者組、登入Shell等。

修改已有使用者的資訊使用usermod命令,其格式如下:

usermod 選項 使用者名稱

常用的選項包括-c, -d, -m, -g, -G, -s, -u以及-o等,這些選項的意義與useradd命令中的選項一樣,可以為使用者指定新的資源值。

另外,有些系統可以使用選項:-l 新使用者名稱。這個選項指定一個新的賬號,即將原來的使用者名稱改為新的使用者名稱。

例如:

usermod -s /bin/ksh -d /home/z -g developer sam

此命令將使用者sam的登入Shell修改為ksh,主目錄改為/home/z,使用者組改為developer。

4、查詢賬號口令

id [opentions] [User]

相關引數:

  • -u:顯示UID
  • -g:顯示GID
  • -G:顯示使用者所屬的組ID
  • -n:顯示名稱

5、使用者口令管理

使用者管理的一項重要內容是使用者口令的管理。使用者賬號剛建立時沒有口令,但是被系統鎖定,無法使用(在passwd檔案中,密碼列顯示為!!或者!表示使用者被鎖定,是無法登陸的),必須為其指定口令後才可以使用,即使是指定空口令。

指定和修改使用者口令的Shell命令是passwd。超級使用者可以為自己和其他使用者指定口令,普通使用者只能用它修改自己的口令。命令的格式為:

passwd 選項 使用者名稱

可使用的選項:

  • -l 鎖定口令,即禁用賬號。
  • -u 口令解鎖。
  • -d 使賬號無口令。
  • -f 強迫使用者下次登入時修改口令。

如果預設使用者名稱,則修改當前使用者的口令。

例如,假設當前使用者是sam,則下面的命令修改該使用者自己的口令:

passwd 
Old password:****** 
New password:******* 
Re-enter new password:*******

如果是超級使用者,可以用下列形式指定任何使用者的口令:

passwd sam 
New password:******* 
Re-enter new password:*******

普通使用者修改自己的口令時,passwd命令會先詢問原口令,驗證後再要求使用者輸入兩遍新口令,如果兩次輸入的口令一致,則將這個口令指定給使用者;而超級使用者為使用者指定口令時,就不需要知道原口令。

為了系統安全起見,使用者應該選擇比較複雜的口令,例如最好使用8位長的口令,口令中包含有大寫、小寫字母和數字,並且應該與姓名、生日等不相同。

為使用者指定空口令時,執行下列形式的命令:

passwd -d sam

此命令將使用者sam的口令刪除,這樣使用者sam下一次登入時,系統就不再詢問口令。

passwd命令還可以用-l(lock)選項鎖定某一使用者,使其不能登入,例如:

passwd -l sam

利用組來簡化授權操作,當對整個組授權時,整個組下的賬號許可權都會進行修改

使用者相關的其他指令:

chfn [USER] 修改使用者的備註文件

chsh [Shell] 修改使用者的指定shell

三、使用者組的管理

每個使用者都有一個使用者組,系統可以對一個使用者組中的所有使用者進行集中管理。不同 Linux 系統對使用者組的規定有所不同,如 Linux 下的使用者屬於與它同名的使用者組,這個使用者組在建立使用者時同時建立。

使用者組的管理涉及使用者組的新增、刪除和修改。組的新增、刪除和修改實際上就是對/etc/group檔案的更新。

1、增加組

增加一個新的使用者組使用groupadd命令,其格式如下:

groupadd 選項 使用者組

可以使用的選項有:

  • -g GID 指定新使用者組的組標識號(GID)。
  • -o 一般與-g選項同時使用,表示新使用者組的GID可以與系統已有使用者組的GID相同。
  • -r 建立系統組。

示例1:

groupadd group1

此命令向系統中增加了一個新組group1,新組的組標識號是在當前已有的最大組標識號的基礎上加1。

示例2:

groupadd -g 101 group2

此命令向系統中增加了一個新組group2,同時指定新組的組標識號是101。

2、刪除組

如果要刪除一個已有的使用者組,使用groupdel命令,其格式如下:

groupdel 使用者組

示例:

groupdel group1

此命令從系統中刪除組group1。要想刪除組,要確保該組不是主組,才能把這個組刪掉。

3、修改組

修改使用者組的屬性使用groupmod命令,其語法如下:

groupmod 選項 使用者組

常用的選項有:

  • -g GID 為使用者組指定新的組標識號。
  • -o 與-g選項同時使用,使用者組的新GID可以與系統已有使用者組的GID相同。
  • -n 新使用者組 將使用者組的名字改為新名字。

示例1:

groupmod -g 102 group2

此命令將組group2的組標識號修改為102。

示例2:

groupmod -g 10000 -n group3 group2

此命令將組group2的標識號改為10000,組名修改為group3。

4、切換組(臨時切換主組)

如果一個使用者同時屬於多個使用者組,那麼使用者可以在使用者組之間切換,以便具有其他使用者組的許可權。

使用者可以在登入後,使用命令newgrp切換到其他使用者組。例如:

newgrp root

這條命令將當前使用者切換到root使用者組,前提條件是root使用者組確實是該使用者的主組或附加組。類似於使用者賬號的管理,使用者組的管理也可以透過整合的系統管理工具來完成。

更改檢視組成員

可以透過以下命令,來更改和檢視組中的成員:

groupmems [opentions] [action]

引數如下:

  • -g 更改為指定組(只有root可以使用)
  • -a 指定使用者加入組
  • -d 從組中刪除該使用者
  • -p 從組中清除所有成員
  • -l 顯示組成員列表

示例1:

groupmems -l -g root

此命令表示檢視root組中存在的成員。

示例2:

groupmems -a Father -g root

此命令表示將Father使用者加入root組中。

小技巧:

  • 一個使用者可以加入不同的組,但是有且只有一個主組。
  • 一個使用者的許可權為他所屬的多個組的累加許可權 。假設user賬戶附加組group1 = write group2 = read ,那麼user就擁有 write + read許可權。
  • 組和使用者的關係是多對多 一個使用者可以有多個組,一個組也可以有多個使用者。
  • 在windows中,只有管理員才允許對使用者組進行操作,但在Linux中,只要有組的口令,就可以讓賬號進入組。
  • root組的許可權與普通組許可權大致相同,賬號並不是加入root組就能獲得使用者許可權。

四、檔案的許可權控制

1、檔案許可權與歸屬

在Linux系統中,每個檔案都有歸屬的所有者和所有組,並且規定了檔案的所有者、所有組以及其他人對檔案所擁有的讀(r)、寫(w)、執行(x)等許可權。

對於一般檔案來說,許可權比較容易理解:“可讀”表示能夠讀取檔案的實際內容;“可寫”表示能夠編輯、新增、修改、刪除檔案的實際內容;“可執行”則表示能夠執行一個指令碼程式。

但是,對於目錄檔案來說,理解其許可權設定來就不那麼容易了。很多資深Linux使用者其實也沒有真正搞明白。

對目錄檔案來說,“可讀”表示能夠讀取目錄內的檔案列表;“可寫”表示能夠在目錄內新增、刪除、重新命名檔案;而“可執行”則表示能夠進入該目錄。

讀寫執行許可權對於檔案與目錄可執行命令的區別:

檔案的讀、寫、執行許可權英文全稱分別是read、write、execute,可以簡寫為r、w、x,亦可分別用數字4、2、1來表示,檔案所有者,所屬組及其他使用者許可權之間無關聯。

檔案許可權的字元與數字表示:

檔案許可權的數字法表示基於字元(rwx)的許可權計算而來,其目的是簡化許可權的表示方式。例如,若某個檔案的許可權為**7**則代表可讀、可寫、可執行(4+2+1);若許可權為6則代表可讀、可寫(4+2)。我們來看這樣一個例子,現在有這樣一個檔案,其所屬者擁有可讀、可寫、可執行的許可權,其所屬組擁有可讀、可寫的許可權,而其他人只有可讀的許可權。那麼,這個檔案的許可權就是rwxrw-r--,數字法表示即為764。不過大家千萬別再將這三個數字相加,計算出7+6+4=17的結果,這是小學的數學加減法,不是Linux系統的許可權數字表示法,三者之間沒有互通關係。

以rw-r-x-w-許可權為例進行講解,要想轉換成數字法,首先要進行各個位之上的數字替代,如圖(字元與數字許可權轉換示意圖)所示:

減號是佔位符,代表這裡沒有許可權,數字法用0表示,也就是說rw-轉換後是420,r-x轉換後是401,-w-轉換後是020,三組數字之間每組數字進行相加後得出652便是轉換後的數字法許可權。

而數字法轉回到字元許可權相比來說就有些難度了,以652許可權為例進行講解。首先數字6是由4+2得到的,不可能是4+1+1,因為每個許可權只能佔一位,所以數字5則是4+1得到的,2便是本身,沒有許可權即是空值0。

數字與字元許可權轉換示意圖:

心中牢記:檔案的所屬者、所屬組和其他人許可權之間無關聯,不要寫成rrwwx—-的樣子,一定要把rwx許可權位對應到正確的位置,寫成rw-r-x-w-。

透過ls命令檢視到的檔案屬性資訊:

包含了檔案的型別(第一個字元表示檔案的型別,d表示資料夾,減號表示普通檔案)、訪問許可權、所有者(屬主)、所屬組(屬組)、佔用的磁碟大小、最後修改時間和檔名稱等資訊。透過分析可知,該檔案的型別為普通檔案,所有者許可權為可讀、可寫(rw-),所屬組許可權為可讀(r--),除此以外的其他人也只有可讀許可權(r--),檔案的磁碟佔用大小是34298位元組,最近一次的修改時間為4月2日的凌晨23分,檔案的名稱為install.log。

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

普通檔案的範圍特別廣泛,比如純文字資訊、服務配置資訊、日誌資訊以及Shell指令碼等等都包含在內,所以幾乎在每個目錄下都能看到普通檔案(-)和目錄檔案(d)的身影。塊裝置檔案(b)和字元裝置檔案(c)一般是指硬體裝置,比如滑鼠、鍵盤、光碟機、硬碟等等都是裝置檔案,主要集中在/dev/目錄中最為常見,不過其實很少會對滑鼠鍵盤進行硬體級別的管理吧~

2、檔案的特殊許可權

在複雜多變的生產環境中,單純設定檔案的rwx許可權無法滿足我們對安全和靈活性的需求,因此便有了SUID、SGID與SBIT的特殊許可權位。這是一種對檔案許可權進行設定的特殊功能,可以與一般許可權同時使用,以彌補一般許可權不能實現的功能。

下面具體解釋這3個特殊許可權位的功能以及用法。

1)SUID

SUID是一種對二進位制程式進行設定的特殊許可權,能夠讓二進位制程式的執行者臨時擁有所屬主的許可權(僅對擁有執行許可權的二進位制程式有效)。例如,所有使用者都可以執行passwd命令來修改自己的使用者密碼,而使用者密碼儲存在/etc/shadow檔案中。仔細檢視這個檔案就會發現它的預設許可權是000,也就是說除了root管理員以外,所有使用者都沒有檢視或編輯該檔案的許可權。但是,在使用passwd命令時如果加上SUID特殊許可權位,就可讓普通使用者臨時獲得程式所屬者的身份,把變更的密碼資訊寫入到shadow檔案中。這很像在古裝劇中見到的手持尚方寶劍的欽差大臣,他手持的尚方寶劍代表的是皇上的權威,因此可以懲戒貪官,但這並不意味著他永久成為了皇上。因此這只是一種有條件的、臨時的特殊許可權授權方法。

檢視passwd命令屬性時發現所屬者的許可權由rwx變成了rws,其中x改變成s就意味著該檔案被賦予了SUID許可權。另外有讀者會好奇,那麼如果原本的許可權是rw-呢?如果原先許可權位上沒有x執行許可權,那麼被賦予特殊許可權後將變成大寫的S

[root@localhost ~]# ls -l /etc/shadow
----------. 1 root root 1345 7月  22 22:06 /etc/shadow
[root@localhost ~]# ls -l /bin/passwd
-rwsr-xr-x. 1 root root 27856 4月   1 2020 /bin/passwd

注意:一定要小心這個許可權,因為一旦某個命令檔案被設定上了SUID許可權,那麼就意味著凡是執行的人都可以臨時獲取到更高的許可權,千萬不要設定到vim、cat、rm等命令上面!!!

2)SGID

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

第一種功能是參考SUID而設計的,不同點在於執行程式的使用者獲取的不再是檔案所屬者的臨時許可權,而是獲取到檔案所屬組的許可權。舉例來說,在早期的Linux系統中,/dev/kmem是一個字元裝置檔案,用於儲存核心程式要訪問的資料,許可權為:

cr--r----- 1 root system 2, 1 Feb 11 2017 kmem

大家看出問題了嗎?除了root管理員或屬於system組成員外,其他使用者都沒有讀取該檔案的許可權。由於在平時我們需要檢視系統的程序狀態,為了能夠獲取到程序的狀態資訊,可在用於檢視系統程序狀態的ps命令檔案上增加SGID特殊許可權位。檢視ps命令檔案的屬性資訊:

-r-xr-sr-x 1 bin system 59346 Feb 11 2017 ps

這樣一來,由於ps命令被增加了SGID特殊許可權位,所以當使用者執行該命令時,也就臨時獲取到了system使用者組的許可權,從而順利地讀取到了裝置檔案。

前文提到,每個檔案都有其歸屬的所屬者和所屬組,當建立或傳送一個檔案後,這個檔案就會自動歸屬於執行這個操作的使用者(即該使用者是檔案的所有者)。如果現在需要在一個部門內設定共享目錄,讓部門內的所有人員都能夠讀取目錄中的內容,那麼就可以建立部門共享目錄後,在該目錄上設定SGID特殊許可權位。這樣,部門內的任何人員在裡面建立的任何檔案都會歸屬於該目錄的所屬組,而不再是自己的基本使用者組。此時,用到的就是SGID的第二個功能,即在某個目錄中建立的檔案自動繼承該目錄的使用者組(只可以對目錄進行設定)。

[root@localhost ~]# cd /tmp
[root@localhost tmp]# mkdir testdir
[root@localhost tmp]# ls -ald testdir
drwxr-xr-x. 2 root root 6 7月  23 22:27 testdir
[root@localhost tmp]# chmod -R 777 testdir
[root@localhost tmp]# chmod -R g+s testdir
[root@localhost tmp]# ls -ald testdir
drwxrwsrwx. 2 root root 6 7月  23 22:27 testdir

在使用上述命令設定好目錄的777許可權(確保普通使用者可以向其中寫入檔案),併為該目錄設定了SGID特殊許可權位後,就可以切換至一個普通使用者,然後嘗試在該目錄中建立檔案,並檢視新建立的檔案是否會繼承新建立的檔案所在的目錄的所屬組名稱:

[root@localhost ~]# su - dev1
上一次登入:二 7月 23 22:34:01 CST 2024pts/0 上
[dev1@localhost ~]$ cd /tmp/testdir
[dev1@localhost testdir]$ echo "linuxprobe.com" > test
[dev1@localhost testdir]$ ls -al test
-rw-r--r--. 1 dev1 root 15 7月  23 22:35 test

除了上面提到的SGID的這兩個功能,再介紹兩個與本小節內容相關的命令:chmod和chown。

chmod命令用於設定檔案的一般許可權及特殊許可權,英文全稱為:“change mode”,語法格式為:“chmod [引數] 檔名”。

這是一個與日常設定檔案許可權強相關的命令,例如要把一個檔案的許可權設定成其所有者可讀可寫可執行、所屬組可讀可寫、其他人沒有任何許可權,則相應的字元法表示為rwxrw----,其對應的數字法表示為760。

[root@linuxprobe ~]# ls -l anaconda-ks.cfg 
-rw-------. 1 root root 1407 Jul 21 05:09 anaconda-ks.cfg
[root@linuxprobe ~]# chmod 760 anaconda-ks.cfg 
[root@linuxprobe ~]# ls -l anaconda-ks.cfg 
-rwxrw----. 1 root root 1407 Jul 21 05:09 anaconda-ks.cfg

chown命令用於設定檔案的所有者和所有組,英文全稱為:“change own”,語法格式為:“chown 所有者:所有組 檔名”。

chmod和chown命令是用於修改檔案屬性和許可權的最常用命令,它們還有一個特別的共性,就是針對目錄進行操作時需要加上大寫引數-R來表示遞迴操作,即對目錄內所有的檔案進行整體操作。

使用“所有者:所有組”的格式輕鬆把剛剛那個檔案的所屬資訊修改一下,變更後的效果如下:

[root@linuxprobe ~]# chown linuxprobe:linuxprobe anaconda-ks.cfg 
[root@linuxprobe ~]# ls -l anaconda-ks.cfg 
-rwxrw----. 1 linuxprobe linuxprobe 1407 Jul 21 05:09 anaconda-ks.cfg

3)SBIT

現在,大學裡的很多老師都要求學生將作業上傳到伺服器的特定共享目錄中,但總是有幾個“破壞分子”喜歡刪除其他同學的作業,這時就要設定SBIT(Sticky Bit)特殊許可權位了(也可以稱之為特殊許可權位之粘滯位)。SBIT特殊許可權位可確保使用者只能刪除自己的檔案,而不能刪除其他使用者的檔案。換句話說,當對某個目錄設定了SBIT粘滯位許可權後,那麼該目錄中的檔案就只能被其所有者執行刪除操作了。

最初不知道是哪位非資深技術人員將Sticky Bit直譯成了“粘滯位”,劉遄老師建議將其稱為“保護位”,這既好記,又能立刻讓人瞭解它的作用。RHEL 8系統中的/tmp作為一個共享檔案的目錄,預設已經設定了SBIT特殊許可權位,因此除非是該目錄的所有者,否則無法刪除這裡面的檔案。

與前面所講的SUID和SGID許可權顯示方法不同,當目錄被設定SBIT特殊許可權位後,檔案的其他人許可權部分的x執行許可權就會被替換成t或者T,原本有x執行許可權則會寫成t,原本沒有x執行許可權則會被寫成T。

/tmp目錄上的SBIT許可權預設已經存在,體現為“其他使用者”許可權欄位的許可權變為rwt:

[root@linuxprobe ~]# ls -ald /tmp
drwxrwxrwt. 17 root root 4096 Oct 28 00:29 /tmp

其實,檔案能否被刪除並不取決於自身的許可權,而是看其所在目錄是否有寫入許可權。為了避免現在很多讀者不放心,所以下面的命令還是賦予了這個test檔案最大的777許可權(rwxrwxrwx):

[root@linuxprobe ~]# cd /tmp
[root@linuxprobe tmp]# echo "Welcome to linuxprobe.com" > test
[root@linuxprobe tmp]# chmod 777 test
[root@linuxprobe tmp]# ls -al test 
-rwxrwxrwx. 1 root root 26 Oct 29 14:29 test

隨後,切換到一個普通使用者身份下,嘗試刪除這個其他人建立的檔案就會發現,即便讀、寫、執行許可權全開,但是由於SBIT特殊許可權位的緣故,依然無法刪除該檔案:

[root@linuxprobe tmp]# su - linuxprobe
[linuxprobe@linuxprobe ~]$ cd /tmp
[linuxprobe@linuxprobe tmp]$ rm -f test
rm: cannot remove 'test': Operation not permitted

工作中對特殊許可權善加使用,能夠實現很多巧妙的功能,chmod命令設定特殊許可權時的引數如下:

引數 作用
u+s 設定SUID許可權
u-s 取消SUID許可權
g+s 設定SGID許可權
g-s 取消SGID許可權
o+t 設定SBIT許可權
o-t 取消SBIT許可權

切換回root管理員的身份下,在家目錄中建立一個名為linux的新目錄,隨後設定上SBIT許可權吧:

[linuxprobe@linuxprobe tmp]$ exit
Logout
[root@linuxprobe tmp]# cd ~
[root@linuxprobe ~]# mkdir linux
[root@linuxprobe ~]# chmod -R o+t linux/
[root@linuxprobe ~]# ls -ld linux/
drwxr-xr-t. 2 root root 6 Feb 11 19:34 linux/

上面的o+t引數是在一般許可權已經設定完畢的前提下,又新增了一項特殊許可權,那如果我們想一般許可權和特殊許可權一起設定,有什麼高效率的方法呢?

其實SUID、SGID與SBIT也有對應的數字法表示,分別是4、2、1。也就是說777還不是最大許可權,滿許可權應該是7777,第一個數字代表的是特殊許可權位。既然知道了數字表示法是由“特殊許可權+一般許可權”構成的,那就以上面linux目錄的許可權為例梳理下計算方法吧。

在“rwxr-xr-t”許可權中,最後一位是t,代表該檔案的一般許可權為“rwxr-xr-x”,並帶有SBIT特殊許可權。對於讀(r)、寫(w)、執行(x)許可權的數字計算方法大家應該很熟悉了——即755,而SBIT特殊許可權位是1,合併後結果為1755。

再增加點難度,如果許可權是“rwsrwSr--”呢?首先不要慌,看到大寫S代表原先沒有執行許可權,因此一般許可權為“rwxrw-r--”,數字法計算後結果是764。帶有的SUID和SGID特殊許可權數字法表示是4和2,心算得出結果是6,合併後結果為6764。

許可權的字元表示法轉數字表示法:

將數字法轉換成字元法難度略微高一些,以5537為例為大家講解。首先特殊許可權的5是由4+1組成的,意味著是有SUID和SBIT。SUID和SGID的寫法是原先有執行許可權則是小寫s,如果沒有執行許可權則是大寫S,而SBIT的寫法則是原先有執行許可權是小寫t,沒有執行許可權是大寫T。一般許可權的537進行字元轉換後應為“r-x-wxrwx”,然後在此基礎上增加SUID和SGID特殊許可權,合併後結果是“r-s-wxrwt”。

許可權的數字表示法轉字元標識法:

3、檔案的隱藏屬性

Linux系統中的檔案除了具備一般許可權和特殊許可權之外,還有一種隱藏許可權,即被隱藏起來的許可權,預設情況下不能直接被使用者發覺。有使用者曾經在生產環境和RHCE考試題目中碰到過明明許可權充足但卻無法刪除某個檔案的情況,或者僅能在日誌檔案中追加內容而不能修改或刪除內容,這在一定程度上阻止了駭客篡改系統日誌的圖謀,因此這種“奇怪”的檔案也保障了Linux系統的安全性。

既然叫隱藏許可權了,那肯定不能用常規的ls命令就讓我們看到它的真面目,專用的設定命令是chattr,專用的檢視命令是lsattr

1)chattr命令

chattr命令用於設定檔案的隱藏許可權,英文全稱為:“change attributes”,語法格式為:“chattr [引數] 檔名稱”。

如果想要把某個隱藏功能新增到檔案上,則需要在命令後面追加“+引數”,如果想要把某個隱藏功能移出檔案,則需要追加“-引數”。

chattr命令中的引數及其作用:

引數 作用
i 無法對檔案進行修改;若對目錄設定了該引數,則僅能修改其中的子檔案內容而不能新建或刪除檔案
a 僅允許補充(追加)內容,無法覆蓋/刪除內容(Append Only)
S 檔案內容在變更後立即同步到硬碟(sync)
s 徹底從硬碟中刪除,不可恢復(用0填充原檔案所在硬碟區域)
A 不再修改這個檔案或目錄的最後訪問時間(atime)
b 不再修改檔案或目錄的存取時間
D 檢查壓縮檔案中的錯誤
d 使用dump命令備份時忽略本檔案/目錄
c 預設將檔案或目錄進行壓縮
u 當刪除該檔案後依然保留其在硬碟中的資料,方便日後恢復
t 讓檔案系統支援尾部合併(tail-merging)
x 可以直接訪問壓縮檔案中的內容

為了讓讀者能夠更好地見識隱藏許可權的效果,我們先來建立一個普通檔案,然後立即嘗試刪除(這個操作肯定會成功):

[root@linuxprobe ~]# echo "for Test" > linuxprobe
[root@linuxprobe ~]# rm linuxprobe
rm: remove regular file ‘linuxprobe’? y

實踐是檢驗真理的唯一標準。如果您沒有親眼見證過隱藏許可權強大功能的美妙,就一定不會相信原來Linux系統會如此安全。接下來再次新建一個普通檔案,併為其設定不允許刪除與覆蓋(+a引數)許可權,然後再嘗試將這個檔案刪除:

[root@linuxprobe ~]# echo "for Test" > linuxprobe
[root@linuxprobe ~]# chattr +a linuxprobe
[root@linuxprobe ~]# rm linuxprobe
rm: remove regular file ‘linuxprobe’? y
rm: cannot remove ‘linuxprobe’: Operation not permitted

可見,上述操作失敗了。

2)lsattr命令

lsattr命令用於檢視檔案的隱藏許可權,英文全稱為:“list attributes”,語法格式為:“lsattr [引數] 檔名稱”。

在Linux系統中,檔案的隱藏許可權必須使用lsattr命令來檢視,平時使用的ls之類的命令則看不出端倪:

[root@linuxprobe ~]# ls -al linuxprobe
-rw-r--r--. 1 root root 9 Feb 12 11:42 linuxprobe

一旦使用lsattr命令後,檔案上被賦予的隱藏許可權馬上就會原形畢露:

[root@linuxprobe ~]# lsattr linuxprobe
-----a---------- linuxprobe

此時按照顯示的隱藏許可權的型別(字母),使用chattr命令將其去掉:

[root@linuxprobe ~]# chattr -a linuxprobe
[root@linuxprobe ~]# lsattr linuxprobe 
---------------- linuxprobe
[root@linuxprobe ~]# rm linuxprobe 
rm: remove regular file ‘linuxprobe’? y

一般我們會將-a引數設定到日誌檔案(/var/log/messages)上面,這樣在不影響系統正常寫入日誌的前提下,還可以防止駭客清理自己的作案證據。如果希望徹底的保護起某個檔案,不允許任何人修改和刪除它的話,不妨加上-i引數試試,效果特別好。

4、檔案訪問控制列表

不知道大家是否發現,前文講解的一般許可權、特殊許可權、隱藏許可權其實有一個共性,那就是許可權是針對某一類使用者設定的,能夠對很多人同時生效。如果希望對某個指定的使用者進行單獨的許可權控制,就需要用到檔案的訪問控制列表(FACL,File Access Control Lists)了。通俗來講,基於普通檔案或目錄設定ACL訪問控制其實就是針對指定的使用者或使用者組設定檔案或目錄的操作許可權,更加精準的派發許可權。另外,如果針對某個目錄設定了ACL,則目錄中的檔案會繼承其許可權;若針對檔案設定了ACL,則檔案不再繼承其所在目錄的許可權。

為了更直觀地看到ACL對檔案許可權控制的強大效果,我們先切換到普通使用者,然後嘗試進入root管理員的家目錄中。在沒有針對普通使用者對root管理員的家目錄設定ACL之前,其執行結果如下所示:

[root@localhost ~]# su - dev1
上一次登入:三 7月 24 22:53:31 CST 2024pts/0 上
[dev1@localhost ~]$ cd /root
-bash: cd: /root: 許可權不夠
[dev1@localhost ~]$ exit

1)setfacl命令

setfacl命令用於管理檔案的ACL許可權規則,英文全稱為:“set files ACL”,語法格式為:“ setfacl [引數] 檔名稱”。

ACL許可權提供的是在所有者、所屬組、其他人的讀/寫/執行許可權之外的特殊許可權控制,使用setfacl命令可以針對單一使用者或使用者組、單一檔案或目錄來進行讀/寫/執行許可權的控制。其中,針對目錄檔案需要使用-R遞迴引數;針對普通檔案則使用-m引數;如果想要刪除某個檔案的ACL,則可以使用-b引數。

setfacl命令中的引數以及作用:

引數 作用
-m 修改許可權
-M 從檔案中讀取許可權
-x 刪除某個許可權
-b 刪除全部許可權
-R 遞迴子目錄

例如我們原本是無法進入到/root目錄中的,現在給這位普通使用者單獨設定下許可權:

[root@localhost ~]# setfacl -Rm u:dev1:rwx /root

隨後再切換到這位普通使用者的身份下,就能正常進入:

[root@localhost ~]# su - dev1
上一次登入:四 7月 25 21:37:50 CST 2024pts/0 上
[dev1@localhost ~]$ cd /root
[dev1@localhost root]$ ls
anaconda-ks.cfg  initial-setup-ks.cfg  myfolder  ProgramFiles  公共  模板  影片  圖片  文件  下載  音樂  桌面
[dev1@localhost root]$ exit

是不是覺得效果很酷呢?但是現在有這樣一個小問題—怎麼去檢視檔案上有哪些ACL呢?常用的ls命令是看不到ACL表資訊的,但是卻可以看到檔案的許可權最後一個點(.)變成了加號(+),這就意味著該檔案已經設定了ACL。現在大家是不是感覺學得越多,越不敢說自己精通Linux系統了吧?就這麼一個不起眼的點(.),竟然還表示這麼一種重要的許可權。

[root@localhost ~]# ls -ld /root
dr-xrwx---+ 17 root root 4096 7月  25 21:30 /root

2)getfacl命令

getfacl命令用於檢視檔案的ACL許可權規則,英文全稱為:“get files ACL”,語法格式為:“ getfacl [引數] 檔名稱”。

getfacl命令用於顯示檔案上設定的ACL資訊,格式為“getfacl 檔名稱”。Linux系統中的命令就是這麼又可愛又好記。想要設定ACL,用的是setfacl命令;要想檢視ACL,則用的是getfacl命令。下面使用getfacl命令顯示在root管理員家目錄上設定的所有ACL資訊。

[root@localhost ~]# getfacl /root
getfacl: Removing leading '/' from absolute path names
# file: root
# owner: root
# group: root
user::r-x
user:dev1:rwx
group::r-x
mask::rwx
other::---

ACL許可權還可以針對某個使用者組來設定,例如允許某個組的使用者都可以讀寫/etc/fstab這個檔案:

[root@localhost ~]# setfacl -m g:devgroup1:rw /etc/fstab
[root@localhost ~]# getfacl /etc/fstab
getfacl: Removing leading '/' from absolute path names
# file: etc/fstab
# owner: root
# group: root
user::rw-
group::r--
group:devgroup1:rw-
mask::rw-
other::r--

設定錯了想刪除?沒問題!清空所有ACL許可權用-b引數,指定刪除某一條許可權就用-x引數:

[root@localhost ~]# setfacl -x g:devgroup1 /etc/fstab
[root@localhost ~]# getfacl /etc/fstab
getfacl: Removing leading '/' from absolute path names
# file: etc/fstab
# owner: root
# group: root
user::rw-
group::r--
mask::r--
other::r--

對於ACL許可權的設定都是立即且永久生效的,不需要再編輯什麼配置檔案,這點特別方便~但是也有個安全隱患,如果我們不小心設定錯了許可權怎麼辦?就會覆蓋掉檔案原始的許可權資訊,並且永遠都找不回來了。

溫馨提示:操作前備份一下,總是好的習慣。

例如:將 /home 目錄上的ACL許可權備份一份,要用-R遞迴引數,這樣不僅能夠把目錄本身的許可權備份了,裡面的檔案許可權也都能自動備份。需要注意 getfacl 在備份目錄許可權時不能使用絕對路徑的形式,因此我們需要先切換到最上層根目錄,然後再進行操作:

[root@localhost ~]# cd /
[root@localhost /]# getfacl -R home > backup.acl
[root@localhost /]# ls -l
總用量 60
-rw-r--r--.   1 root root 21822 7月  25 21:56 backup.acl

ACL許可權的恢復也很簡單,使用的是“--restore”引數,由於備份時已經指定了是對home目錄進行的操作,所以不需要寫對應的目錄名稱,它能夠自動找到要恢復的物件:

[root@localhost /]# setfacl --restore backup.acl

5、su命令與sudo命令

由於為了避免因許可權因素導致配置服務失敗,從而建議使用root管理員來學習,但是在生產環境中還是要對安全多一份敬畏之心,不要用root管理員去做所有事情。因為一旦執行了錯誤的命令,可能會直接導致系統崩潰,這樣一來,不但客戶指責、領導批評,沒準獎金也會雞飛蛋打。但轉頭一想,儘管Linux系統為了安全性考慮,使得許多系統命令和服務只能被root管理員來使用,但是這也讓普通使用者受到了更多的許可權束縛,從而導致無法順利完成特定的工作任務。

su命令可以解決切換使用者身份的需求,使得當前使用者在不退出登入的情況下,順暢地切換到其他使用者,比如從root管理員切換至普通使用者:

[root@localhost ~]# su - dev1
上一次登入:四 7月 25 21:40:57 CST 2024pts/0 上
[dev1@localhost ~]$ id
uid=1001(dev1) gid=1001(devgroup1) 組=1001(devgroup1),1003(devgroup3) 環境=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023

細心的讀者一定會發現,上面的su命令與使用者名稱之間有一個減號(-),這意味著完全切換到新的使用者,即把環境變數資訊也變更為新使用者的相應資訊,而不是保留原始的資訊。強烈建議在切換使用者身份時新增這個減號(-)

另外,當從root管理員切換到普通使用者時是不需要密碼驗證的,而從普通使用者切換成root管理員就需要進行密碼驗證了;這也是一個必要的安全檢查:

[dev1@localhost ~]$ su - root
密碼:此處輸入管理員密碼
上一次登入:四 7月 25 21:30:37 CST 2024從 192.168.110.1pts/0

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

接下來將介紹如何使用sudo命令把特定命令的執行許可權賦予給指定使用者,這樣既可保證普通使用者能夠完成特定的工作,也可以避免洩露root管理員密碼。我們要做的就是合理配置sudo服務,以便兼顧系統的安全性和使用者的便捷性。

溫馨提示:

授權原則:在保證普通使用者完成相應工作的前提下,儘可能少的賦予額外的許可權。

sudo命令用於給普通使用者提供額外的許可權,語法格式為:“ sudo [引數] 使用者名稱”。

使用sudo命令可以給普通使用者提供額外的許可權來完成原本只有root管理員才能完成的任務。可以限制使用者執行指定的命令、記錄使用者執行過的每一條命令、集中的管理使用者與許可權(/etc/sudoers)以及驗證密碼後一段時間內免驗證的方便措施。

sudo命令中的常用引數以及作用:

引數 作用
-h 列出幫助資訊
-l 列出當前使用者可執行的命令
-u 使用者名稱或UID值 以指定的使用者身份執行命令
-k 清空密碼的有效時間,下次執行sudo時需要再次進行密碼驗證
-b 在後臺執行指定的命令
-p 更改詢問密碼的提示語

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

visudo命令用於編輯配置使用者sudo許可權檔案,語法格式為:“ visudo [引數]”。

這是一條會自動呼叫vi編輯器來配置/etc/sudoers許可權檔案的命令,能夠解決多個使用者同時修改許可權而導致的衝突問題,不僅如此,visudo命令還可以對配置檔案內的引數進行語法檢查,在發現引數錯誤時進行報錯提醒,比使用者直接修改檔案更友好、安全、方便。

>>> /etc/sudoers: syntax error near line 1 <<<
What now? 
Options are:
(e)dit sudoers file again
e(x)it without saving changes to sudoers file
(Q)uit and save changes to sudoers file (DANGER!)

使用visudo命令配置許可權檔案時,其操作方法與Vim編輯器中用到的方法完全一致,因此在編寫完成後記得在末行模式下儲存並退出。配置許可權檔案時,按照下面的格式將第101行(大約)填寫上指定的資訊:

誰可以使用 允許使用的主機=(以誰的身份) 可執行命令的列表

  • 誰可以使用:稍後要為那位使用者進行命令授權。
  • 允許使用的主機:可以填寫ALL代表不限制來源主機,亦可填寫如192.168.10.0/24的網段限制來源地址,只有從允許網段登入時才能使用sudo命令。
  • 以誰的身份:可以填寫ALL代表系統最高許可權,也可以是另外一位使用者的名字。
  • 可執行命令的列表:可以填寫ALL代表不限制命令的列表,亦可填寫如/usr/bin/cat的檔名稱來限制命令列表,多個命令檔案之間用逗號(,)間隔。

在Linux系統中配置服務檔案時,雖然沒有硬性規定,但從經驗來講新增的引數位置不建議太靠上,避免服務一些必要的功能沒載入完成時,我們填寫的新引數不被執行成功。一般會在配置檔案中找一下相似的引數,然後在相鄰位置進行新的修改,或者選擇檔案的中下部位置。

[root@localhost ~]# visudo
省略...
     99 ## Allow root to run any commands anywhere
    100 root    ALL=(ALL)       ALL
    101 dev2 ALL=(ALL) ALL
    102
    103 ## Allows members of the 'sys' group to run networking, software,
省略...

在填寫完畢後記得要先儲存再退出,然後切換至指定的普通使用者身份,此時就可以用sudo -l命令檢視到所有可執行的命令了(下面的命令中,驗證的是該普通使用者的密碼,而不是root管理員的密碼,請讀者不要搞混了):

[root@localhost ~]# su - dev2
上一次登入:一 7月 22 21:54:09 CST 2024pts/0 上
[dev2@localhost ~]$ sudo -l

我們信任您已經從系統管理員那裡瞭解了日常注意事項。
總結起來無外乎這三點:

    #1) 尊重別人的隱私。
    #2) 輸入前要先考慮(後果和風險)。
    #3) 權力越大,責任越大。

[sudo] dev2 的密碼:此處輸入dev2使用者的密碼
匹配 %2$s 上 %1$s 的預設條目:
    !visiblepw, always_set_home, match_group_by_gid, always_query_group_plugin, env_reset, 
env_keep="COLORS DISPLAY HOSTNAME HISTSIZE KDEDIR LS_COLORS", env_keep+="MAIL PS1 PS2 QTDIR USERNAME LANG LC_ADDRESS LC_CTYPE", env_keep+="LC_COLLATE LC_IDENTIFICATION LC_MEASUREMENT LC_MESSAGES", env_keep+="LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE", env_keep+="LC_TIME LC_ALL LANGUAGE LINGUAS _XKB_CHARSET XAUTHORITY", secure_path=/sbin\:/bin\:/usr/sbin\:/usr/bin 使用者 dev2 可以在 localhost 上執行以下命令: (ALL) ALL

接下來是見證奇蹟的時刻!作為一名普通使用者,是肯定不能看到root管理員的家目錄(/root)中的檔案資訊的,但是,只需要在想執行的命令前面加上sudo命令就行了:

[root@localhost ~]# su - dev2
上一次登入:四 7月 25 23:35:47 CST 2024pts/0 上
[dev2@localhost ~]$ ls /root
ls: 無法開啟目錄/root: 許可權不夠
[dev2@localhost ~]$ sudo ls /root
[sudo] dev2 的密碼:
anaconda-ks.cfg  initial-setup-ks.cfg  myfolder  ProgramFiles  公共  模板  影片  圖片  文件  下載  音樂  桌面
[dev2@localhost ~]$ sudo ls /root
anaconda-ks.cfg  initial-setup-ks.cfg  myfolder  ProgramFiles  公共  模板  影片  圖片  文件  下載  音樂  桌面

效果立竿見影!但是考慮到生產環境中不允許某個普通使用者擁有整個系統中所有命令的最高執行權(這也不符合前文提到的許可權賦予原則,即儘可能少地賦予許可權),因此ALL引數就有些不合適了。因此只能賦予普通使用者具體的命令以滿足工作需求,這也受到了必要的許可權約束。如果需要讓某個使用者只能使用root管理員的身份執行指定的命令,切記一定要給出該命令的絕對路徑,否則系統會識別不出來,這時可以先使用whereis命令找出命令所對應的儲存路徑

[dev2@localhost ~]$ exit
登出
[root@localhost ~]# whereis cat
cat: /usr/bin/cat /usr/share/man/man1/cat.1.gz /usr/share/man/man1p/cat.1p.gz
[root@localhost ~]# whereis reboot
reboot: /usr/sbin/reboot /usr/share/man/man2/reboot.2.gz /usr/share/man/man8/reboot.8.gz

然後使用visudo命令繼續編輯許可權檔案,將原先101行所新增的引數作如下修改,多個命令之間用英文逗號(,)分隔。

[root@localhost ~]# visudo
省略...
     99 ## Allow root to run any commands anywhere
    100 root    ALL=(ALL)       ALL
    101 dev2 ALL=(ALL) /usr/bin/cat,/usr/sbin/reboot
    102
    103 ## Allows members of the 'sys' group to run networking, software,
省略...

在編輯好後依然是先儲存再退出。再次切換到指定的普通使用者,然後嘗試正常檢視某個系統檔案的內容,此時系統提示沒有許可權(Permission denied)。再使用sudo命令就能順利地檢視檔案內容了:

[root@localhost ~]# su - dev2
上一次登入:五 7月 26 23:21:09 CST 2024pts/0 上
[dev2@localhost ~]$ cat /etc/shadow
cat: /etc/shadow: 許可權不夠
[dev2@localhost ~]$ sudo cat /etc/shadow
[sudo] dev2 的密碼:此處輸入dev2使用者的密碼
root:$6$FZjns6bztDTKQTKq$qJuaQ5KdExQzIznFeCSJHDXkeSN9vS3u8G/kw6HhLuZb91kftob6IhgSo.iqqlEgdBd8Oov3M2OKclNXvBuSQ0::0:99999:7:::
bin:*:18353:0:99999:7:::
daemon:*:18353:0:99999:7:::
adm:*:18353:0:99999:7:::
lp:*:18353:0:99999:7:::
sync:*:18353:0:99999:7:::
shutdown:*:18353:0:99999:7:::
halt:*:18353:0:99999:7:::
省略...
[dev2@localhost ~]$ exit
登出

不知大家是否發覺在每次執行sudo命令後都會要求驗證一下密碼。雖然這個密碼就是當前登入使用者的密碼,但是每次執行sudo命令都要輸入一次密碼其實也挺麻煩的,這時可以新增NOPASSWD引數,使得使用者下次再執行sudo命令時就不用密碼驗證啦~

[root@localhost ~]# visudo
省略...
     99 ## Allow root to run any commands anywhere
    100 root    ALL=(ALL)       ALL
    101 dev2 ALL=(ALL) NOPASSWD:/usr/bin/cat,/usr/sbin/reboot
    102
    103 ## Allows members of the 'sys' group to run networking, software,
省略...

這樣,當切換到普通使用者後再執行命令時,就不用再頻繁地驗證密碼了,我們在日常工作中也就痛快至極了。

[root@localhost ~]# su - dev2
上一次登入:五 7月 26 23:48:06 CST 2024pts/0 上
[dev2@localhost ~]$ reboot
User root is logged in on sshd.
User root is logged in on sshd.
Please retry operation after closing inhibitors and logging out other users.
Alternatively, ignore inhibitors and users with 'systemctl reboot -i'.
[dev2@localhost ~]$ sudo reboot

請細心留意上面的使用者身份變換,visudo命令只有root管理員才可以執行,普通使用者使用會提示許可權不足。

五、組和許可權設定的命令

該點其實上文已經提到過了,就是 chown 和 chmod 這2個命令。

1、chmod命令

chmod命令用於設定檔案的一般許可權及特殊許可權,英文全稱為:“change mode”,語法格式為:“chmod [引數] 檔名”。

這是一個與日常設定檔案許可權強相關的命令,例如要把一個檔案的許可權設定成其所有者可讀可寫可執行、所屬組可讀可寫、其他人沒有任何許可權,則相應的字元法表示為rwxrw----,其對應的數字法表示為760。

[root@linuxprobe ~]# ls -l anaconda-ks.cfg 
-rw-------. 1 root root 1407 Jul 21 05:09 anaconda-ks.cfg
[root@linuxprobe ~]# chmod 760 anaconda-ks.cfg 
[root@linuxprobe ~]# ls -l anaconda-ks.cfg 
-rwxrw----. 1 root root 1407 Jul 21 05:09 anaconda-ks.cfg

2、chown命令

chown命令用於設定檔案的所有者和所有組,英文全稱為:“change own”,語法格式為:“chown 所有者:所有組 檔名”。

chmod和chown命令是用於修改檔案屬性和許可權的最常用命令,它們還有一個特別的共性,就是針對目錄進行操作時需要加上大寫引數-R來表示遞迴操作,即對目錄內所有的檔案進行整體操作。

使用“所有者:所有組”的格式輕鬆把剛剛那個檔案的所屬資訊修改一下,變更後的效果如下:

[root@linuxprobe ~]# chown linuxprobe:linuxprobe anaconda-ks.cfg 
[root@linuxprobe ~]# ls -l anaconda-ks.cfg 
-rwxrw----. 1 linuxprobe linuxprobe 1407 Jul 21 05:09 anaconda-ks.cfg

此文由博主精心撰寫轉載請保留此原文連結:https://www.cnblogs.com/xyh9039/p/18300859

版權宣告:如有雷同純屬巧合,如有侵權請及時聯絡本人修改,謝謝!!!

相關文章