使用者身份切換:
這裡有個很有趣的問題要來跟大家分享一下,還記得在古老的年代裡面,還沒有 ssh 的時候,我們都是使用 telnet 登入系統的,偏偏系統預設是不開啟 root 以 telnet 登入,那麼好了!我們要怎樣遠端操控我們的 Linux 主機呀!?因為由前面的介紹我們不難發現,系統當中最特殊的帳號就是 UID 為 0 的使用者了,他具有至高無上的權力!而且是系統管理員必須要具備的身份,否則怎樣操控主機呢?您說是吧!好了,那麼 telnet 將 root 的登入權限關掉了,而如果我們在製作一個使用者,並將其 UID 變為 0 的話又如何?嘿嘿!很抱歉, telnet 就是認 UID 的,所以肯定還是進不了系統,這個時候要怎麼辦呀!?就是變換身份呀!將一般使用者的身份變成了 root 就行了!
但是怎樣變換身份呀?怎麼說呢?就是說,一般而言,我們都不希望以 root 的身份登入主機,以避免被怪客入侵了!但是一部主機又不可能完全不進行修補或者是設定等動作!這個時候要如何將一般使用者的身份變成 root 呢?主要有兩種方式,分別是: • 以 su 直接將身份變成 root 即可,但是這個指令卻需要 root 的密碼,也就是說,如果你要以 su 變成 root 的話,你的一般使用者就必須要有 root 的密碼才行;
• 所以當有很多人同時管理一部主機的時候,那麼 root 的密碼不就很多人知道了?不是很好吧?所以,如果不想要將 root 的密碼流出去呢?呵呵!可以使用 sudo 來進行工作呦!
底下我們就來說一說 su 跟 sudo 的用法啦!
• su
語法:
[root @test /root ]# su
參數說明:
範例:
[test@test test]$ su
Password: <==輸入 root 的密碼
[root@test test]# <==身份變成 root 了!
[test@test test]$ su - <==連環境參數檔案都是讀取 root 的!
[root@test root]# su test <==將 root 的身份改為 test ,且不需要輸入密碼喔!
說明:
這個指令很有用呦!這是用來將『一般身份轉換成 super user 』的指令!通常為了安全的考量, telnet 與 ssh 盡量不要以 root 的身份來登入!但是有時後我們又要在外頭以 root 的身份來修改系統設定,這個時候 su 就很有用了!su 的使用真的很簡單,輸入 su 之後,直接給他輸入 root 的密碼,此時您就是 root 了!但是需要特別留意的是: • 雖然您已經是 root 的身份,但是您的環境當中,還是屬於當初登入的那個使用者!例如我以 test 登入 Linux ,再以 su 切換身份成為 root ,但是我的 mail, PATH 及其他一些相關的環境變數,都還是 test 這個身份呢!
• 至於環境變數當中,最麻煩的當屬 PATH 這個東西,因為為了避免一般使用者使用了 root 的管理指令,所以通常 Linux 都會將指令分類放在兩個主要的目錄,分別是 /bin 與 /sbin !那個 /sbin 大多是 super user 就是 root 用來管理系統的指令啦!所以,可能的話,將 test 的 PATH 重新設定成為 root 的 PATH ,這樣也比較方便呀!
• 如果要全部的環境變數均使用 root 的設定檔,這個時候必需使用『 su - 』來下達命令喔!
此外, su 也可以將您的身份轉換成為其他身份的使用者,而,如果您是 root ,那麼轉換為其他身份的使用者,將不需要輸入密碼喔!很過癮吧!例如上面的最後一個例子!
• sudo
語法:
[root @test /root ]# sudo [-u username] [command]
參數說明:
-u :將身份變成 username 的身份
範例:
[test@test test]$ sudo mkdir /root/testing
Password: <==輸入 test 自己的密碼
[root@test test]$ sudo -u test touch test <==root 可以執行 test 這個使用者的指令,建立 test 的檔案!
說明: • 如果單純的使用 su 來變換成 root 的身份,最大的好處是可以直接下達我們慣用的指令,但是,還是會有問題的,就是如果主機是由多人共管的時候,由於所有的人都必須要知道 root 的密碼,如此一來,呵呵!很麻煩的啦!因為怕被入侵嘛!而且只要 root 改變了密碼,那麼所有人都必需要通知一次!很麻煩,加上,如果管理群中的一個人不小心洩出了 root 的密碼,不就完蛋了??那麼有沒有可以不需要 root 的密碼,卻還是可以執行 root 的工具呢?呵呵!這個時候就有 sudo 的出現了!
• sudo 的基本語法就是在 sudo 後頭直接加上指令,例如上面的例子中, mkdir /root/testing 就是命令啦!那麼就可以來執行 root 身份可以動作的事情!此外,由於執行 root 身份的工作時,『輸入的密碼是使用者的密碼,而不是 root 的密碼,所以可以減少 root 密碼外流的問題!』如此 root 的密碼將不會流出去了!但是 sudo 在使用的時候請小心,就是要在 /etc/sudoers 裡頭設定該有的事項!在預設情況下,只有 root 才能使用 sudo !那有什麼用!我們是一般使用者,想要使用的是 sudo 來變成 root 的身份呀!呵呵!沒關係!可以使用 visudo 來編輯 /etc/sudoers 這個檔案即可!在 Mandrake 9.0 與 Red Hat 的 Linux 版本之的預設情況中,使用『 visudo 』才能編輯 /etc/sudoers 這個檔案,此外,編輯者的身份必須要 root 才行!如何編輯呢?在預設的情況中,我們會希望將可以執行 root 動作的人的 group 設定為 wheel ,然後:
[root@est /root]# visudo
# sudoers file.
#
# This file MUST be edited with the 'visudo' command as root.
#
# See the sudoers man page for the details on how to write a sudoers file.
#
# Host alias specification
# User alias specification
# Cmnd alias specification
# Defaults specification
# User privilege specification
root ALL=(ALL) ALL
test ALL=(ALL) ALL <==這一行可以加入,使 test 這個人可以使用 sudo
# Uncomment to allow people in group wheel to run all commands
# %wheel ALL=(ALL) ALL <==將這一行註解符號取消
# Same thing without a password
# %wheel ALL=(ALL) NOPASSWD: ALL
# Samples
# %users ALL=/sbin/mount /cdrom,/sbin/umount /cdrom
# %users localhost=/sbin/shutdown -h now
如果如同上面的方式,將黃色字體那一行 /etc/sudoers 裡頭將
『 # %wheel ALL=(ALL) ALL』
這一行的註解符號取消,如此一來,則群組為 wheel 的人就可以進行 root 的身份工作!這個 wheel 是系統預設的 group 呢!因此,如果您想要讓這部主機裡頭的一般身份使用者具有 sudo 的使用權限,那麼您就必需將該 user 放入支援 wheel 這個群組裡頭!如何加入?呵呵!剛剛上面不是介紹了 /etc/group 嗎?趕緊去看看!那麼萬一我想要讓『單獨的個人可以使用 sudo 的功能』呢?呵呵!那就直接以 visudo 加上這一行
『test ALL=(ALL) ALL』
即可!那麼 test 即可使用 sudo 的功能囉!很簡單吧!但是請記得不要以 vi 直接修改 sudoers 呦!會有問題!• sudo 除了變成 root 的功能之外!嘿嘿!他還可以變成『任何人』的功能呦!舉個簡單的例子來說好了,我們都知道啟動程序的時候最好不要使用 root 來啟動,因為如此一來當該程序被接管時,接管者(或者說是入侵者)將擁有 root 的權限了!所以近來我們都希望不要以 root 來啟動一些程序啦!會比較安全!那麼我們要以 root 來啟動成為 test (例如常用的 nobody 這個帳號)要如何作?很簡單,就使用上面的第二個例子來看:
sudo -u test touch test
root 可以改變身份成為 test 來建立檔案!嘿嘿!還不需要輸入密碼!很棒吧!這個動作我曾經在 squid 這個執行程序上面做過,這樣一來,即使我的 squid 被利用了,那麼該怪客只能擁有 nobody 的權限,嘿嘿!該權限是很小很小的!所以可以達到保護主機的部分功能呦!
文章來源:鳥哥網站
留言列表