LFCS 系列第八講:管理用戶和用戶組、文件許可權和屬性以及啟用賬戶 sudo 訪問許可權
第八講: Linux 基金會認證系統管理員
請看以下視頻,裡邊將描述 LFCS 認證程序。
本講是系列教程的第八講,在這一講中,我們將引導你學習如何在 Linux 管理用戶和用戶組許可權的設置,這些內容是 LFCS 認證的必備知識。
由於 Linux 是一個多用戶的操作系統(允許多個用戶通過不同主機或者終端訪問一個獨立系統),因此你需要知道如何才能有效地管理用戶:如何添加、編輯、禁用和刪除用戶賬戶,並賦予他們足以完成自身任務的必要許可權。
(LCTT 譯註:本篇原文章節順序有誤,根據理解做了調整。)
添加用戶賬戶
添加新用戶賬戶,你需要以 root 運行以下兩條命令中的任意一條:
# adduser [new_account]
# useradd [new_account]
當新用戶賬戶添加到系統時,會自動執行以下操作:
- 自動創建用戶家目錄(默認是 /home/username)。
- 自動拷貝下列隱藏文件到新建用戶的家目錄,用來設置新用戶會話的環境變數。
.bash_logout
.bash_profile
.bashrc
- 自動創建郵件緩存目錄 /var/spool/mail/username。
- 自動創建與用戶名相同的用戶組。
理解 /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] 用戶組中的用戶使用逗號隔開。
添加用戶賬戶
修改用戶信息
添加用戶賬戶之後,你可以使用 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 命令例示
擴展閱讀
鎖定和解鎖賬戶
對於已有用戶賬戶,我們還可以:
通過鎖定密碼來禁用賬戶
使用 -L (大寫 l)或者 –lock 選項來鎖定用戶密碼。
# usermod --lock tecmint
解鎖用戶密碼
使用 –u 或者 –unlock 選項來解鎖我們之前鎖定的賬戶。
# usermod --unlock tecmint
鎖定用戶賬戶
刪除用戶賬戶
你可以通過 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 命令例示
因此,所有用戶都有許可權運行 /bin/passwd,但只有 root 用戶可以指定改變指定用戶賬戶的密碼。其他用戶只能改變其自身的密碼。
修改用戶密碼
# 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 位
給命令設置 setgid 位
理解 黏連 位
文件設置了黏連位是沒有意義,Linux 會忽略該位。如果設置到目錄上,會防止其內的文件被刪除或改名,除非你是該目錄或文件的屬主、或者是 root 用戶。
# chmod o+t [directory]
以八進位形式來設置黏連位,在當前基本許可權(或者想要設置的許可權)前加上數字 1 就行了。
# chmod 1755 [directory]
若沒有黏連位,任何有許可權讀寫目錄的用戶都可刪除和重命名其中的文件。因此,黏連位通常出現在像 /tmp 之類的目錄,這些目錄是所有人都具有寫許可權的。
給目錄設置黏連位
Linux 特殊文件屬性
文件還有其他一些屬性,用來做進一步的操作限制。比如,阻止對文件的重命名、移動、刪除甚至是修改。可以通過使用 chattr 命令 來設置,並可以使用 lsattr 工具來查看這些屬性。設置如下:
# chattr +i file1
# chattr +a file2
運行這些命令之後,file1 成為不可變狀態(即不可移動、重命名、修改或刪除),而 file2 進入「僅追加」模式(僅在追加內容模式中打開)。
通過 Chattr 命令來包含文件
訪問 root 賬戶並啟用 sudo
訪問 root 賬戶的方法之一,就是通過輸入:
$ su
然後輸入 root 賬戶密碼。
倘若授權成功,你將以 root 身份登錄,工作目錄則是登錄前所在的位置。如果是想要一登錄就自動進入 root 用戶的家目錄,請運行:
$ su -
然後輸入 root 賬戶密碼。
用戶通過 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 訪問規則
總結
對於系統管理員來說,高效能的用戶和文件管理技能是非常必要的。本文已經涵蓋了這些內容,我們希望你將這些作為一個開始,然後慢慢進步。隨時在下邊發表評論或提問,我們會儘快回應的。
via: http://www.tecmint.com/manage-users-and-groups-in-linux/
作者:Gabriel Cánepa 譯者:GHLandy 校對:wxy
本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive