欧美性猛交xxxx免费看_牛牛在线视频国产免费_天堂草原电视剧在线观看免费_国产粉嫩高清在线观看_国产欧美日本亚洲精品一5区

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

詳解Linux中的權(quán)限控制

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

本章將和大家分享Linux中的權(quán)限控制。廢話不多說,下面我們直接進入主題。

一、基礎(chǔ)知識

Linux作為一種多用戶的操作系統(tǒng)(服務(wù)器系統(tǒng)),允許多個用戶同時登陸到系統(tǒng)上,并響應(yīng)每個用戶的請求。

任何需要使用操作系統(tǒng)的用戶,都需要一個系統(tǒng)賬號,賬號分為:管理員賬號與普通用戶賬號。

在Linux中,操作系統(tǒng)根據(jù)UID來判斷用戶,而不是用戶名,只要id為0就是管理員,哪怕有多個id為0的賬號。

系統(tǒng)在新建賬號時,會根據(jù)賬號類型,自動分配遞增賬號的UID與GID (用戶身份編號,組編號),也可自行分配。通常情況下,應(yīng)當(dāng)保證UID與GID唯一且不重復(fù)。

1、組的類別

在Linux中,每個用戶必須有一個主組。當(dāng)創(chuàng)建賬號時,系統(tǒng)會自動創(chuàng)建一個同名組作為該賬戶的主組。用戶必須屬于一個且只有一個主組。用戶可以屬于零個或者多個附加組。

2、用戶與組的配置文件

在Linux中,萬物皆文件,所以用戶與組也以配置文件的形式保存在系統(tǒng)中,以下為用戶和組的主要配置文件詳解:

-   /etc/passwd:用戶及其屬性信息(名稱、 UID、主組ID等)
-   /etc/group:組及其屬性信息
-   /etc/shadow:用戶密碼及其相關(guān)屬性
-   /etc/gshadow:組密碼及其相關(guān)屬性

1)passwd文件格式

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

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

登錄用戶名

密碼

UID

GID

全名或注釋

用戶主目錄

用戶默認(rèn)使用shell

2)group文件格式

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

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

群組名稱

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

GID:群組ID

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

3)shadow文件格式

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

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

登錄用戶名

密碼(通常使用shad512加密)

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

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

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

密碼過期前多久提示用戶

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

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

4)gshadow文件格式

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

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

群組名稱

群組密碼

組管理員列表

當(dāng)前用戶的附加組

二、用戶賬號管理

在Linux,管理員在默認(rèn)情況下為root賬戶,UID=0。普通用戶UID默認(rèn)范圍為1-65535。在centos 6中,新建用戶,默認(rèn)系統(tǒng)用戶的UID范圍為1-499,普通用戶為500+。

在centos 7中,系統(tǒng)用戶范圍為1-999,普通用戶為1000+。對系統(tǒng)的操作權(quán)限由用戶決定。

通常對用戶賬號的操作分為添加,修改,刪除。

1、添加賬戶

通過 useradd 命令來添加用戶,語法如下:

useradd [opentions] login

參數(shù)說明:

-u UID 自定義UID(默認(rèn)系統(tǒng)遞增)

-o 配合-u 選項,不檢查UID的唯一性(不建議)

-g GID:指明用戶所屬基本組,可為組名,也可以GID

-c comment 指定一段注釋性描述。

-d 目錄 指定用戶主目錄,如果此目錄不存在,則同時使用-m選項,可以創(chuàng)建主目錄。

-g 用戶組 指定用戶所屬的用戶組(主組)。

-G 用戶組,用戶組 指定用戶所屬的附加組。

-s Shell文件 指定用戶的登錄Shell。

-u 用戶號 指定用戶的用戶號,如果同時有-o選項,則可以重復(fù)使用其他用戶的標(biāo)識號。

示例1(常用):

useradd -d /usr/ddz ddz

創(chuàng)建了一個用戶ddz,并將他的家目錄(主目錄)設(shè)置到/usr/ddz

示例2:

groupadd 組名 添加用戶組
   -g :添加組時指定組ID
groupmod 組名 修改用戶組信息
   -n :修改組名
   -g :修改組ID
groupdel 組名 刪除組
*如果一個組下有用戶,那么這個組是無法刪除的。
useradd -s /sbin/bash -g root -G mage,wang ddz

此命令新建了一個用戶ddz,設(shè)置該用戶使用的shell為/sbin/bash,設(shè)置他的主組屬于root用戶組,設(shè)置附加組為mage和wang。(當(dāng)設(shè)置組時,要保證組已經(jīng)存在,否則請先創(chuàng)建該組

小技巧:

增加用戶賬號就是在/etc/passwd文件中為新用戶增加一條記錄,同時系統(tǒng)會自動更新其他系統(tǒng)文件如/etc/shadow,/etc/group等。

通常情況創(chuàng)建賬戶,賬戶ID會按照最大的值遞增,但是遞增的值必須在最大范圍內(nèi)。

在部署軟件時,通常會需要使用賬戶,所以需要指定UID,來部署所有的賬號都用同一個UID,來方便管理。

newusers [passwd格式文件] 用于批量創(chuàng)建賬戶,只需要每一列賬戶信息格式,按照passwd中書寫,之后上傳到Linux中替換即可。

chpasswd 批量修改用戶口令。將文件格式寫為:user:passwd 。每行一個,之后導(dǎo)入Linux即可。

創(chuàng)建賬戶的默認(rèn)值設(shè)定位于: /etc/default/useradd文件中,該文件記錄了創(chuàng)建用戶賬戶時的默認(rèn)信息,可通過修改該文件來修改創(chuàng)建賬戶時的信息。

2、刪除帳號

如果一個用戶的賬號不再使用,可以從系統(tǒng)中刪除。刪除用戶賬號就是要將/etc/passwd等系統(tǒng)文件中的該用戶記錄刪除,必要時還需刪除用戶的主目錄。

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

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

userdel 選項 用戶名

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

例如:

userdel -r sam

此命令刪除用戶sam在系統(tǒng)文件中(主要是/etc/passwd, /etc/shadow, /etc/group等)的記錄,同時刪除用戶的主目錄。

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

3、修改帳號

修改用戶賬號就是根據(jù)實際情況更改用戶的有關(guān)屬性,如用戶號、主目錄、用戶組、登錄Shell等。

修改已有用戶的信息使用usermod命令,其格式如下:

usermod 選項 用戶名

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

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

例如:

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

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

4、查詢賬號口令

id [opentions] [User]

相關(guān)參數(shù):

-u:顯示UID

-g:顯示GID

-G:顯示用戶所屬的組ID

-n:顯示名稱

5、用戶口令管理

用戶管理的一項重要內(nèi)容是用戶口令的管理。用戶賬號剛創(chuàng)建時沒有口令,但是被系統(tǒng)鎖定,無法使用(在passwd文件中,密碼列顯示為!!或者!表示用戶被鎖定,是無法登陸的),必須為其指定口令后才可以使用,即使是指定空口令。

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

passwd 選項 用戶名

可使用的選項:

-l 鎖定口令,即禁用賬號。

-u 口令解鎖。

-d 使賬號無口令。

-f 強迫用戶下次登錄時修改口令。

如果默認(rèn)用戶名,則修改當(dāng)前用戶的口令。

例如,假設(shè)當(dāng)前用戶是sam,則下面的命令修改該用戶自己的口令:

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

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

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

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

為了系統(tǒng)安全起見,用戶應(yīng)該選擇比較復(fù)雜的口令,例如最好使用8位長的口令,口令中包含有大寫、小寫字母和數(shù)字,并且應(yīng)該與姓名、生日等不相同。

為用戶指定空口令時,執(zhí)行下列形式的命令:

passwd -d sam

此命令將用戶sam的口令刪除,這樣用戶sam下一次登錄時,系統(tǒng)就不再詢問口令。

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

passwd -l sam

利用組來簡化授權(quán)操作,當(dāng)對整個組授權(quán)時,整個組下的賬號權(quán)限都會進行修改

用戶相關(guān)的其他指令:

chfn [USER] 修改用戶的備注文檔

chsh [Shell] 修改用戶的指定shell

三、用戶組的管理

每個用戶都有一個用戶組,系統(tǒng)可以對一個用戶組中的所有用戶進行集中管理。不同 Linux 系統(tǒng)對用戶組的規(guī)定有所不同,如 Linux 下的用戶屬于與它同名的用戶組,這個用戶組在創(chuàng)建用戶時同時創(chuàng)建。

用戶組的管理涉及用戶組的添加、刪除和修改。組的添加、刪除和修改實際上就是對/etc/group文件的更新。

1、增加組

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

groupadd 選項 用戶組

可以使用的選項有:

-g GID 指定新用戶組的組標(biāo)識號(GID)。

-o 一般與-g選項同時使用,表示新用戶組的GID可以與系統(tǒng)已有用戶組的GID相同。

-r 創(chuàng)建系統(tǒng)組。

示例1:

groupadd group1

此命令向系統(tǒng)中增加了一個新組group1,新組的組標(biāo)識號是在當(dāng)前已有的最大組標(biāo)識號的基礎(chǔ)上加1。

示例2:

groupadd -g 101 group2

此命令向系統(tǒng)中增加了一個新組group2,同時指定新組的組標(biāo)識號是101。

2、刪除組

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

groupdel 用戶組

示例:

groupdel group1

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

3、修改組

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

groupmod 選項 用戶組

常用的選項有:

-g GID 為用戶組指定新的組標(biāo)識號。

-o 與-g選項同時使用,用戶組的新GID可以與系統(tǒng)已有用戶組的GID相同。

-n 新用戶組 將用戶組的名字改為新名字。

示例1:

groupmod -g 102 group2

此命令將組group2的組標(biāo)識號修改為102。

示例2:

groupmod -g 10000 -n group3 group2

此命令將組group2的標(biāo)識號改為10000,組名修改為group3。

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

如果一個用戶同時屬于多個用戶組,那么用戶可以在用戶組之間切換,以便具有其他用戶組的權(quán)限。

用戶可以在登錄后,使用命令newgrp切換到其他用戶組。例如:

newgrp root

這條命令將當(dāng)前用戶切換到root用戶組,前提條件是root用戶組確實是該用戶的主組或附加組。類似于用戶賬號的管理,用戶組的管理也可以通過集成的系統(tǒng)管理工具來完成。

更改查看組成員

可以通過以下命令,來更改和查看組中的成員:

groupmems [opentions] [action]

參數(shù)如下:

-g 更改為指定組(只有root可以使用)

-a 指定用戶加入組

-d 從組中刪除該用戶

-p 從組中清除所有成員

-l 顯示組成員列表

示例1:

groupmems -l -g root

此命令表示查看root組中存在的成員。

示例2:

groupmems -a Father -g root

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

小技巧:

一個用戶可以加入不同的組,但是有且只有一個主組。

一個用戶的權(quán)限為他所屬的多個組的累加權(quán)限 。假設(shè)user賬戶附加組group1 = write group2 = read ,那么user就擁有 write + read權(quán)限。

組和用戶的關(guān)系是多對多 一個用戶可以有多個組,一個組也可以有多個用戶。

在windows中,只有管理員才允許對用戶組進行操作,但在Linux中,只要有組的口令,就可以讓賬號進入組。

root組的權(quán)限與普通組權(quán)限大致相同,賬號并不是加入root組就能獲得用戶權(quán)限。

四、文件的權(quán)限控制

1、文件權(quán)限與歸屬

在Linux系統(tǒng)中,每個文件都有歸屬的所有者和所有組,并且規(guī)定了文件的所有者、所有組以及其他人對文件所擁有的讀(r)、寫(w)、執(zhí)行(x)等權(quán)限。

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

但是,對于目錄文件來說,理解其權(quán)限設(shè)置來就不那么容易了。很多資深Linux用戶其實也沒有真正搞明白。

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

讀寫執(zhí)行權(quán)限對于文件與目錄可執(zhí)行命令的區(qū)別:

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

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

文件權(quán)限的字符與數(shù)字表示:

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

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

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

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

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

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

數(shù)字與字符權(quán)限轉(zhuǎn)換示意圖:

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

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

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

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

包含了文件的類型(第一個字符表示文件的類型,d表示文件夾,減號表示普通文件)、訪問權(quán)限、所有者(屬主)、所屬組(屬組)、占用的磁盤大小、最后修改時間和文件名稱等信息。通過分析可知,該文件的類型為普通文件,所有者權(quán)限為可讀、可寫(rw-),所屬組權(quán)限為可讀(r--),除此以外的其他人也只有可讀權(quán)限(r--),文件的磁盤占用大小是34298字節(jié),最近一次的修改時間為4月2日的凌晨23分,文件的名稱為install.log。

其中排在權(quán)限前面的減號(-)是文件類型,新手經(jīng)常會把它跟無權(quán)限混淆。盡管在Linux系統(tǒng)中一切都是文件,但是不同的文件由于作用不同,因此類型也不盡相同,有一點點像Windows系統(tǒng)的后綴名。常見的文件類型包括有:普通文件(-)、目錄文件(d)、鏈接文件(l)、管道文件(p)、塊設(shè)備文件(b)以及字符設(shè)備文件(c)。

普通文件的范圍特別廣泛,比如純文本信息、服務(wù)配置信息、日志信息以及Shell腳本等等都包含在內(nèi),所以幾乎在每個目錄下都能看到普通文件(-)和目錄文件(d)的身影。塊設(shè)備文件(b)和字符設(shè)備文件(c)一般是指硬件設(shè)備,比如鼠標(biāo)、鍵盤、光驅(qū)、硬盤等等都是設(shè)備文件,主要集中在/dev/目錄中最為常見,不過其實很少會對鼠標(biāo)鍵盤進行硬件級別的管理吧~

2、文件的特殊權(quán)限

在復(fù)雜多變的生產(chǎn)環(huán)境中,單純設(shè)置文件的rwx權(quán)限無法滿足我們對安全和靈活性的需求,因此便有了SUID、SGID與SBIT的特殊權(quán)限位。這是一種對文件權(quán)限進行設(shè)置的特殊功能,可以與一般權(quán)限同時使用,以彌補一般權(quán)限不能實現(xiàn)的功能。

下面具體解釋這3個特殊權(quán)限位的功能以及用法。

1)SUID

SUID是一種對二進制程序進行設(shè)置的特殊權(quán)限,能夠讓二進制程序的執(zhí)行者臨時擁有所屬主的權(quán)限(僅對擁有執(zhí)行權(quán)限的二進制程序有效)。例如,所有用戶都可以執(zhí)行passwd命令來修改自己的用戶密碼,而用戶密碼保存在/etc/shadow文件中。仔細查看這個文件就會發(fā)現(xiàn)它的默認(rèn)權(quán)限是000,也就是說除了root管理員以外,所有用戶都沒有查看或編輯該文件的權(quán)限。但是,在使用passwd命令時如果加上SUID特殊權(quán)限位,就可讓普通用戶臨時獲得程序所屬者的身份,把變更的密碼信息寫入到shadow文件中。這很像在古裝劇中見到的手持尚方寶劍的欽差大臣,他手持的尚方寶劍代表的是皇上的權(quán)威,因此可以懲戒貪官,但這并不意味著他永久成為了皇上。因此這只是一種有條件的、臨時的特殊權(quán)限授權(quán)方法。

查看passwd命令屬性時發(fā)現(xiàn)所屬者的權(quán)限由rwx變成了rws,其中x改變成s就意味著該文件被賦予了SUID權(quán)限。另外有讀者會好奇,那么如果原本的權(quán)限是rw-呢?如果原先權(quán)限位上沒有x執(zhí)行權(quán)限,那么被賦予特殊權(quán)限后將變成大寫的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

注意:一定要小心這個權(quán)限,因為一旦某個命令文件被設(shè)置上了SUID權(quán)限,那么就意味著凡是執(zhí)行的人都可以臨時獲取到更高的權(quán)限,千萬不要設(shè)置到vim、cat、rm等命令上面?。?!

2)SGID

SGID特殊權(quán)限有兩種應(yīng)用場景,當(dāng)對二進制程序進行設(shè)置時,能夠讓執(zhí)行者臨時獲取到文件所屬組的權(quán)限;而對目錄進行設(shè)置時,則是讓目錄內(nèi)新創(chuàng)建的文件自動繼承該目錄原有用戶組的名稱。

第一種功能是參考SUID而設(shè)計的,不同點在于執(zhí)行程序的用戶獲取的不再是文件所屬者的臨時權(quán)限,而是獲取到文件所屬組的權(quán)限。舉例來說,在早期的Linux系統(tǒng)中,/dev/kmem是一個字符設(shè)備文件,用于存儲內(nèi)核程序要訪問的數(shù)據(jù),權(quán)限為:

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

大家看出問題了嗎?除了root管理員或?qū)儆趕ystem組成員外,其他用戶都沒有讀取該文件的權(quán)限。由于在平時我們需要查看系統(tǒng)的進程狀態(tài),為了能夠獲取到進程的狀態(tài)信息,可在用于查看系統(tǒng)進程狀態(tài)的ps命令文件上增加SGID特殊權(quán)限位。查看ps命令文件的屬性信息:

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

這樣一來,由于ps命令被增加了SGID特殊權(quán)限位,所以當(dāng)用戶執(zhí)行該命令時,也就臨時獲取到了system用戶組的權(quán)限,從而順利地讀取到了設(shè)備文件。

前文提到,每個文件都有其歸屬的所屬者和所屬組,當(dāng)創(chuàng)建或傳送一個文件后,這個文件就會自動歸屬于執(zhí)行這個操作的用戶(即該用戶是文件的所有者)。如果現(xiàn)在需要在一個部門內(nèi)設(shè)置共享目錄,讓部門內(nèi)的所有人員都能夠讀取目錄中的內(nèi)容,那么就可以創(chuàng)建部門共享目錄后,在該目錄上設(shè)置SGID特殊權(quán)限位。這樣,部門內(nèi)的任何人員在里面創(chuàng)建的任何文件都會歸屬于該目錄的所屬組,而不再是自己的基本用戶組。此時,用到的就是SGID的第二個功能,即在某個目錄中創(chuàng)建的文件自動繼承該目錄的用戶組(只可以對目錄進行設(shè)置)。

[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

在使用上述命令設(shè)置好目錄的777權(quán)限(確保普通用戶可以向其中寫入文件),并為該目錄設(shè)置了SGID特殊權(quán)限位后,就可以切換至一個普通用戶,然后嘗試在該目錄中創(chuàng)建文件,并查看新創(chuàng)建的文件是否會繼承新創(chuàng)建的文件所在的目錄的所屬組名稱:

[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的這兩個功能,再介紹兩個與本小節(jié)內(nèi)容相關(guān)的命令:chmod和chown。

chmod命令用于設(shè)置文件的一般權(quán)限及特殊權(quán)限,英文全稱為:“change mode”,語法格式為:“chmod [參數(shù)] 文件名”。

這是一個與日常設(shè)置文件權(quán)限強相關(guān)的命令,例如要把一個文件的權(quán)限設(shè)置成其所有者可讀可寫可執(zhí)行、所屬組可讀可寫、其他人沒有任何權(quán)限,則相應(yīng)的字符法表示為rwxrw----,其對應(yīng)的數(shù)字法表示為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命令用于設(shè)置文件的所有者和所有組,英文全稱為:“change own”,語法格式為:“chown 所有者:所有組 文件名”。

chmod和chown命令是用于修改文件屬性和權(quán)限的最常用命令,它們還有一個特別的共性,就是針對目錄進行操作時需要加上大寫參數(shù)-R來表示遞歸操作,即對目錄內(nèi)所有的文件進行整體操作。

使用“所有者:所有組”的格式輕松把剛剛那個文件的所屬信息修改一下,變更后的效果如下:

[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

現(xiàn)在,大學(xué)里的很多老師都要求學(xué)生將作業(yè)上傳到服務(wù)器的特定共享目錄中,但總是有幾個“破壞分子”喜歡刪除其他同學(xué)的作業(yè),這時就要設(shè)置SBIT(Sticky Bit)特殊權(quán)限位了(也可以稱之為特殊權(quán)限位之粘滯位)。SBIT特殊權(quán)限位可確保用戶只能刪除自己的文件,而不能刪除其他用戶的文件。換句話說,當(dāng)對某個目錄設(shè)置了SBIT粘滯位權(quán)限后,那么該目錄中的文件就只能被其所有者執(zhí)行刪除操作了。

最初不知道是哪位非資深技術(shù)人員將Sticky Bit直譯成了“粘滯位”,劉遄老師建議將其稱為“保護位”,這既好記,又能立刻讓人了解它的作用。RHEL 8系統(tǒng)中的/tmp作為一個共享文件的目錄,默認(rèn)已經(jīng)設(shè)置了SBIT特殊權(quán)限位,因此除非是該目錄的所有者,否則無法刪除這里面的文件。

與前面所講的SUID和SGID權(quán)限顯示方法不同,當(dāng)目錄被設(shè)置SBIT特殊權(quán)限位后,文件的其他人權(quán)限部分的x執(zhí)行權(quán)限就會被替換成t或者T,原本有x執(zhí)行權(quán)限則會寫成t,原本沒有x執(zhí)行權(quán)限則會被寫成T。

/tmp目錄上的SBIT權(quán)限默認(rèn)已經(jīng)存在,體現(xiàn)為“其他用戶”權(quán)限字段的權(quán)限變?yōu)閞wt:

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

其實,文件能否被刪除并不取決于自身的權(quán)限,而是看其所在目錄是否有寫入權(quán)限。為了避免現(xiàn)在很多讀者不放心,所以下面的命令還是賦予了這個test文件最大的777權(quán)限(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

隨后,切換到一個普通用戶身份下,嘗試刪除這個其他人創(chuàng)建的文件就會發(fā)現(xiàn),即便讀、寫、執(zhí)行權(quán)限全開,但是由于SBIT特殊權(quán)限位的緣故,依然無法刪除該文件:

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

工作中對特殊權(quán)限善加使用,能夠?qū)崿F(xiàn)很多巧妙的功能,chmod命令設(shè)置特殊權(quán)限時的參數(shù)如下:

參數(shù) 作用
u+s 設(shè)置SUID權(quán)限
u-s 取消SUID權(quán)限
g+s 設(shè)置SGID權(quán)限
g-s 取消SGID權(quán)限
o+t 設(shè)置SBIT權(quán)限
o-t 取消SBIT權(quán)限

切換回root管理員的身份下,在家目錄中創(chuàng)建一個名為linux的新目錄,隨后設(shè)置上SBIT權(quán)限吧:

[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參數(shù)是在一般權(quán)限已經(jīng)設(shè)置完畢的前提下,又新增了一項特殊權(quán)限,那如果我們想一般權(quán)限和特殊權(quán)限一起設(shè)置,有什么高效率的方法呢?

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

在“rwxr-xr-t”權(quán)限中,最后一位是t,代表該文件的一般權(quán)限為“rwxr-xr-x”,并帶有SBIT特殊權(quán)限。對于讀(r)、寫(w)、執(zhí)行(x)權(quán)限的數(shù)字計算方法大家應(yīng)該很熟悉了——即755,而SBIT特殊權(quán)限位是1,合并后結(jié)果為1755。

再增加點難度,如果權(quán)限是“rwsrwSr--”呢?首先不要慌,看到大寫S代表原先沒有執(zhí)行權(quán)限,因此一般權(quán)限為“rwxrw-r--”,數(shù)字法計算后結(jié)果是764。帶有的SUID和SGID特殊權(quán)限數(shù)字法表示是4和2,心算得出結(jié)果是6,合并后結(jié)果為6764。

權(quán)限的字符表示法轉(zhuǎn)數(shù)字表示法:

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

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

權(quán)限的數(shù)字表示法轉(zhuǎn)字符標(biāo)識法:

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

3、文件的隱藏屬性

Linux系統(tǒng)中的文件除了具備一般權(quán)限和特殊權(quán)限之外,還有一種隱藏權(quán)限,即被隱藏起來的權(quán)限,默認(rèn)情況下不能直接被用戶發(fā)覺。有用戶曾經(jīng)在生產(chǎn)環(huán)境和RHCE考試題目中碰到過明明權(quán)限充足但卻無法刪除某個文件的情況,或者僅能在日志文件中追加內(nèi)容而不能修改或刪除內(nèi)容,這在一定程度上阻止了黑客篡改系統(tǒng)日志的圖謀,因此這種“奇怪”的文件也保障了Linux系統(tǒng)的安全性。

既然叫隱藏權(quán)限了,那肯定不能用常規(guī)的ls命令就讓我們看到它的真面目,專用的設(shè)置命令是chattr,專用的查看命令是lsattr。

1)chattr命令

chattr命令用于設(shè)置文件的隱藏權(quán)限,英文全稱為:“change attributes”,語法格式為:“chattr [參數(shù)] 文件名稱”。

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

chattr命令中的參數(shù)及其作用:

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

為了讓讀者能夠更好地見識隱藏權(quán)限的效果,我們先來創(chuàng)建一個普通文件,然后立即嘗試刪除(這個操作肯定會成功):

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

實踐是檢驗真理的唯一標(biāo)準(zhǔn)。如果您沒有親眼見證過隱藏權(quán)限強大功能的美妙,就一定不會相信原來Linux系統(tǒng)會如此安全。接下來再次新建一個普通文件,并為其設(shè)置不允許刪除與覆蓋(+a參數(shù))權(quán)限,然后再嘗試將這個文件刪除:

[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命令用于查看文件的隱藏權(quán)限,英文全稱為:“l(fā)ist attributes”,語法格式為:“l(fā)sattr [參數(shù)] 文件名稱”。

在Linux系統(tǒng)中,文件的隱藏權(quán)限必須使用lsattr命令來查看,平時使用的ls之類的命令則看不出端倪:

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

一旦使用lsattr命令后,文件上被賦予的隱藏權(quán)限馬上就會原形畢露:

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

此時按照顯示的隱藏權(quán)限的類型(字母),使用chattr命令將其去掉:

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

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

4、文件訪問控制列表

不知道大家是否發(fā)現(xiàn),前文講解的一般權(quán)限、特殊權(quán)限、隱藏權(quán)限其實有一個共性,那就是權(quán)限是針對某一類用戶設(shè)置的,能夠?qū)芏嗳送瑫r生效。如果希望對某個指定的用戶進行單獨的權(quán)限控制,就需要用到文件的訪問控制列表(FACL,F(xiàn)ile Access Control Lists)了。通俗來講,基于普通文件或目錄設(shè)置ACL訪問控制其實就是針對指定的用戶或用戶組設(shè)置文件或目錄的操作權(quán)限,更加精準(zhǔn)的派發(fā)權(quán)限。另外,如果針對某個目錄設(shè)置了ACL,則目錄中的文件會繼承其權(quán)限;若針對文件設(shè)置了ACL,則文件不再繼承其所在目錄的權(quán)限。

為了更直觀地看到ACL對文件權(quán)限控制的強大效果,我們先切換到普通用戶,然后嘗試進入root管理員的家目錄中。在沒有針對普通用戶對root管理員的家目錄設(shè)置ACL之前,其執(zhí)行結(jié)果如下所示:

[root@localhost ~]# su - dev1
上一次登錄:三 7月 24 22:53:31 CST 2024pts/0 上
[dev1@localhost ~]$ cd /root
-bash: cd: /root: 權(quán)限不夠
[dev1@localhost ~]$ exit

1)setfacl命令

setfacl命令用于管理文件的ACL權(quán)限規(guī)則,英文全稱為:“set files ACL”,語法格式為:“ setfacl [參數(shù)] 文件名稱”。

ACL權(quán)限提供的是在所有者、所屬組、其他人的讀/寫/執(zhí)行權(quán)限之外的特殊權(quán)限控制,使用setfacl命令可以針對單一用戶或用戶組、單一文件或目錄來進行讀/寫/執(zhí)行權(quán)限的控制。其中,針對目錄文件需要使用-R遞歸參數(shù);針對普通文件則使用-m參數(shù);如果想要刪除某個文件的ACL,則可以使用-b參數(shù)。

setfacl命令中的參數(shù)以及作用:

參數(shù) 作用
-m 修改權(quán)限
-M 從文件中讀取權(quán)限
-x 刪除某個權(quán)限
-b 刪除全部權(quán)限
-R 遞歸子目錄

例如我們原本是無法進入到/root目錄中的,現(xiàn)在給這位普通用戶單獨設(shè)置下權(quán)限:

[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

是不是覺得效果很酷呢?但是現(xiàn)在有這樣一個小問題—怎么去查看文件上有哪些ACL呢?常用的ls命令是看不到ACL表信息的,但是卻可以看到文件的權(quán)限最后一個點(.)變成了加號(+),這就意味著該文件已經(jīng)設(shè)置了ACL。現(xiàn)在大家是不是感覺學(xué)得越多,越不敢說自己精通Linux系統(tǒng)了吧?就這么一個不起眼的點(.),竟然還表示這么一種重要的權(quán)限。

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

2)getfacl命令

getfacl命令用于查看文件的ACL權(quán)限規(guī)則,英文全稱為:“get files ACL”,語法格式為:“ getfacl [參數(shù)] 文件名稱”。

getfacl命令用于顯示文件上設(shè)置的ACL信息,格式為“getfacl 文件名稱”。Linux系統(tǒng)中的命令就是這么又可愛又好記。想要設(shè)置ACL,用的是setfacl命令;要想查看ACL,則用的是getfacl命令。下面使用getfacl命令顯示在root管理員家目錄上設(shè)置的所有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權(quán)限還可以針對某個用戶組來設(shè)置,例如允許某個組的用戶都可以讀寫/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--

設(shè)置錯了想刪除?沒問題!清空所有ACL權(quán)限用-b參數(shù),指定刪除某一條權(quán)限就用-x參數(shù):

[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權(quán)限的設(shè)置都是立即且永久生效的,不需要再編輯什么配置文件,這點特別方便~但是也有個安全隱患,如果我們不小心設(shè)置錯了權(quán)限怎么辦?就會覆蓋掉文件原始的權(quán)限信息,并且永遠都找不回來了。

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

例如:將 /home 目錄上的ACL權(quán)限備份一份,要用-R遞歸參數(shù),這樣不僅能夠把目錄本身的權(quán)限備份了,里面的文件權(quán)限也都能自動備份。需要注意 getfacl 在備份目錄權(quán)限時不能使用絕對路徑的形式,因此我們需要先切換到最上層根目錄,然后再進行操作:

[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權(quán)限的恢復(fù)也很簡單,使用的是“--restore”參數(shù),由于備份時已經(jīng)指定了是對home目錄進行的操作,所以不需要寫對應(yīng)的目錄名稱,它能夠自動找到要恢復(fù)的對象:

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

5、su命令與sudo命令

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

su命令可以解決切換用戶身份的需求,使得當(dāng)前用戶在不退出登錄的情況下,順暢地切換到其他用戶,比如從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) 環(huán)境=unconfined_uunconfined_tc0.c1023

細心的讀者一定會發(fā)現(xiàn),上面的su命令與用戶名之間有一個減號(-),這意味著完全切換到新的用戶,即把環(huán)境變量信息也變更為新用戶的相應(yīng)信息,而不是保留原始的信息。強烈建議在切換用戶身份時添加這個減號(-)。

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

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

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

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

溫馨提示:

授權(quán)原則:在保證普通用戶完成相應(yīng)工作的前提下,盡可能少的賦予額外的權(quán)限。

sudo命令用于給普通用戶提供額外的權(quán)限,語法格式為:“ sudo [參數(shù)] 用戶名”。

使用sudo命令可以給普通用戶提供額外的權(quán)限來完成原本只有root管理員才能完成的任務(wù)??梢韵拗朴脩魣?zhí)行指定的命令、記錄用戶執(zhí)行過的每一條命令、集中的管理用戶與權(quán)限(/etc/sudoers)以及驗證密碼后一段時間內(nèi)免驗證的方便措施。

sudo命令中的常用參數(shù)以及作用:

參數(shù) 作用
-h 列出幫助信息
-l 列出當(dāng)前用戶可執(zhí)行的命令
-u 用戶名或UID值 以指定的用戶身份執(zhí)行命令
-k 清空密碼的有效時間,下次執(zhí)行sudo時需要再次進行密碼驗證
-b 在后臺執(zhí)行指定的命令
-p 更改詢問密碼的提示語

當(dāng)然,如果擔(dān)心直接修改配置文件會出現(xiàn)問題,則可以使用sudo命令提供的visudo命令來配置用戶權(quán)限。

visudo命令用于編輯配置用戶sudo權(quán)限文件,語法格式為:“ visudo [參數(shù)]”。

這是一條會自動調(diào)用vi編輯器來配置/etc/sudoers權(quán)限文件的命令,能夠解決多個用戶同時修改權(quán)限而導(dǎo)致的沖突問題,不僅如此,visudo命令還可以對配置文件內(nèi)的參數(shù)進行語法檢查,在發(fā)現(xiàn)參數(shù)錯誤時進行報錯提醒,比用戶直接修改文件更友好、安全、方便。

>>> /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命令配置權(quán)限文件時,其操作方法與Vim編輯器中用到的方法完全一致,因此在編寫完成后記得在末行模式下保存并退出。配置權(quán)限文件時,按照下面的格式將第101行(大約)填寫上指定的信息:

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

誰可以使用:稍后要為那位用戶進行命令授權(quán)。

允許使用的主機:可以填寫ALL代表不限制來源主機,亦可填寫如192.168.10.0/24的網(wǎng)段限制來源地址,只有從允許網(wǎng)段登錄時才能使用sudo命令。

以誰的身份:可以填寫ALL代表系統(tǒng)最高權(quán)限,也可以是另外一位用戶的名字。

可執(zhí)行命令的列表:可以填寫ALL代表不限制命令的列表,亦可填寫如/usr/bin/cat的文件名稱來限制命令列表,多個命令文件之間用逗號(,)間隔。

在Linux系統(tǒng)中配置服務(wù)文件時,雖然沒有硬性規(guī)定,但從經(jīng)驗來講新增的參數(shù)位置不建議太靠上,避免服務(wù)一些必要的功能沒加載完成時,我們填寫的新參數(shù)不被執(zhí)行成功。一般會在配置文件中找一下相似的參數(shù),然后在相鄰位置進行新的修改,或者選擇文件的中下部位置。

[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命令查看到所有可執(zhí)行的命令了(下面的命令中,驗證的是該普通用戶的密碼,而不是root管理員的密碼,請讀者不要搞混了):

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

我們信任您已經(jīng)從系統(tǒng)管理員那里了解了日常注意事項。
總結(jié)起來無外乎這三點:

    #1) 尊重別人的隱私。
    #2) 輸入前要先考慮(后果和風(fēng)險)。
    #3) 權(quán)力越大,責(zé)任越大。

[sudo] dev2 的密碼:此處輸入dev2用戶的密碼
匹配 %2$s 上 %1$s 的默認(rèn)條目:
    !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)中的文件信息的,但是,只需要在想執(zhí)行的命令前面加上sudo命令就行了:

[root@localhost ~]# su - dev2
上一次登錄:四 7月 25 23:35:47 CST 2024pts/0 上
[dev2@localhost ~]$ ls /root
ls: 無法打開目錄/root: 權(quán)限不夠
[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  公共  模板  視頻  圖片  文檔  下載  音樂  桌面

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

[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命令繼續(xù)編輯權(quán)限文件,將原先101行所新增的參數(shù)作如下修改,多個命令之間用英文逗號(,)分隔。

[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,
省略...

在編輯好后依然是先保存再退出。再次切換到指定的普通用戶,然后嘗試正常查看某個系統(tǒng)文件的內(nèi)容,此時系統(tǒng)提示沒有權(quán)限(Permission denied)。再使用sudo命令就能順利地查看文件內(nèi)容了:

[root@localhost ~]# su - dev2
上一次登錄:五 7月 26 23:21:09 CST 2024pts/0 上
[dev2@localhost ~]$ cat /etc/shadow
cat: /etc/shadow: 權(quán)限不夠
[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
登出

不知大家是否發(fā)覺在每次執(zhí)行sudo命令后都會要求驗證一下密碼。雖然這個密碼就是當(dāng)前登錄用戶的密碼,但是每次執(zhí)行sudo命令都要輸入一次密碼其實也挺麻煩的,這時可以添加NOPASSWD參數(shù),使得用戶下次再執(zhí)行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,
省略...

這樣,當(dāng)切換到普通用戶后再執(zhí)行命令時,就不用再頻繁地驗證密碼了,我們在日常工作中也就痛快至極了。

[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管理員才可以執(zhí)行,普通用戶使用會提示權(quán)限不足。

五、組和權(quán)限設(shè)定的命令

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

1、chmod命令

chmod命令用于設(shè)置文件的一般權(quán)限及特殊權(quán)限,英文全稱為:“change mode”,語法格式為:“chmod [參數(shù)] 文件名”。

這是一個與日常設(shè)置文件權(quán)限強相關(guān)的命令,例如要把一個文件的權(quán)限設(shè)置成其所有者可讀可寫可執(zhí)行、所屬組可讀可寫、其他人沒有任何權(quán)限,則相應(yīng)的字符法表示為rwxrw----,其對應(yīng)的數(shù)字法表示為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命令用于設(shè)置文件的所有者和所有組,英文全稱為:“change own”,語法格式為:“chown 所有者:所有組 文件名”。

chmod和chown命令是用于修改文件屬性和權(quán)限的最常用命令,它們還有一個特別的共性,就是針對目錄進行操作時需要加上大寫參數(shù)-R來表示遞歸操作,即對目錄內(nèi)所有的文件進行整體操作。

使用“所有者:所有組”的格式輕松把剛剛那個文件的所屬信息修改一下,變更后的效果如下:

[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

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • Linux
    +關(guān)注

    關(guān)注

    87

    文章

    11350

    瀏覽量

    210466
  • 服務(wù)器
    +關(guān)注

    關(guān)注

    12

    文章

    9321

    瀏覽量

    86104
  • 操作系統(tǒng)
    +關(guān)注

    關(guān)注

    37

    文章

    6898

    瀏覽量

    123784
  • 權(quán)限控制
    +關(guān)注

    關(guān)注

    0

    文章

    5

    瀏覽量

    6422

原文標(biāo)題:掌握Linux權(quán)限控制,輕松提高系統(tǒng)安全性!

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

收藏 人收藏

    評論

    相關(guān)推薦

    Linux 中文件權(quán)限管理的探討

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

    Linux改變文件或目錄的訪問權(quán)限命令

    Linux改變文件或目錄的訪問權(quán)限命令 Linux改變文件或目錄的訪問權(quán)限命令  Linux系統(tǒng)
    發(fā)表于 01-18 12:46 ?1206次閱讀

    Linux設(shè)備驅(qū)動開發(fā)詳解》第9章、Linux設(shè)備驅(qū)動的異步通知與異步IO

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

    Linux設(shè)備驅(qū)動開發(fā)詳解》第8章、Linux設(shè)備驅(qū)動的阻塞與非阻塞IO

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

    Linux設(shè)備驅(qū)動開發(fā)詳解》第7章、Linux設(shè)備驅(qū)動的并發(fā)控制

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

    淺談Linux權(quán)限管理的ACL權(quán)限

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

    Linux權(quán)限控制的基本原理

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

    Linux進程權(quán)限的分析說明

     在linux下,關(guān)于文件權(quán)限,大部分人接觸比較多,也比較熟悉了解。但是對進程權(quán)限一般知之甚少。本文總結(jié)一下linux系統(tǒng)下進程權(quán)限問題和現(xiàn)
    發(fā)表于 07-17 10:55 ?905次閱讀

    Linux系統(tǒng)EXP命令詳解質(zhì)量匯總

    Linux系統(tǒng)EXP命令詳解質(zhì)量匯總
    發(fā)表于 05-14 09:35 ?1次下載

    linux文件訪問權(quán)限怎么設(shè)置

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

    Linux把目錄權(quán)限給指定用戶

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

    Linux文件權(quán)限及Makefile

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

    Linux用戶身份與進程權(quán)限詳解

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

    Linux文件權(quán)限詳解

    權(quán)限的意義在于允許某一個用戶或某個用戶組以規(guī)定的方式去訪問某個文件。
    的頭像 發(fā)表于 11-01 09:45 ?232次閱讀

    linux權(quán)限管理詳解

    權(quán)限:在計算機系統(tǒng),權(quán)限是指某個計算機用戶具有使用軟件資源的權(quán)利。
    的頭像 發(fā)表于 12-25 09:43 ?189次閱讀