## 13.4 使用者身份切換
什么?在 Linux 系統當中還要作身份的變換?這是為啥?可能有下面幾個原因啦!
* 使用一般帳號:系統平日操作的好習慣
事實上,為了安全的緣故,一些老人家都會建議你,盡量以一般身份使用者來操作 Linux 的日常作業!等到需要設置系統環境時, 才變換身份成為 root 來進行系統管理,相對比較安全啦!避免作錯一些嚴重的指令,例如恐怖的“ rm -rf / ”(千萬作不得!)
* 用較低權限啟動系統服務
相對于系統安全,有的時候,我們必須要以某些系統帳號來進行程序的執行。 舉例來說, Linux 主機上面的一套軟件,名稱為 apache ,我們可以額外創建一個名為 apache 的使用者來啟動 apache 軟件啊,如此一來,如果這個程序被攻破,至少系統還不至于就損毀了~
* 軟件本身的限制
在遠古時代的 [telnet](http://linux.vbird.org/linux_server/0310telnetssh.php#telnet) 程序中,該程序默認是不許使用 root 的身份登陸的,telnet 會判斷登陸者的 UID, 若 UID 為 0 的話,那就直接拒絕登陸了。所以,你只能使用一般使用者來登陸 Linux 服務器。 此外, [ssh](http://linux.vbird.org/linux_server/0310telnetssh.php#ssh) [[3]](#ps3) 也可以設置拒絕 root 登陸喔!那如果你有系統設置需求該如何是好啊?就變換身份啊!
由于上述考慮,所以我們都是使用一般帳號登陸系統的,等有需要進行系統維護或軟件更新時才轉為 root 的身份來動作。 那如何讓一般使用者轉變身份成為 root 呢?主要有兩種方式喔:
* 以“ su - ”直接將身份變成 root 即可,但是這個指令卻需要 root 的密碼,也就是說,如果你要以 su 變成 root 的話,你的一般使用者就必須要有 root 的密碼才行;
* 以“ sudo 指令 ”執行 root 的指令串,由于 sudo 需要事先設置妥當,且 sudo 需要輸入使用者自己的密碼, 因此多人共管同一部主機時, sudo 要比 su 來的好喔!至少 root 密碼不會流出去!
下面我們就來說一說 su 跟 sudo 的用法啦!
### 13.4.1 su
su 是最簡單的身份切換指令了,他可以進行任何身份的切換唷!方法如下:
```
[root@study ~]# su [-lm] [-c 指令] [username]
選項與參數:
- :單純使用 - 如“ su - ”代表使用 login-shell 的變量文件讀取方式來登陸系統;
若使用者名稱沒有加上去,則代表切換為 root 的身份。
-l :與 - 類似,但后面需要加欲切換的使用者帳號!也是 login-shell 的方式。
-m :-m 與 -p 是一樣的,表示“使用目前的環境設置,而不讀取新使用者的配置文件”
-c :僅進行一次指令,所以 -c 后面可以加上指令喔!
```
上表的解釋當中有出現之前[第十章](../Text/index.html)談過的 [login-shell](../Text/index.html#settings_bashrc_shell) 配置文件讀取方式,如果你忘記那是啥東西, 請先回去第十章瞧瞧再回來吧!這個 su 的用法當中,有沒有加上那個減號“ - ”差很多喔! 因為涉及 login-shell 與 non-login shell 的變量讀取方法。這里讓我們以一個小例子來說明吧!
```
范例一:假設你原本是 dmtsai 的身份,想要使用 non-login shell 的方式變成 root
[dmtsai@study ~]$ su <==注意提示字符,是 dmtsai 的身份喔!
Password: <==這里輸入 root 的密碼喔!
[root@study dmtsai]# id <==提示字符的目錄是 dmtsai 喔!
uid=0(root) gid=0(root) groups=0(root) context=unconf.... <==確實是 root 的身份!
[root@study dmtsai]# env | grep 'dmtsai'
USER=dmtsai <==竟然還是 dmtsai 這家伙!
PATH=...:/home/dmtsai/.local/bin:/home/dmtsai/bin <==這個影響最大!
MAIL=/var/spool/mail/dmtsai <==收到的 mailbox 是 vbird1
PWD=/home/dmtsai <==并非 root 的主文件夾
LOGNAME=dmtsai
# 雖然你的 UID 已經是具有 root 的身份,但是看到上面的輸出訊息嗎?
# 還是有一堆變量為原本 dmtsai 的身份,所以很多數據還是無法直接利用。
[root@study dmtsai]# exit <==這樣可以離開 su 的環境!
```
單純使用“ su ”切換成為 root 的身份,讀取的變量設置方式為 non-login shell 的方式,這種方式很多原本的變量不會被改變, 尤其是我們之前談過很多次的 PATH 這個變量,由于沒有改變成為 root 的環境, 因此很多 root 慣用的指令就只能使用絕對路徑來執行咯。其他的還有 MAIL 這個變量,你輸入 mail 時, 收到的郵件竟然還是 dmtsai 的,而不是 root 本身的郵件!是否覺得很奇怪啊!所以切換身份時,請務必使用如下的范例二:
```
范例二:使用 login shell 的方式切換為 root 的身份并觀察變量
[dmtsai@study ~]$ su -
Password: <==這里輸入 root 的密碼喔!
[root@study ~]# env | grep root
USER=root
MAIL=/var/spool/mail/root
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
PWD=/root
HOME=/root
LOGNAME=root
# 了解差異了吧?下次變換成為 root 時,記得最好使用 su - 喔!
[root@study ~]# exit <==這樣可以離開 su 的環境!
```
上述的作法是讓使用者的身份變成 root 并開始操作系統,如果想要離開 root 的身份則得要利用 exit 離開才行。 那我如果只是想要執行“一個只有 root 才能進行的指令,且執行完畢就恢復原本的身份”呢?那就可以加上 -c 這個選項啰! 請參考下面范例三!
```
范例三:dmtsai 想要執行“ head -n 3 /etc/shadow ”一次,且已知 root 密碼
[dmtsai@study ~]$ head -n 3 /etc/shadow
head: cannot open `/etc/shadow' for reading: Permission denied
[dmtsai@study ~]$ su - -c "head -n 3 /etc/shadow"
Password: <==這里輸入 root 的密碼喔!
root:$6$wtbCCce/PxMeE5wm$KE2IfSJr.YLP7Rcai6oa/T7KFhOYO62vDnqfLw85...:16559:0:99999:7:::
bin:*:16372:0:99999:7:::
daemon:*:16372:0:99999:7:::
[dmtsai@study ~]$ <==注意看,身份還是 dmtsai 喔!繼續使用舊的身份進行系統操作!
```
由于 /etc/shadow 權限的關系,該文件僅有 root 可以查閱。為了查閱該文件,所以我們必須要使用 root 的身份工作。 但我只想要進行一次該指令而已,此時就使用類似上面的語法吧!好,那接下來,如果我是 root 或者是其他人, 想要變更成為某些特殊帳號,可以使用如下的方法來切換喔!
```
范例四:原本是 dmtsai 這個使用者,想要變換身份成為 vbird1 時?
[dmtsai@study ~]$ su -l vbird1
Password: <==這里輸入 vbird1 的密碼喔!
[vbird1@study ~]$ su -
Password: <==這里輸入 root 的密碼喔!
[root@study ~]# id sshd
uid=74(sshd) gid=74(sshd) groups=74(sshd) ... <==確實有存在此人
[root@study ~]# su -l sshd
This account is currently not available. <==竟然說此人無法切換?
[root@study ~]# finger sshd
Login: sshd Name: Privilege-separated SSH
Directory: /var/empty/sshd Shell: /sbin/nologin
[root@study ~]# exit <==離開第二次的 su
[vbird1@study ~]$ exit <==離開第一次的 su
[dmtsai@study ~]$ exit <==這才是最初的環境!
```
su 就這樣簡單的介紹完畢,總結一下他的用法是這樣的:
* 若要完整的切換到新使用者的環境,必須要使用“ su - username ”或“ su -l username ”, 才會連同 PATH/USER/MAIL 等變量都轉成新使用者的環境;
* 如果僅想要執行一次 root 的指令,可以利用“ su - -c "指令串" ”的方式來處理;
* 使用 root 切換成為任何使用者時,并不需要輸入新使用者的密碼;
雖然使用 su 很方便啦,不過缺點是,當我的主機是多人共管的環境時,如果大家都要使用 su 來切換成為 root 的身份,那么不就每個人都得要知道 root 的密碼,這樣密碼太多人知道可能會流出去, 很不妥當呢!怎辦?通過 sudo 來處理即可!
### 13.4.2 sudo
相對于 su 需要了解新切換的使用者密碼 (常常是需要 root 的密碼), sudo 的執行則僅需要自己的密碼即可! 甚至可以設置不需要密碼即可執行 sudo 呢!由于 sudo 可以讓你以其他用戶的身份執行指令 (通常是使用 root 的身份來執行指令),因此并非所有人都能夠執行 sudo , 而是僅有規范到 /etc/sudoers 內的用戶才能夠執行 sudo 這個指令喔!說的這么神奇,下面就來瞧瞧那 sudo 如何使用?

**Tips** 事實上,一般用戶能夠具有 sudo 的使用權,就是管理員事先審核通過后,才開放 sudo 的使用權的!因此,除非是信任用戶,否則一般用戶默認是不能操作 sudo 的喔!
* sudo 的指令用法
由于一開始系統默認僅有 root 可以執行 sudo ,因此下面的范例我們先以 root 的身份來執行,等到談到 visudo 時,再以一般使用者來討論其他 sudo 的用法吧! sudo 的語法如下:

**Tips** 還記得在安裝 CentOS 7 的第三章時,在設置一般帳號的項目中,有個“讓這位使用者成為管理員”的選項吧?如果你有勾選該選項的話, 那除了 root 之外,該一般用戶確實是可以使用 sudo 的喔(以鳥哥的例子來說, dmtsai 默認竟然可以使用 sudo 了!)!這是因為創建帳號的時候,默認將此用戶加入 sudo 的支持中了!詳情本章稍后告知!
```
[root@study ~]# sudo [-b] [-u 新使用者帳號]
選項與參數:
-b :將后續的指令放到背景中讓系統自行執行,而不與目前的 shell 產生影響
-u :后面可以接欲切換的使用者,若無此項則代表切換身份為 root 。
范例一:你想要以 sshd 的身份在 /tmp 下面創建一個名為 mysshd 的文件
[root@study ~]# sudo -u sshd touch /tmp/mysshd
[root@study ~]# ll /tmp/mysshd
-rw-r--r--. 1 sshd sshd 0 Jul 21 23:37 /tmp/mysshd
# 特別留意,這個文件的權限是由 sshd 所創建的情況喔!
范例二:你想要以 vbird1 的身份創建 ~vbird1/www 并于其中創建 index.html 文件
[root@study ~]# sudo -u vbird1 sh -c <u>"mkdir ~vbird1/www; cd ~vbird1/www; \</u>
> <u>echo 'This is index.html file' > index.html"</u>
[root@study ~]# ll -a ~vbird1/www
drwxr-xr-x. 2 vbird1 vbird1 23 Jul 21 23:38 .
drwx------. 6 vbird1 vbird1 4096 Jul 21 23:38 ..
-rw-r--r--. 1 vbird1 vbird1 24 Jul 21 23:38 index.html
# 要注意,創建者的身份是 vbird1 ,且我們使用 sh -c "一串指令" 來執行的!
```
sudo 可以讓你切換身份來進行某項任務,例如上面的兩個范例。范例一中,我們的 root 使用 sshd 的權限去進行某項任務! 要注意,因為我們無法使用“ su - sshd ”去切換系統帳號 (因為系統帳號的 shell 是 /sbin/nologin), 這個時候 sudo 真是他 X 的好用了!立刻以 sshd 的權限在 /tmp 下面創建文件!查閱一下文件權限你就了解意義啦! 至于范例二則更使用多重指令串 (通過分號 ; 來延續指令進行),使用 sh -c 的方法來執行一連串的指令, 如此真是好方便!
但是 sudo 默認僅有 root 能使用啊!為什么呢?因為 sudo 的執行是這樣的流程:
1. 當使用者執行 sudo 時,系統于 /etc/sudoers 文件中搜尋該使用者是否有執行 sudo 的權限;
2. 若使用者具有可執行 sudo 的權限后,便讓使用者“輸入使用者自己的密碼”來確認;
3. 若密碼輸入成功,便開始進行 sudo 后續接的指令(但 root 執行 sudo 時,不需要輸入密碼);
4. 若欲切換的身份與執行者身份相同,那也不需要輸入密碼。
所以說,sudo 執行的重點是:“能否使用 sudo 必須要看 /etc/sudoers 的設置值, 而可使用 sudo 者是通過輸入使用者自己的密碼來執行后續的指令串”喔!由于能否使用與 /etc/sudoers 有關, 所以我們當然要去編輯 sudoers 文件啦!不過,因為該文件的內容是有一定的規范的,因此直接使用 vi 去編輯是不好的。 此時,我們得要通過 visudo 去修改這個文件喔!
* visudo 與 /etc/sudoers
從上面的說明我們可以知道,除了 root 之外的其他帳號,若想要使用 sudo 執行屬于 root 的權限指令,則 root 需要先使用 visudo 去修改 /etc/sudoers ,讓該帳號能夠使用全部或部分的 root 指令功能。為什么要使用 visudo 呢?這是因為 /etc/sudoers 是有設置語法的,如果設置錯誤那會造成無法使用 sudo 指令的不良后果。因此才會使用 visudo 去修改, 并在結束離開修改畫面時,系統會去檢驗 /etc/sudoers 的語法就是了。
一般來說,visudo 的設置方式有幾種簡單的方法喔,下面我們以幾個簡單的例子來分別說明:
* I. 單一使用者可進行 root 所有指令,與 sudoers 文件語法:
假如我們要讓 vbird1 這個帳號可以使用 root 的任何指令,基本上有兩種作法,第一種是直接通過修改 /etc/sudoers ,方法如下:
```
[root@study ~]# visudo
....(前面省略)....
root ALL=(ALL) ALL <==找到這一行,大約在 98 行左右
vbird1 ALL=(ALL) ALL <==這一行是你要新增的!
....(下面省略)....
```
有趣吧!其實 visudo 只是利用 vi 將 /etc/sudoers 文件調用出來進行修改而已,所以這個文件就是 /etc/sudoers 啦! 這個文件的設置其實很簡單,如上面所示,如果你找到 98 行 (有 root 設置的那行) 左右,看到的數據就是:
```
使用者帳號 登陸者的來源主機名稱=(可切換的身份) 可下達的指令
root ALL=(ALL) ALL <==這是默認值
```
上面這一行的四個元件意義是:
1. “使用者帳號”:系統的哪個帳號可以使用 sudo 這個指令的意思;
2. “登陸者的來源主機名稱”:當這個帳號由哪部主機連線到本 Linux 主機,意思是這個帳號可能是由哪一部網絡主機連線過來的, 這個設置值可以指定用戶端計算機(信任的來源的意思)。默認值 root 可來自任何一部網絡主機
3. “(可切換的身份)”:這個帳號可以切換成什么身份來下達后續的指令,默認 root 可以切換成任何人;
4. “可下達的指令”:可用該身份下達什么指令?這個指令請務必使用絕對路徑撰寫。 默認 root 可以切換任何身份且進行任何指令之意。
那個 ALL 是特殊的關鍵字,代表任何身份、主機或指令的意思。所以,我想讓 vbird1 可以進行任何身份的任何指令, 就如同上表特殊字體寫的那樣,其實就是復制上述默認值那一行,再將 root 改成 vbird1 即可啊! 此時“vbird1 不論來自哪部主機登陸,他可以變換身份成為任何人,且可以進行系統上面的任何指令”之意。 修改完請儲存后離開 vi,并以 vbird1 登陸系統后,進行如下的測試看看:
```
[vbird1@study ~]$ tail -n 1 /etc/shadow <==注意!身份是 vbird1
tail: cannot open `/etc/shadow' for reading: Permission denied
# 因為不是 root 嘛!所以當然不能查詢 /etc/shadow
[vbird1@study ~]$ sudo tail -n 1 /etc/shadow <==通過 sudo
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 vbird1: <==注意啊!這里輸入的是“ vbird1 自己的密碼 ”
pro3:$6$DMilzaKr$OeHeTDQPHzDOz/u5Cyhq1Q1dy...:16636:0:99999:7:::
# 看!vbird1 竟然可以查詢 shadow !
```
注意到了吧!vbird1 輸入自己的密碼就能夠執行 root 的指令!所以,系統管理員當然要了解 vbird1 這個用戶的“操守”才行!否則隨便設置一個使用者,他惡搞系統怎辦?另外,一個一個設置太麻煩了, 能不能使用群組的方式來設置呢?參考下面的第二種方式吧。
* II. 利用 wheel 群組以及免密碼的功能處理 visudo
我們在本章前面曾經創建過 pro1, pro2, pro3 ,這三個用戶能否通過群組的功能讓這三個人可以管理系統? 可以的,而且很簡單!同樣我們使用實際案例來說明:
```
[root@study ~]# visudo <==同樣的,請使用 root 先設置
....(前面省略)....
%wheel ALL=(ALL) ALL <==大約在 106 行左右,請將這行的 # 拿掉!
# 在最左邊加上 % ,代表后面接的是一個“群組”之意!改完請儲存后離開
[root@study ~]# usermod -a -G wheel pro1 <==將 pro1 加入 wheel 的支持
```
上面的設置值會造成“任何加入 wheel 這個群組的使用者,就能夠使用 sudo 切換任何身份來操作任何指令”的意思。 你當然可以將 wheel 換成你自己想要的群組名。接下來,請分別切換身份成為 pro1 及 pro2 試看看 sudo 的運行。
```
[pro1@study ~]$ sudo tail -n 1 /etc/shadow <==注意身份是 pro1
....(前面省略)....
[sudo] password for pro1: <==輸入 pro1 的密碼喔!
pro3:$6$DMilzaKr$OeHeTDQPHzDOz/u5Cyhq1Q1dy...:16636:0:99999:7:::
[pro2@study ~]$ sudo tail -n 1 /etc/shadow <==注意身份是 pro2
[sudo] password for pro2: <==輸入 pro2 的密碼喔!
pro2 is not in the sudoers file. This incident will be reported.
# 仔細看錯誤訊息他是說這個 pro2 不在 /etc/sudoers 的設置中!
```
這樣理解群組了吧?如果你想要讓 pro3 也支持這個 sudo 的話,不需要重新使用 visudo ,只要利用 [usermod](../Text/index.html#usermod) 去修改 pro3 的群組支持,讓 pro3 用戶加入 wheel 群組當中,那他就能夠進行 sudo 啰! 好了!那么現在你知道為啥在安裝時創建的用戶,就是那個 dmstai 默認可以使用 sudo 了嗎?請使用“ id dmtsai ”看看, 這個用戶是否有加入 wheel 群組呢?嘿嘿!了解乎?

**Tips** 從 CentOS 7 開始,在 sudoers 文件中,默認已經開放 %wheel 那一行啰!以前的 CentOS 舊版本都是沒有啟用的呢!
簡單吧!不過,既然我們都信任這些 sudo 的用戶了,能否提供“不需要密碼即可使用 sudo ”呢? 就通過如下的方式:
```
[root@study ~]# visudo <==同樣的,請使用 root 先設置
....(前面省略)....
%wheel ALL=(ALL) NOPASSWD: ALL <==大約在 109 行左右,請將 # 拿掉!
# 在最左邊加上 % ,代表后面接的是一個“群組”之意!改完請儲存后離開
```
重點是那個 NOPASSWD 啦!該關鍵字是免除密碼輸入的意思喔!
* III. 有限制的指令操作:
上面兩點都會讓使用者能夠利用 root 的身份進行任何事情!這樣總是不太好~如果我想要讓使用者僅能夠進行部分系統任務, 比方說,系統上面的 myuser1 僅能夠幫 root 修改其他使用者的密碼時,亦即“當使用者僅能使用 passwd 這個指令幫忙 root 修改其他用戶的密碼”時,你該如何撰寫呢?可以這樣做:
```
[root@study ~]# visudo <==注意是 root 身份
myuser1 ALL=(root) /usr/bin/passwd <==最后指令務必用絕對路徑
```
上面的設置值指的是“myuser1 可以切換成為 root 使用 passwd 這個指令”的意思。其中要注意的是: 指令字段必須要填寫絕對路徑才行!否則 visudo 會出現語法錯誤的狀況發生! 此外,上面的設置是有問題的!我們使用下面的指令操作來讓您了解:
```
[myuser1@study ~]$ sudo passwd myuser3 <==注意,身份是 myuser1
[sudo] password for myuser1: <==輸入 myuser1 的密碼
Changing password for user myuser3\. <==下面改的是 myuser3 的密碼喔!這樣是正確的
New password:
Retype new password:
passwd: all authentication tokens updated successfully.
[myuser1@study ~]$ sudo passwd
Changing password for user root. <==見鬼!怎么會去改 root 的密碼?
```
恐怖啊!我們竟然讓 root 的密碼被 myuser1 給改變了!下次 root 回來竟無法登陸系統...欲哭無淚~怎辦? 所以我們必須要限制使用者的指令參數!修改的方法為將上述的那行改一改先:
```
[root@study ~]# visudo <==注意是 root 身份
myuser1 ALL=(root) !/usr/bin/passwd, /usr/bin/passwd [A-Za-z]*, !/usr/bin/passwd root
```
在設置值中加上驚嘆號“ ! ”代表“不可執行”的意思。因此上面這一行會變成:可以執行“ passwd 任意字符”,但是“ passwd ”與“ passwd root ”這兩個指令例外! 如此一來 myuser1 就無法改變 root 的密碼了!這樣這位使用者可以具有 root 的能力幫助你修改其他用戶的密碼, 而且也不能隨意改變 root 的密碼!很有用處的!
* IV. 通過別名創建 visudo:
如上述第三點,如果我有 15 個用戶需要加入剛剛的管理員行列,那么我是否要將上述那長長的設置寫入 15 行啊? 而且如果想要修改命令或者是新增命令時,那我每行都需要重新設置,很麻煩ㄟ!有沒有更簡單的方式? 是有的!通過別名即可!我們 visudo 的別名可以是“指令別名、帳號別名、主機別名”等。不過這里我們僅介紹帳號別名, 其他的設置值有興趣的話,可以自行玩玩!
假設我的 pro1, pro2, pro3 與 myuser1, myuser2 要加入上述的密碼管理員的 sudo 列表中, 那我可以創立一個帳號別名稱為 ADMPW 的名稱,然后將這個名稱處理一下即可。處理的方式如下:
```
[root@study ~]# visudo <==注意是 root 身份
User_Alias ADMPW = pro1, pro2, pro3, myuser1, myuser2
Cmnd_Alias ADMPWCOM = !/usr/bin/passwd, /usr/bin/passwd [A-Za-z]*, !/usr/bin/passwd root
ADMPW ALL=(root) ADMPWCOM
```
我通過 User_Alias 創建出一個新帳號,這個帳號名稱一定要使用大寫字符來處理,包括 Cmnd_Alias(命令別名)、Host_Alias(來源主機名稱別名) 都需要使用大寫字符的!這個 ADMPW 代表后面接的那些實際帳號。 而該帳號能夠進行的指令就如同 ADMPWCOM 后面所指定的那樣!上表最后一行則寫入這兩個別名 (帳號與指令別名), 未來要修改時,我只要修改 User_Alias 以及 Cmnd_Alias 這兩行即可!設置方面會比較簡單有彈性喔!
* V. sudo 的時間間隔問題:
或許您已經發現了,那就是,如果我使用同一個帳號在短時間內重復操作 sudo 來運行指令的話, 在第二次執行 sudo 時,并不需要輸入自己的密碼!sudo 還是會正確的運行喔!為什么呢? 第一次執行 sudo 需要輸入密碼,是擔心由于使用者暫時離開座位,但有人跑來你的座位使用你的帳號操作系統之故。 所以需要你輸入一次密碼重新確認一次身份。
兩次執行 sudo 的間隔在五分鐘內,那么再次執行 sudo 時就不需要再次輸入密碼了, 這是因為系統相信你在五分鐘內不會離開你的作業,所以執行 sudo 的是同一個人!呼呼!真是很人性化的設計啊~ ^_^。不過如果兩次 sudo 操作的間隔超過 5 分鐘,那就得要重新輸入一次你的密碼了 [[4]](#ps4)
* VI. sudo 搭配 su 的使用方式:
很多時候我們需要大量執行很多 root 的工作,所以一直使用 sudo 覺得很煩ㄟ!那有沒有辦法使用 sudo 搭配 su , 一口氣將身份轉為 root ,而且還用使用者自己的密碼來變成 root 呢?是有的!而且方法簡單的會讓你想笑! 我們創建一個 ADMINS 帳號別名,然后這樣做:
```
[root@study ~]# visudo
User_Alias ADMINS = pro1, pro2, pro3, myuser1
ADMINS ALL=(root) /bin/su -
```
接下來,上述的 pro1, pro2, pro3, myuser1 這四個人,只要輸入“ sudo su - ”并且輸入“自己的密碼”后, 立刻變成 root 的身份!不但 root 密碼不會外流,使用者的管理也變的非常方便! 這也是實務上面多人共管一部主機時常常使用的技巧呢!這樣管理確實方便,不過還是要強調一下大前提, 那就是“這些你加入的使用者,全部都是你能夠信任的用戶”!
- 鳥哥的Linux私房菜:基礎學習篇 第四版
- 目錄及概述
- 第零章、計算機概論
- 0.1 電腦:輔助人腦的好工具
- 0.2 個人電腦架構與相關設備元件
- 0.3 數據表示方式
- 0.4 軟件程序運行
- 0.5 重點回顧
- 0.6 本章習題
- 0.7 參考資料與延伸閱讀
- 第一章、Linux是什么與如何學習
- 1.1 Linux是什么
- 1.2 Torvalds的Linux發展
- 1.3 Linux當前應用的角色
- 1.4 Linux 該如何學習
- 1.5 重點回顧
- 1.6 本章習題
- 1.7 參考資料與延伸閱讀
- 第二章、主機規劃與磁盤分區
- 2.1 Linux與硬件的搭配
- 2.2 磁盤分區
- 2.3 安裝Linux前的規劃
- 2.4 重點回顧
- 2.5 本章習題
- 2.6 參考資料與延伸閱讀
- 第三章、安裝 CentOS7.x
- 3.1 本練習機的規劃--尤其是分區參數
- 3.2 開始安裝CentOS 7
- 3.3 多重開機安裝流程與管理(Option)
- 3.4 重點回顧
- 3.5 本章習題
- 3.6 參考資料與延伸閱讀
- 第四章、首次登陸與線上求助
- 4.1 首次登陸系統
- 4.2 文字模式下指令的下達
- 4.3 Linux系統的線上求助man page與info page
- 4.4 超簡單文書編輯器: nano
- 4.5 正確的關機方法
- 4.6 重點回顧
- 4.7 本章習題
- 4.8 參考資料與延伸閱讀
- 第五章、Linux 的文件權限與目錄配置
- 5.1 使用者與群組
- 5.2 Linux 文件權限概念
- 5.3 Linux目錄配置
- 5.4 重點回顧
- 5.5 本章練習
- 5.6 參考資料與延伸閱讀
- 第六章、Linux 文件與目錄管理
- 6.1 目錄與路徑
- 6.2 文件與目錄管理
- 6.3 文件內容查閱
- 6.4 文件與目錄的默認權限與隱藏權限
- 6.5 指令與文件的搜尋
- 6.6 極重要的復習!權限與指令間的關系
- 6.7 重點回顧
- 6.8 本章習題:
- 6.9 參考資料與延伸閱讀
- 第七章、Linux 磁盤與文件系統管理
- 7.1 認識 Linux 文件系統
- 7.2 文件系統的簡單操作
- 7.3 磁盤的分區、格式化、檢驗與掛載
- 7.4 設置開機掛載
- 7.5 內存交換空間(swap)之創建
- 7.6 文件系統的特殊觀察與操作
- 7.7 重點回顧
- 7.8 本章習題 - 第一題一定要做
- 7.9 參考資料與延伸閱讀
- 第八章、文件與文件系統的壓縮,打包與備份
- 8.1 壓縮文件的用途與技術
- 8.2 Linux 系統常見的壓縮指令
- 8.3 打包指令: tar
- 8.4 XFS 文件系統的備份與還原
- 8.5 光盤寫入工具
- 8.6 其他常見的壓縮與備份工具
- 8.7 重點回顧
- 8.8 本章習題
- 8.9 參考資料與延伸閱讀
- 第九章、vim 程序編輯器
- 9.1 vi 與 vim
- 9.2 vi 的使用
- 9.3 vim 的額外功能
- 9.4 其他 vim 使用注意事項
- 9.5 重點回顧
- 9.6 本章練習
- 9.7 參考資料與延伸閱讀
- 第十章、認識與學習BASH
- 10.1 認識 BASH 這個 Shell
- 10.2 Shell 的變量功能
- 10.3 命令別名與歷史命令
- 10.4 Bash Shell 的操作環境:
- 10.5 數據流重導向
- 10.6 管線命令 (pipe)
- 10.7 重點回顧
- 10.8 本章習題
- 10.9 參考資料與延伸閱讀
- 第十一章、正則表達式與文件格式化處理
- 11.1 開始之前:什么是正則表達式
- 11.2 基礎正則表達式
- 11.3 延伸正則表達式
- 11.4 文件的格式化與相關處理
- 11.5 重點回顧
- 11.6 本章習題
- 11.7 參考資料與延伸閱讀
- 第十二章、學習 Shell Scripts
- 12.1 什么是 Shell scripts
- 12.2 簡單的 shell script 練習
- 12.3 善用判斷式
- 12.4 條件判斷式
- 12.5 循環 (loop)
- 12.6 shell script 的追蹤與 debug
- 12.7 重點回顧
- 12.8 本章習題
- 第十三章、Linux 帳號管理與 ACL 權限設置
- 13.1 Linux 的帳號與群組
- 13.2 帳號管理
- 13.3 主機的細部權限規劃:ACL 的使用
- 13.4 使用者身份切換
- 13.5 使用者的特殊 shell 與 PAM 模塊
- 13.6 Linux 主機上的使用者訊息傳遞
- 13.7 CentOS 7 環境下大量創建帳號的方法
- 13.8 重點回顧
- 13.9 本章習題
- 13.10 參考資料與延伸閱讀
- 第十四章、磁盤配額(Quota)與進階文件系統管理
- 14.1 磁盤配額 (Quota) 的應用與實作
- 14.2 軟件磁盤陣列 (Software RAID)
- 14.3 邏輯卷軸管理員 (Logical Volume Manager)
- 14.4 重點回顧
- 14.5 本章習題
- 14.6 參考資料與延伸閱讀
- 第十五章、例行性工作調度(crontab)
- 15.1 什么是例行性工作調度
- 15.2 僅執行一次的工作調度
- 15.3 循環執行的例行性工作調度
- 15.4 可喚醒停機期間的工作任務
- 15.5 重點回顧
- 15.6 本章習題
- 第十六章、程序管理與 SELinux 初探
- 16.1 什么是程序 (process)
- 16.2 工作管理 (job control)
- 16.3 程序管理
- 16.4 特殊文件與程序
- 16.5 SELinux 初探
- 16.6 重點回顧
- 16.7 本章習題
- 16.8 參考資料與延伸閱讀
- 第十七章、認識系統服務 (daemons)
- 17.1 什么是 daemon 與服務 (service)
- 17.2 通過 systemctl 管理服務
- 17.3 systemctl 針對 service 類型的配置文件
- 17.4 systemctl 針對 timer 的配置文件
- 17.5 CentOS 7.x 默認啟動的服務簡易說明
- 17.6 重點回顧
- 17.7 本章習題
- 17.8 參考資料與延伸閱讀
- 第十八章、認識與分析登錄文件
- 18.1 什么是登錄文件
- 18.2 rsyslog.service :記錄登錄文件的服務
- 18.3 登錄文件的輪替(logrotate)
- 18.4 systemd-journald.service 簡介
- 18.5 分析登錄文件
- 18.6 重點回顧
- 18.7 本章習題
- 18.8 參考資料與延伸閱讀
- 第十九章、開機流程、模塊管理與 Loader
- 19.1 Linux 的開機流程分析
- 19.2 核心與核心模塊
- 19.3 Boot Loader: Grub2
- 19.4 開機過程的問題解決
- 19.5 重點回顧
- 19.6 本章習題
- 19.7 參考資料與延伸閱讀
- 第二十章、基礎系統設置與備份策略
- 20.1 系統基本設置
- 20.2 服務器硬件數據的收集
- 20.3 備份要點
- 20.4 備份的種類、頻率與工具的選擇
- 20.5 鳥哥的備份策略
- 20.6 災難復原的考慮
- 20.7 重點回顧
- 20.8 本章習題
- 20.9 參考資料與延伸閱讀
- 第二十一章、軟件安裝:源代碼與 Tarball
- 20.1 開放源碼的軟件安裝與升級簡介
- 21.2 使用傳統程序語言進行編譯的簡單范例
- 21.3 用 make 進行宏編譯
- 21.4 Tarball 的管理與建議
- 21.5 函數庫管理
- 21.6 檢驗軟件正確性
- 21.7 重點回顧
- 21.8 本章習題
- 21.9 參考資料與延伸閱讀
- 第二十二章、軟件安裝 RPM, SRPM 與 YUM
- 22.1 軟件管理員簡介
- 22.2 RPM 軟件管理程序: rpm
- 22.3 YUM 線上升級機制
- 22.4 SRPM 的使用 : rpmbuild (Optional)
- 22.5 重點回顧
- 22.6 本章習題
- 22.7 參考資料與延伸閱讀
- 第二十三章、X Window 設置介紹
- 23.1 什么是 X Window System
- 23.2 X Server 配置文件解析與設置
- 23.3 顯卡驅動程序安裝范例
- 23.4 重點回顧
- 23.5 本章習題
- 23.6 參考資料與延伸閱讀
- 第二十四章、Linux 核心編譯與管理
- 24.1 編譯前的任務:認識核心與取得核心源代碼
- 24.2 核心編譯的前處理與核心功能選擇
- 24.3 核心的編譯與安裝
- 24.4 額外(單一)核心模塊編譯
- 24.5 以最新核心版本編譯 CentOS 7.x 的核心
- 24.6 重點回顧
- 24.7 本章習題
- 24.8 參考資料與延伸閱讀