5.1 用戶身份與能力

2022-05-27 17:05 更新

設(shè)計Linux系統(tǒng)的初衷之一就是為了滿足多個用戶同時工作的需求,因此Linux系統(tǒng)必須具備很好的安全性。第1章在安裝RHEL 7操作系統(tǒng)時,特別要求設(shè)置root管理員密碼,這個root管理員就是存在于所有類UNIX系統(tǒng)中的超級用戶。它擁有最高的系統(tǒng)所有權(quán),能夠管理系統(tǒng)的各項功能,如添加/刪除用戶、啟動/關(guān)閉服務(wù)進程、開啟/禁用硬件設(shè)備等。雖然以root管理員的身份工作時不會受到系統(tǒng)的限制,但俗語講“能力越大,責(zé)任就越大”,因此一旦使用這個高能的root管理員權(quán)限執(zhí)行了錯誤的命令可能會直接毀掉整個系統(tǒng)。使用與否,確實需要好好權(quán)衡一下。

在學(xué)習(xí)時是否要使用root管理員權(quán)限來控制整個系統(tǒng)呢?面對這個問題,網(wǎng)絡(luò)上有很多文章建議以普通用戶的身份來操作—這是一個更安全也更“無責(zé)任”的回答。今天,劉遄老師就要冒天下之大不韙給出自己的心得—強烈推薦大家在學(xué)習(xí)時使用root管理員權(quán)限!

這種為root管理員正名的決絕態(tài)度在網(wǎng)絡(luò)中應(yīng)該還是很少見的,我之所以力薦root管理員權(quán)限,原因很簡單。因為在Linux的學(xué)習(xí)過程中如果使用普通用戶身份進行操作,則在配置服務(wù)之后出現(xiàn)錯誤時很難判斷是系統(tǒng)自身的問題還是因為權(quán)限不足而導(dǎo)致的;這無疑會給大家的學(xué)習(xí)過程徒增坎坷。更何況我們的實驗環(huán)境是使用VMware虛擬機軟件搭建的,可以將安裝好的系統(tǒng)設(shè)置為一次快照,這即便系統(tǒng)徹底崩潰了,您也可以在5秒鐘的時間內(nèi)快速還原出一臺全新的系統(tǒng),而不用擔(dān)心數(shù)據(jù)丟失。

總之,劉遄老師在培訓(xùn)時都推薦每位學(xué)生使用root管理員權(quán)限來學(xué)習(xí)Linux系統(tǒng),等到工作時再根據(jù)生產(chǎn)環(huán)境決定使用哪個用戶權(quán)限;這些僅與選擇相關(guān),而非技術(shù)性問題。

另外,很多圖書或培訓(xùn)機構(gòu)的老師會講到,Linux系統(tǒng)中的管理員就是root。這其實是錯誤的,Linux系統(tǒng)的管理員之所以是root,并不是因為它的名字叫root,而是因為該用戶的身份號碼即UID(User IDentification)的數(shù)值為0。在Linux系統(tǒng)中,UID就相當(dāng)于我們的身份證號碼一樣具有唯一性,因此可通過用戶的UID值來判斷用戶身份。在RHEL 7系統(tǒng)中,用戶身份有下面這些。

管理員UID為0:系統(tǒng)的管理員用戶。

系統(tǒng)用戶UID為1~999: Linux系統(tǒng)為了避免因某個服務(wù)程序出現(xiàn)漏洞而被黑客提權(quán)至整臺服務(wù)器,默認服務(wù)程序會有獨立的系統(tǒng)用戶負責(zé)運行,進而有效控制被破壞范圍。

普通用戶UID從1000開始:是由管理員創(chuàng)建的用于日常工作的用戶。

需要注意的是,UID是不能沖突的,而且管理員創(chuàng)建的普通用戶的UID默認是從1000開始的(即使前面有閑置的號碼)。

為了方便管理屬于同一組的用戶,Linux系統(tǒng)中還引入了用戶組的概念。通過使用用戶組號碼(GID,Group IDentification),我們可以把多個用戶加入到同一個組中,從而方便為組中的用戶統(tǒng)一規(guī)劃權(quán)限或指定任務(wù)。假設(shè)有一個公司中有多個部門,每個部門中又有很多員工。如果只想讓員工訪問本部門內(nèi)的資源,則可以針對部門而非具體的員工來設(shè)置權(quán)限。例如,可以通過對技術(shù)部門設(shè)置權(quán)限,使得只有技術(shù)部門的員工可以訪問公司的數(shù)據(jù)庫信息等。

另外,在Linux系統(tǒng)中創(chuàng)建每個用戶時,將自動創(chuàng)建一個與其同名的基本用戶組,而且這個基本用戶組只有該用戶一個人。如果該用戶以后被歸納入其他用戶組,則這個其他用戶組稱之為擴展用戶組。一個用戶只有一個基本用戶組,但是可以有多個擴展用戶組,從而滿足日常的工作需要。

  1. useradd命令

useradd命令用于創(chuàng)建新的用戶,格式為“useradd [選項] 用戶名”。

可以使用useradd命令創(chuàng)建用戶賬戶。使用該命令創(chuàng)建用戶賬戶時,默認的用戶家目錄會被存放在/home目錄中,默認的Shell解釋器為/bin/bash,而且默認會創(chuàng)建一個與該用戶同名的基本用戶組。這些默認設(shè)置可以根據(jù)表5-1中的useradd命令參數(shù)自行修改。

表5-1 useradd命令中的用戶參數(shù)以及作用

參數(shù) 作用
-d 指定用戶的家目錄(默認為/home/username)
-e 賬戶的到期時間,格式為YYYY-MM-DD.
-u 指定該用戶的默認UID
-g 指定一個初始的用戶基本組(必須已存在)
-G 指定一個或多個擴展用戶組
-N 不創(chuàng)建與用戶同名的基本用戶組
-s 指定該用戶的默認Shell解釋器

下面我們創(chuàng)建一個普通用戶并指定家目錄的路徑、用戶的UID以及Shell解釋器。在下面的命令中,請注意/sbin/nologin,它是終端解釋器中的一員,與Bash解釋器有著天壤之別。一旦用戶的解釋器被設(shè)置為nologin,則代表該用戶不能登錄到系統(tǒng)中:

    [root@linuxprobe ~]# useradd -d /home/linux -u 8888 -s /sbin/nologin linuxprobe
    [root@linuxprobe ~]# id linuxprobe
    uid=8888(linuxprobe) gid=8888(linuxprobe) groups=8888(linuxprobe)
  1. groupadd命令

groupadd命令用于創(chuàng)建用戶組,格式為“groupadd [選項] 群組名”。

為了能夠更加高效地指派系統(tǒng)中各個用戶的權(quán)限,在工作中常常會把幾個用戶加入到同一個組里面,這樣便可以針對一類用戶統(tǒng)一安排權(quán)限。創(chuàng)建用戶組的步驟非常簡單,例如使用如下命令創(chuàng)建一個用戶組ronny:

    [root@linuxprobe ~]# groupadd ronny
  1. usermod命令

usermod命令用于修改用戶的屬性,格式為“usermod [選項] 用戶名”。

前文曾反復(fù)強調(diào),Linux系統(tǒng)中的一切都是文件,因此在系統(tǒng)中創(chuàng)建用戶也就是修改配置文件的過程。用戶的信息保存在/etc/passwd文件中,可以直接用文本編輯器來修改其中的用戶參數(shù)項目,也可以用usermod命令修改已經(jīng)創(chuàng)建的用戶信息,諸如用戶的UID、基本/擴展用戶組、默認終端等。usermod命令的參數(shù)以及作用如表5-2所示。

表5-2 usermod命令中的參數(shù)及作用

參數(shù) 作用
-c 填寫用戶賬戶的備注信息
-d -m 參數(shù)-m與參數(shù)-d連用,可重新指定用戶的家目錄并自動把舊的數(shù)據(jù)轉(zhuǎn)移過去
-e 賬戶的到期時間,格式為YYYY-MM-DD
-g 變更所屬用戶組
-G 變更擴展用戶組
-L 鎖定用戶禁止其登錄系統(tǒng)
-U 解鎖用戶,允許其登錄系統(tǒng)
-s 變更默認終端
-u 修改用戶的UID

大家不要被這么多參數(shù)嚇壞了。我們先來看一下賬戶linuxprobe的默認信息:

    [root@linuxprobe ~]# id linuxprobe
    uid=1000(linuxprobe) gid=1000(linuxprobe) groups=1000(linuxprobe)

然后將用戶linuxprobe加入到root用戶組中,這樣擴展組列表中則會出現(xiàn)root用戶組的字樣,而基本組不會受到影響:

    [root@linuxprobe ~]# usermod -G root linuxprobe
    [root@linuxprobe ~]# id linuxprobe
    uid=1000(linuxprobe) gid=1000(linuxprobe) groups=1000(linuxprobe),0(root)

再來試試用-u參數(shù)修改linuxprobe用戶的UID號碼值。除此之外,我們還可以用-g參數(shù)修改用戶的基本組ID,用-G參數(shù)修改用戶擴展組ID。

    [root@linuxprobe ~]# usermod -u 8888 linuxprobe
    [root@linuxprobe ~]# id linuxprobe
    uid=8888(linuxprobe) gid=1000(linuxprobe) groups=1000(linuxprobe),0(root)
  1. passwd命令

passwd命令用于修改用戶密碼、過期時間、認證信息等,格式為“passwd [選項] [用戶名]”。

普通用戶只能使用passwd命令修改自身的系統(tǒng)密碼,而root管理員則有權(quán)限修改其他所有人的密碼。更酷的是,root管理員在Linux系統(tǒng)中修改自己或他人的密碼時不需要驗證舊密碼,這一點特別方便。既然root管理員可以修改其他用戶的密碼,就表示完全擁有該用戶的管理權(quán)限。passwd命令中可用的參數(shù)以及作用如表5-3所示。

表5-3 passwd命令中的參數(shù)以及作用

參數(shù) 作用
-l 鎖定用戶,禁止其登錄
-u 解除鎖定,允許用戶登錄
--stdin 允許通過標(biāo)準(zhǔn)輸入修改用戶密碼,如echo "NewPassWord" | passwd --stdin Username
-d 使該用戶可用空密碼登錄系統(tǒng)
-e 強制用戶在下次登錄時修改密碼
-S 顯示用戶的密碼是否被鎖定,以及密碼所采用的加密算法名稱

接下來劉遄老師將演示如何修改用戶自己的密碼,以及如何修改其他人的密碼(修改他人密碼時,需要具有root管理員權(quán)限):

    [root@linuxprobe ~]# passwd
    Changing password for user root.
    New password:此處輸入密碼值
    Retype new password: 再次輸入進行確認
    passwd: all authentication tokens updated successfully.
    [root@linuxprobe ~]# passwd linuxprobe
    Changing password for user linuxprobe.
    New password:此處輸入密碼值
    Retype new password: 再次輸入進行確認
    passwd: all authentication tokens updated successfully.

假設(shè)您有位同事正在度假,而且假期很長,那么可以使用passwd命令禁止該用戶登錄系統(tǒng),等假期結(jié)束回歸工作崗位時,再使用該命令允許用戶登錄系統(tǒng),而不是將其刪除。這樣既保證了這段時間內(nèi)系統(tǒng)的安全,也避免了頻繁添加、刪除用戶帶來的麻煩:

    [root@linuxprobe ~]# passwd -l linuxprobe
    Locking password for user linuxprobe.
    passwd: Success
    [root@linuxprobe ~]# passwd -S linuxprobe
    linuxprobe LK 2017-12-26 0 99999 7 -1 (Password locked.)
    [root@linuxprobe ~]# passwd -u linuxprobe
    Unlocking password for user linuxprobe.
    passwd: Success
    [root@linuxprobe ~]# passwd -S linuxprobe
    linuxprobe PS 2017-12-26 0 99999 7 -1 (Password set, SHA512 crypt.)
  1. userdel命令

userdel命令用于刪除用戶,格式為“userdel [選項] 用戶名”。

如果我們確認某位用戶后續(xù)不再會登錄到系統(tǒng)中,則可以通過userdel命令刪除該用戶的所有信息。在執(zhí)行刪除操作時,該用戶的家目錄默認會保留下來,此時可以使用-r參數(shù)將其刪除。userdel命令的參數(shù)以及作用如表5-4所示。

表5-4 userdel命令的參數(shù)以及作用

參數(shù) 作用
-f 強制刪除用戶
-r 同時刪除用戶及用戶家目錄

下面使用userdel命令將linuxprobe用戶刪除,其操作如下:

    [root@linuxprobe ~]# id linuxprobe
    uid=8888(linuxprobe) gid=1000(linuxprobe) groups=1000(linuxprobe),0(root)
    [root@linuxprobe ~]# userdel -r linuxprobe
    [root@linuxprobe ~]# id linuxprobe
    id: linuxprobe: no such user
以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號