Linux中國

LFCS 系列第八講:管理用戶和用戶組、文件許可權和屬性以及啟用賬戶 sudo 訪問許可權

第八講: Linux 基金會認證系統管理員

請看以下視頻,裡邊將描述 LFCS 認證程序。

本講是系列教程的第八講,在這一講中,我們將引導你學習如何在 Linux 管理用戶和用戶組許可權的設置,這些內容是 LFCS 認證的必備知識。

由於 Linux 是一個多用戶的操作系統(允許多個用戶通過不同主機或者終端訪問一個獨立系統),因此你需要知道如何才能有效地管理用戶:如何添加、編輯、禁用和刪除用戶賬戶,並賦予他們足以完成自身任務的必要許可權。

(LCTT 譯註:本篇原文章節順序有誤,根據理解做了調整。)

添加用戶賬戶

添加新用戶賬戶,你需要以 root 運行以下兩條命令中的任意一條:

# adduser [new_account]
# useradd [new_account]

當新用戶賬戶添加到系統時,會自動執行以下操作:

  1. 自動創建用戶家目錄(默認是 /home/username)。
  2. 自動拷貝下列隱藏文件到新建用戶的家目錄,用來設置新用戶會話的環境變數。
.bash_logout
.bash_profile
.bashrc
  1. 自動創建郵件緩存目錄 /var/spool/mail/username。
  2. 自動創建與用戶名相同的用戶組。

理解 /etc/passwd 中的內容

/etc/passwd 文件中存儲了所有用戶賬戶的信息,每個用戶在裡邊都有一條對應的記錄,其格式(每個欄位用冒號隔開)如下:

[username]:[x]:[UID]:[GID]:[Comment]:[Home directory]:[Default shell]
  • 欄位 [username] 和 [Comment] 是不言自明的。
  • 第二個欄位中 x 表明通過用戶名 username 登錄系統是有密碼保護的, 密碼保存在 /etc/shadow 文件中。
  • [UID] 和 [GID] 欄位用整數表示,代表該用戶的用戶標識符和對應所在組的組標誌符。
  • 欄位 [Home directory] 為 username 用戶家目錄的絕對路徑。
  • 欄位 [Default shell] 指定用戶登錄系統時默認使用的 shell。

理解 /etc/group 中的內容

/etc/group 文件存儲所有用戶組的信息。每行記錄的格式如下:

[Group name]:[Group password]:[GID]:[Group members]
  • [Group name] 為用戶組名稱。
  • 欄位 [Group password] 為 x 的話,則說明不使用用戶組密碼。
  • [GID] 與 /etc/passwd 中保存的 GID 相同。
  • [Group members] 用戶組中的用戶使用逗號隔開。

Add User Accounts in Linux

添加用戶賬戶

修改用戶信息

添加用戶賬戶之後,你可以使用 usermod 命令來修改用戶信息中的部分欄位,該命令基本語法如下:

# usermod [options] [username]

設置賬戶的過期時間

通過 –expiredate 標記後邊接 年-月-日 格式的日期,如下:

# usermod --expiredate 2014-10-30 tecmint

將用戶添加到其他組

使用 -aG 或者 –append –groups 選項,後邊跟著用戶組,如果有多個用戶組,每個用戶組之間使用逗號隔開。

# usermod --append --groups root,users tecmint

改變用戶家目錄的默認位置

使用 -d 或者 –home 選項,後邊跟著新的家目錄的絕對路徑。

# usermod --home /tmp tecmint

改變用戶的默認 shell

使用 –shell 選項,後邊跟著新 shell 的路徑。

# usermod --shell /bin/sh tecmint

下面,我們一次運行上述命令:

# usermod --expiredate 2014-10-30 --append --groups root,users --home /tmp --shell /bin/sh tecmint

usermod Command Examples

usermod 命令例示

擴展閱讀

鎖定和解鎖賬戶

對於已有用戶賬戶,我們還可以:

通過鎖定密碼來禁用賬戶

使用 -L (大寫 l)或者 –lock 選項來鎖定用戶密碼。

# usermod --lock tecmint

解鎖用戶密碼

使用 –u 或者 –unlock 選項來解鎖我們之前鎖定的賬戶。

# usermod --unlock tecmint

Lock User in Linux

鎖定用戶賬戶

刪除用戶賬戶

你可以通過 userdel --remove 命令來刪除用戶賬戶。這樣會刪除用戶擁有的家目錄和家目錄下的所有文件,以及郵件緩存目錄。

# userdel --remove [username]

用戶組管理

每次添加新用戶,系統會為該用戶創建同名的用戶組,此時用戶組裡邊只有新建的用戶,其他用戶可以隨後添加進去。建立用戶組的目的之一,就是為了通過對指定資源設置許可權來完成對這些資源和文件進行訪問控制。

比如,你有下列用戶:

  • user1 (主組 user1)
  • user2 (主組 user2)
  • user3 (主組 user3)

他們都需要對你系統裡邊某個位置的 common.txt 文件,或者 user1 用戶剛剛創建的共享進行讀寫。你可能會運行下列命令:

# chmod 660 common.txt
或
# chmod u=rw,g=rw,o= common.txt [注意最後那個 = 號和文件名之間的空格]

然而,這樣僅僅給文件所屬的用戶和用戶組(本例為 user1)成員的提供了讀寫許可權。你還需要將 user2 和 user3 添加到 user1 組,打這樣做也將 user1 用戶和用戶組的其他文件的許可權開放給了 user2 和 user3。

這時候,用戶組就派上用場了,下面將演示怎麼做。

顯示用戶所屬的用戶組

# groups tecmint
# id tecmint

為需要對指定文件進行讀寫的多個用戶建立用戶組

運行下列幾條命令來完成:

# groupadd common_group # 添加新用戶組
# chown :common_group common.txt # 將 common.txt 的用戶組修改為 common_group
# usermod -aG common_group user1 # 添加用戶 user1 到 common_group 用戶組
# usermod -aG common_group user2 # 添加用戶 user2 到 common_group 用戶組
# usermod -aG common_group user3 # 添加用戶 user3 到 common_group 用戶組

刪除用戶組

通過以下命令刪除用戶組:

# groupdel [group_name]

屬於這個 group_name 用戶組的文件是不會被刪除的,而僅僅是刪除了用戶組。

Linux 文件許可權

除了我們在 LFCS 系列第三講:歸檔/壓縮文件及目錄、設置文件屬性和搜索文件 中說到的基本的讀取、寫入和執行許可權外,文件還有一些不常用卻很重要的的許可權設置,有時候把它當做「特殊許可權」。

就像之前我們討論的基本許可權,這裡同樣使用八進位數字或者一個字母(象徵性符號)表示該許可權類型。

理解 Setuid 位

當為可執行文件設置 setuid 位之後,用戶運行程序時會繼承該程序屬主的有效特權。由於這樣做會引起安全風險,因此設置 setuid 許可權的文件及程序必須盡量少。你會發現,當系統中有用戶需要訪問屬於 root 用戶的文件是所運行的程序就帶有了 setuid 許可權。

也就是說,用戶不僅僅可以運行這個可執行文件,而且能以 root 許可權來運行。比如,讓我們來看看 /bin/passwd 的許可權,這個可執行文件用於改變賬戶的密碼,修改 /etc/shadow 文件。超級用戶可以改變任意賬戶的密碼,但是其他用戶只能改變自己賬戶的密碼。

passwd Command Examples

passwd 命令例示

因此,所有用戶都有許可權運行 /bin/passwd,但只有 root 用戶可以指定改變指定用戶賬戶的密碼。其他用戶只能改變其自身的密碼。

Change User Password in Linux

修改用戶密碼

# chmod o+u [filename]

以八進位形式來設置 setuid 位,在當前基本許可權(或者想要設置的許可權)前加上數字 4 就行了。

# chmod 4755 [filename]

理解 Setgid 位

設置 setgid 位之後,真實用戶的有效 GID 變為屬組的 GID。因此,任何用戶都能以屬組用戶的許可權來訪問文件。另外,當目錄置了 setgid 位之後,新建的文件將繼承其所屬目錄的 GID,並且新建的子目錄會繼承父目錄的 setgid 位。通過這個方法,你能夠以一個指定的用戶組身份來訪問該目錄裡邊的文件,而不必管文件屬主的主屬組。

# chmod g+s [filename]

以八進位形式來設置 setgid 位,在當前基本許可權(或者想要設置的許可權)前加上數字 2 就行了。

# chmod 2755 [filename]

給目錄設置 Setgid 位

Add Setgid in Linux

給命令設置 setgid 位

理解 黏連 Sticky

文件設置了黏連位是沒有意義,Linux 會忽略該位。如果設置到目錄上,會防止其內的文件被刪除或改名,除非你是該目錄或文件的屬主、或者是 root 用戶。

# chmod o+t [directory]

以八進位形式來設置黏連位,在當前基本許可權(或者想要設置的許可權)前加上數字 1 就行了。

# chmod 1755 [directory]

若沒有黏連位,任何有許可權讀寫目錄的用戶都可刪除和重命名其中的文件。因此,黏連位通常出現在像 /tmp 之類的目錄,這些目錄是所有人都具有寫許可權的。

Add Stickybit in Linux

給目錄設置黏連位

Linux 特殊文件屬性

文件還有其他一些屬性,用來做進一步的操作限制。比如,阻止對文件的重命名、移動、刪除甚至是修改。可以通過使用 chattr 命令 來設置,並可以使用 lsattr 工具來查看這些屬性。設置如下:

# chattr +i file1
# chattr +a file2

運行這些命令之後,file1 成為不可變狀態(即不可移動、重命名、修改或刪除),而 file2 進入「僅追加」模式(僅在追加內容模式中打開)。

Protect File from Deletion

通過 Chattr 命令來包含文件

訪問 root 賬戶並啟用 sudo

訪問 root 賬戶的方法之一,就是通過輸入:

$ su

然後輸入 root 賬戶密碼。

倘若授權成功,你將以 root 身份登錄,工作目錄則是登錄前所在的位置。如果是想要一登錄就自動進入 root 用戶的家目錄,請運行:

$ su -

然後輸入 root 賬戶密碼。

switch user by su

用戶通過 su 切換

執行上個步驟需要普通用戶知道 root 賬戶的密碼,這樣會引起非常嚴重的安全問題。於是,系統管理員通常會配置 sudo 命令來讓普通用戶在嚴格控制的環境中以其他用戶身份(通常是 root)來執行命令。所以,可以在嚴格控制用戶的情況下,又允許他運行一條或多條特權命令。

普通用戶通過他自己的用戶密碼來完成 sudo 授權。輸入命令之後會出現輸入密碼(並不是超級用戶密碼)的提示,授權成功(只要賦予了用戶運行該命令的許可權)的話,指定的命令就會運行。

系統管理員必須編輯 /etc/sudoers 文件,才能為 sudo 賦予相應許可權。通常建議使用 visudo 命令來編輯這個文件,而不是使用文本編輯器來打開它。

# visudo

這樣會使用 vim(你可以按照 LFCS 系列第二講:如何安裝和使用純文本編輯器 vi/vim 裡邊說的來編輯文件)來打開 /etc/sudoers 文件。

以下是需要設置的相關的行:

Defaults    secure_path="/usr/sbin:/usr/bin:/sbin"
root        ALL=(ALL) ALL
tecmint     ALL=/bin/yum update
gacanepa    ALL=NOPASSWD:/bin/updatedb
%admin      ALL=(ALL) ALL

來更加深入了解這些項:

Defaults    secure_path="/usr/sbin:/usr/bin:/sbin:/usr/local/bin"

這一行指定 sudo 將要使用的目錄,這樣可以阻止使用某些用戶指定的目錄,那樣的話可能會危及系統。

下一行是用來指定許可權的:

root        ALL=(ALL) ALL
  • 第一個 ALL 關鍵詞表明這條規則適用於所有主機。
  • 第二個 ALL 關鍵詞表明第一個欄位中所指定的用戶能以任何用戶身份的許可權來運行相應命令。
  • 第三個 ALL 關鍵詞表明可以運行任何命令。
tecmint ALL=/bin/yum update

如果 = 號後邊沒有指定用戶,sudo 則默認為 root 用戶。本例中,tecmint 用戶能以 root 身份運行 yum update 命令。

gacanepa    ALL=NOPASSWD:/bin/updatedb

NOPASSWD 關鍵詞表明 gacanepa 用戶不需要密碼,可以直接運行 /bin/updatedb 命令。

%admin      ALL=(ALL) ALL

% 符號表示該行應用於 admin 用戶組。其他部分的含義與對於用戶的含義是一樣的。本例表示 admin 用戶組的成員可以通過任何主機連接來運行任何命令。

通過 sudo -l 命令可以查看,你的賬戶擁有什麼樣的許可權。

Sudo Access Rules

Sudo 訪問規則

總結

對於系統管理員來說,高效能的用戶和文件管理技能是非常必要的。本文已經涵蓋了這些內容,我們希望你將這些作為一個開始,然後慢慢進步。隨時在下邊發表評論或提問,我們會儘快回應的。

via: http://www.tecmint.com/manage-users-and-groups-in-linux/

作者:Gabriel Cánepa 譯者:GHLandy 校對:wxy

本文由 LCTT 原創翻譯,Linux中國 榮譽推出


本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive

對這篇文章感覺如何?

太棒了
0
不錯
0
愛死了
0
不太好
0
感覺很糟
0
雨落清風。心向陽

    You may also like

    Leave a reply

    您的電子郵箱地址不會被公開。 必填項已用 * 標註

    此站點使用Akismet來減少垃圾評論。了解我們如何處理您的評論數據

    More in:Linux中國