色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

詳解Linux中的權限控制

馬哥Linux運維 ? 來源:博客園謝友海 ? 2024-08-05 15:32 ? 次閱讀

本章將和大家分享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文件格式

377aeb2a-4ceb-11ef-b8af-92fbcf53809c.png

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

登錄用戶名

密碼

UID

GID

全名或注釋

用戶主目錄

用戶默認使用shell

2)group文件格式

3782fb1c-4ceb-11ef-b8af-92fbcf53809c.png

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

群組名稱

群組密碼(通常不需要設定,密碼被記錄在/etc/gshadow)

GID:群組ID

組成員(以“,”來分割,該賬戶沒有附加組所以為空)

3)shadow文件格式

3789aa20-4ceb-11ef-b8af-92fbcf53809c.png

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

登錄用戶名

密碼(通常使用shad512加密)

從1970年1月1日起計算到現在為止密碼最近一次被更改的時間

密碼再過幾天就可以被修改(0表示隨時可改)

密碼幾天后必須變更(99999表示永不過期)

密碼過期前多久提示用戶

密碼過期多久后賬戶將被鎖定

多少天后賬戶將失效(從1970-1-1算起)

4)gshadow文件格式

37932f64-4ceb-11ef-b8af-92fbcf53809c.png

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

群組名稱

群組密碼

組管理員列表

當前用戶的附加組

二、用戶賬號管理

在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用戶其實也沒有真正搞明白。

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

讀寫執行權限對于文件與目錄可執行命令的區別:

3799e3a4-4ceb-11ef-b8af-92fbcf53809c.png

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

文件權限的字符與數字表示:

37a783ce-4ceb-11ef-b8af-92fbcf53809c.png

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

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

37c60cae-4ceb-11ef-b8af-92fbcf53809c.png

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

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

數字與字符權限轉換示意圖:

37f43232-4ceb-11ef-b8af-92fbcf53809c.png

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

通過ls命令查看到的文件屬性信息:

380f360e-4ceb-11ef-b8af-92fbcf53809c.png

包含了文件的類型(第一個字符表示文件的類型,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。

權限的字符表示法轉數字表示法:

384011fc-4ceb-11ef-b8af-92fbcf53809c.png

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

權限的數字表示法轉字符標識法:

388737e4-4ceb-11ef-b8af-92fbcf53809c.png

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 urwx /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?,F在大家是不是感覺學得越多,越不敢說自己精通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
userrwx
group::r-x
mask::rwx
other::---

ACL權限還可以針對某個用戶組來設置,例如允許某個組的用戶都可以讀寫/etc/fstab這個文件:

[root@localhost ~]# setfacl -m grw /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--
grouprw-
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_uunconfined_tc0.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

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • Linux
    +關注

    關注

    87

    文章

    11292

    瀏覽量

    209331
  • 服務器
    +關注

    關注

    12

    文章

    9123

    瀏覽量

    85328
  • 操作系統
    +關注

    關注

    37

    文章

    6801

    瀏覽量

    123285
  • 權限控制
    +關注

    關注

    0

    文章

    5

    瀏覽量

    6385

原文標題:掌握Linux權限控制,輕松提高系統安全性!

文章出處:【微信號:magedu-Linux,微信公眾號:馬哥Linux運維】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    Linux 中文件權限管理的探討

    Linux 是一種多用戶的操作系統,其文件權限管理在文件管理占有重要的地位。為了更好地把握Linux 的文件權限的相關內容,本文以多種
    發表于 06-11 09:37 ?11次下載

    Linux改變文件或目錄的訪問權限命令

    Linux改變文件或目錄的訪問權限命令 Linux改變文件或目錄的訪問權限命令  Linux系統
    發表于 01-18 12:46 ?1201次閱讀

    Linux設備驅動開發詳解》第9章、Linux設備驅動的異步通知與異步IO

    Linux設備驅動開發詳解》第9章、Linux設備驅動的異步通知與異步IO
    發表于 10-27 11:33 ?0次下載
    《<b class='flag-5'>Linux</b>設備驅動開發<b class='flag-5'>詳解</b>》第9章、<b class='flag-5'>Linux</b>設備驅動<b class='flag-5'>中</b>的異步通知與異步IO

    Linux設備驅動開發詳解》第8章、Linux設備驅動的阻塞與非阻塞IO

    Linux設備驅動開發詳解》第8章、Linux設備驅動的阻塞與非阻塞IO
    發表于 10-27 11:35 ?9次下載
    《<b class='flag-5'>Linux</b>設備驅動開發<b class='flag-5'>詳解</b>》第8章、<b class='flag-5'>Linux</b>設備驅動<b class='flag-5'>中</b>的阻塞與非阻塞IO

    Linux設備驅動開發詳解》第7章、Linux設備驅動的并發控制

    Linux設備驅動開發詳解》第7章、Linux設備驅動的并發控制
    發表于 10-27 11:37 ?10次下載
    《<b class='flag-5'>Linux</b>設備驅動開發<b class='flag-5'>詳解</b>》第7章、<b class='flag-5'>Linux</b>設備驅動<b class='flag-5'>中</b>的并發<b class='flag-5'>控制</b>

    淺談Linux權限管理的ACL權限

    Linux權限管理是Linux很重要的一項內容,重則引起用戶信息泄露,輕則導致文件錯亂和丟失。企業服務器里有些目錄下面的東西暫時保密,不希望別人可以進入目錄并查看。有些文件希望別人可以看,但不能刪除。有些目錄只有root等管理員
    的頭像 發表于 08-18 11:13 ?8955次閱讀

    Linux權限控制的基本原理

    活動時間:舉例以下是對用戶和組信息的舉例。 /etc/shadow 的口令信息為加密存儲,不舉例。文件權限控制信息文件類型Linux
    發表于 04-02 14:40 ?335次閱讀

    Linux進程權限的分析說明

     在linux下,關于文件權限,大部分人接觸比較多,也比較熟悉了解。但是對進程權限一般知之甚少。本文總結一下linux系統下進程權限問題和現
    發表于 07-17 10:55 ?871次閱讀

    Linux系統EXP命令詳解質量匯總

    Linux系統EXP命令詳解質量匯總
    發表于 05-14 09:35 ?1次下載

    權限系統的數據權限設計經驗分享

    RBAC模型 數據權限 數據規則 關聯資源、用戶 繼續優化 小結 在項目實際開發我們不光要控制一個用戶能訪問哪些資源,還需要控制用戶只能訪問資源
    的頭像 發表于 10-11 17:50 ?1638次閱讀

    linux文件訪問權限怎么設置

    權限的類型、權限的表示方法以及如何使用命令來設置文件訪問權限。 一、Linux 文件訪問權限的背景知識 在
    的頭像 發表于 11-23 10:20 ?1500次閱讀

    Linux把目錄權限給指定用戶

    Linux是一個開放源代碼的操作系統,它基于Unix的設計原則,提供了豐富的權限管理功能,允許用戶對系統的文件和目錄進行精確的控制。在Linux
    的頭像 發表于 11-23 10:30 ?8234次閱讀

    Linux文件權限及Makefile

    操作系統),文件權限用于控制誰可以對文件進行哪些操作。文件權限權限位組合中表示為一組三位權限
    的頭像 發表于 11-24 16:06 ?593次閱讀
    <b class='flag-5'>Linux</b>文件<b class='flag-5'>權限</b>及Makefile

    Linux用戶身份與進程權限詳解

    在學習 Linux 系統權限相關的主題時,我們首先關注的基本都是文件的 ugo 權限。ugo 權限信息是文件的屬性,它指明了用戶與文件之間的關系。但是真正操作文件的卻是進程,也就是說用
    的頭像 發表于 10-23 11:41 ?334次閱讀
    <b class='flag-5'>Linux</b>用戶身份與進程<b class='flag-5'>權限</b><b class='flag-5'>詳解</b>

    Linux文件權限詳解

    權限的意義在于允許某一個用戶或某個用戶組以規定的方式去訪問某個文件。
    的頭像 發表于 11-01 09:45 ?129次閱讀
    主站蜘蛛池模板: 99久久精品毛片免费播放| 91系列在线观看免费| 456亚洲人成在线播放网站| YELLOW视频在线观看最新| 国产免费播放一区二区三区 | 久久午夜一区二区| 日本xxx片免费高清在线| 亚洲国产精品线在线观看| 99久久亚洲精品影院| 国产精品一区二区AV白丝在线| 久久亚洲欧美国产综合| 熟女人妻-蜜臀AV-首页| 自拍区偷拍亚洲视频| 国产精品人妻久久无码不卡| 麻生希第一部快播| 亚洲精品国产拍在线观看| av先锋影音资源男人站| 精品午夜久久福利大片免费| 日本漫画大全无翼乌| 中文字幕在线观看亚洲视频| 国产精品久久婷婷五月色 | 久久久免费观看| 叔叔 电影完整版免费观看韩国| 在线播放免费人成毛片视频| 国产精品九九九久久九九| 牛牛在线精品视频(正)| 一个人看www| 国产精品大全国产精品| 嫩草国产福利视频一区二区| 亚洲色图在线观看视频| 国产3级在线| 欧美熟妇VIVOE精品| 亚洲中文字幕乱倫在线| 国产精品久久久久影院嫩草| 欧美一区二区三区播放| 中文文字幕文字幕亚洲色| 国产亚洲精品AAAAAAA片| 色噜噜色啪在线视频| 99视频精品全部免费免费观| 久久操韩国自偷拍| 亚洲薄码区|