在不少狀況下, 在多人共管主機, 某些用戶請求執行某些須要 root 權限的
命令或者乾脆就是你忙不過來的時候,你就得讓其餘人得到 root 權限了。但將
系統的 root 密碼告訴不少人顯然不是一個好的選擇,這每每成爲悲劇事件的開
端。那麼咱們該如何作呢, sudo 命令給咱們提供了一個不須要 root 密碼也能執
行 root 權限命令的途徑。
sudo 命令容許規定的用戶可以以在許可範圍內以其餘用戶身份執行規定的
命令。因此, 經過 sudo 命令系統管理員能夠分配給普通用戶一些合理的「權利」,
讓他們執行一些只有 root 或其餘特許用戶才能完成的任務,好比:運行一些像
mount, halt, shutdown 之類的命令,或者編輯一些系統配置文件,像/etc/mtab,
/etc/samba/smb.conf 等。這樣以來,就不只減小了 root 用戶的登錄次數和管
理時間,也提升了系統安全性。 sudo 命令有如下特色:
sudo 命令可以限制指定用戶在指定主機上運行某些命令。
sudo 命令能夠提供日誌,忠實地記錄每一個用戶使用 sudo 命令作了些什麼,
而且能將日誌傳到中心主機或者日誌服務器。
sudo 命令爲系統管理員提供配置文件,容許系統管理員集中地管理用戶的
使用權限和使用的主機。它默認的存放位置是/etc/sudoers。
sudo 命令使用時間戳文件來完成相似「檢票」的系統。當用戶執行 sudo 命令
而且輸入密碼後,用戶得到了一張默認存活期爲 5 分鐘的「入場券」(默認值
能夠在編譯的時候改變)。超時之後,用戶必須從新輸入密碼。
A) 修改/etc/sudoers 文件
一開始系統默認僅有 root 能夠執行 sudo 命令,咱們須要經過修改
/etc/sudoers 文件來讓別的用戶也可以執行 sudo 命令。
用 vi /etc/sudoers 打開/etc/sudoers 文件,在沒有改動的狀況下文件大約
有 100 多行,在其中找到一行,以下所示:
……
## Next comes the main part: which users can run what software on
## which machines (the sudoers file can be shared between multiple
## systems).
## Syntax:
##
## user MACHINE=COMMANDS
##
## The COMMANDS section may have other options added to it.
##
## Allow root to run any commands anywhere
root ALL=(ALL) ALL #找到這一行
# 用戶 可登陸的主機=(可切換的用戶身份列表) 可以使用的命令列表
# 表示 root 用戶能夠在任何地方(遠程終端)登陸,而且以任意用戶身份執行任何命令
## Allows members of the 'sys' group to run networking, software,
## service management apps and more.
# %sys ALL = NETWORKING, SOFTWARE, SERVICES, STORAGE, DELEGATING,
PROCESSES, LOCATE, DRIVERS
……
咱們將在這行以後添加一行:
## Allow root to run any commands anywhere
root ALL=(ALL) ALL #找到這一行
intern01 ALL=(ALL) ALL #添加這行
#表示 intern01 用戶能夠在任何地方(遠程終端)登陸,以任意用戶身份執行任何命令
咱們試着用 intern01 經過 sudo 來執行一個 passwd 命令來修改 intern02 的
密碼:
[root@localhost ~]# su - intern01
[intern01@localhost ~]$ sudo –u root passwd intern02
#以 root 身份執行 passwd 命令,能夠省略 –u 選項,命令是默認轉換爲 root 身份的
We trust you have received the usual lecture from the local System
Administrator. It usually boils down to these three things:
#1) Respect the privacy of others.
#2) Think before you type.
#3) With great power comes great responsibility.
#系統給出了一些警示信息
[sudo] password for intern01: #提供 intern01 密碼便可,無需提供 root 密碼
更改用戶 intern02 的密碼 。
新的 密碼:
從新輸入新的 密碼:
passwd: 全部的身份驗證令牌已經成功更新。
事實上, 這樣就給了 intern01 幾乎等同於 root 的權限,除非你徹底信任
intern01,不然建議你不要這麼作,你能夠指定 intern01 可以執行的命令:
## Allow root to run any commands anywhere
root ALL=(ALL) ALL #找到這一行
intern01 localhost=(root) /sbin/shutdown -h -5
#表示 intern01 用戶能夠在本地登陸,以 root 用戶身份執行/sbin/shutdown -5 now 這個命
令,命令得以絕對路徑的方式指定
這樣一個一個用戶指定太過麻煩,也能夠按用戶組指定:
## Allow root to run any commands anywhere
root ALL=(ALL) ALL #找到這一行
%group_p 192.168.56.130=(root) /sbin/shutdown -h -5
#表示從屬於 group_p 用戶組的 用戶能夠在 192.168.56.130 主機上登陸,以 root 用戶身
份執行/sbin/shutdown -5 now 這個命令
事實上,咱們甚至能夠免除用戶輸入本身密碼的步驟:
## Allow root to run any commands anywhere
root ALL=(ALL) ALL #找到這一行
%group_p 192.168.56.130=(root) NOPASSWD:/sbin/shutdown -h -5
#表示從屬於 group_p 用戶組的 用戶能夠在 192.168.56.130 主機上登陸,以 root 用戶身
份執行/sbin/shutdown -5 now 這個命令,而且無需輸入用戶密碼安全
注意 雖說若是 sudo 命令容許規定的用戶可以以在許可範圍內以其餘用
戶身份執行規定的命令,可是它最常仍是用在讓普通用戶可以以 root
身份執行一些命令;
sudo 命令不帶-u 選項,默認爲切換到 root 用戶身份,也即 「sudo
fdisk 」 等價於「su –u root fdisk」