Linux系統(tǒng)中,有時候普通用戶有些事情是不能做的,除非是root用戶才能做到。這時就需要用su命令臨時切換到root身份來做事了。
su:substitute['s?bst?tju?t]代替 user
su 的語法為:
su [OPTION選項參數(shù)] [用戶]
-, -l, --login 登錄并改變到所切換的用戶環(huán)境;
-c, --commmand=COMMAND 執(zhí)行一個命令,然后退出所切換到的用戶環(huán)境;
用su命令切換用戶后,可以用 exit 命令或快捷鍵[Ctrl+D]可返回原登錄用戶。
例子:
su 在不加任何參數(shù),默認(rèn)為切換到root用戶,但沒有轉(zhuǎn)到root用戶家目錄下,也就是說這時雖然是切換為root用戶了,但并沒有改變root登錄環(huán)境;用戶默認(rèn)的登錄環(huán)境,可以在/etc/passwd 中查得到,包括家目錄,SHELL定義等;
su 加參數(shù) - ,表示默認(rèn)切換到root用戶,并且改變到root用戶的環(huán)境;
用su是可以切換用戶身份,如果每個普通用戶都能切換到root身份,如果某個用戶不小心泄漏了root的密碼,那豈不是系統(tǒng)非常的不安全?沒有錯,為了改進(jìn)這個問題,產(chǎn)生了sudo這個命令。使用sudo執(zhí)行一個root才能執(zhí)行的命令是可以辦到的,但是需要輸入密碼,這個密碼并不是root的密碼而是用戶自己的密碼。默認(rèn)只有root用戶能使用sudo命令,普通用戶想要使用sudo,是需要root預(yù)先設(shè)定的,即,使用visudo命令去編輯相關(guān)的配置文件/etc/sudoers。如果沒有visudo這個命令,請使用 "yum install -y sudo" 安裝。
默認(rèn)root能夠sudo是因為這個文件中有一行” root ALL=(ALL) ALL”
sudo 的適用條件:
由于su對切換到超級權(quán)限用戶root后,權(quán)限的無限制性,所以su并不能擔(dān)任多個管理員所管理的系統(tǒng)。如果用su來切換到超級用戶來管理系統(tǒng),也不能明 確哪些工作是由哪個管理員進(jìn)行的操作。特別是對于服務(wù)器的管理有多人參與管理時,最好是針對每個管理員的技術(shù)特長和管理范圍,并且有針對性的下放給權(quán)限, 并且約定其使用哪些工具來完成與其相關(guān)的工作,這時我們就有必要用到 sudo。
通過sudo,我們能把某些超級權(quán)限有針對性的下放,并且不需要普通用戶知道root密碼,所以sudo 相對于權(quán)限無限制性的su來說,還是比較安全的,所以sudo 也能被稱為受限制的su ;另外sudo 是需要授權(quán)許可的,所以也被稱為授權(quán)許可的su;
sudo 執(zhí)行命令的流程:是當(dāng)前用戶切換到root(或其它指定切換到的用戶),然后以root(或其它指定的切換到的用戶)身份執(zhí)行命令,執(zhí)行完成后,直接退回到當(dāng)前用戶;而這些的前提是要通過sudo的配置文件/etc/sudoers來進(jìn)行授權(quán);
從編寫 sudo 配置文件/etc/sudoers開始
sudo的配置文件是/etc/sudoers ,我們可以用他的專用編輯工具visodu ,此工具的好處是在添加規(guī)則不太準(zhǔn)確時,保存退出時會提示給我們錯誤信息;配置好后,可以用切換到您授權(quán)的用戶下,通過sudo -l 來查看哪些命令是可以執(zhí)行或禁止的;
/etc/sudoers 文件中每行算一個規(guī)則,前面帶有#號可以當(dāng)作是說明的內(nèi)容,并不執(zhí)行;如果規(guī)則很長,一行列不下時,可以用\號來續(xù)行,這樣看來一個規(guī)則也可以擁有多個行;
/etc/sudoers 的規(guī)則可分為兩類;一類是別名定義,另一類是授權(quán)規(guī)則;別名定義并不是必須的,但授權(quán)規(guī)則是必須的;
sudo授權(quán)規(guī)則(sudoers配置):
授權(quán)用戶 主機(jī)=命令動作
這三個要素缺一不可,但在動作之前也可以指定切換到特定用戶下,在這里指定切換的用戶要用( )號括起來,如果不需要密碼直接運行命令的,應(yīng)該加NOPASSWD:參數(shù),但這些可以省略;舉例說明;
sudoers的缺省配置:
Html代碼 收藏代碼
#############################################################
# 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
# 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
##################################################################
1. 最簡單的配置,讓普通用戶support具有root的所有權(quán)限
執(zhí)行visudo之后,可以看見缺省只有一條配置:
root ALL=(ALL) ALL
那么你就在下邊再加一條配置:
support ALL=(ALL) ALL
這樣,普通用戶support就能夠執(zhí)行root權(quán)限的所有命令
以support用戶登錄之后,執(zhí)行:
sudo su -
然后輸入support用戶自己的密碼,就可以切換成root用戶了
2. 讓普通用戶support只能在某幾臺服務(wù)器上,執(zhí)行root能執(zhí)行的某些命令
首先需要配置一些Alias,這樣在下面配置權(quán)限時,會方便一些,不用寫大段大段的配置。Alias主要分成4種
Host_Alias
Cmnd_Alias
User_Alias
Runas_Alias
1) 配置Host_Alias:就是主機(jī)的列表
Host_Alias HOST_FLAG = hostname1, hostname2, hostname3
2) 配置Cmnd_Alias:就是允許執(zhí)行的命令的列表,命令前加上!表示不能執(zhí)行此命令.
命令一定要使用絕對路徑,避免其他目錄的同名命令被執(zhí)行,造成安全隱患 ,因此使用的時候也是使用絕對路徑!
Cmnd_Alias COMMAND_FLAG = command1, command2, command3 ,!command4
3) 配置User_Alias:就是具有sudo權(quán)限的用戶的列表
User_Alias USER_FLAG = user1, user2, user3
4) 配置Runas_Alias:就是用戶以什么身份執(zhí)行(例如root,或者oracle)的列表
Runas_Alias RUNAS_FLAG = operator1, operator2, operator3
5) 配置權(quán)限
配置權(quán)限的格式如下:
USER_FLAG HOST_FLAG=(RUNAS_FLAG) COMMAND_FLAG
如果不需要密碼驗證的話,則按照這樣的格式來配置
USER_FLAG HOST_FLAG=(RUNAS_FLAG) NOPASSWD: COMMAND_FLAG
配置示例:
Html代碼 收藏代碼
############################################################################
# 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
Host_Alias EPG = 192.168.1.1, 192.168.1.2
# User alias specification
# Cmnd alias specification
Cmnd_Alias SQUID = /opt/vtbin/squid_refresh, !/sbin/service, /bin/rm
Cmnd_Alias ADMPW = /usr/bin/passwd [A-Za-z]*, !/usr/bin/passwd, !/usr/bin/passwd root
# Defaults specification
# User privilege specification
root ALL=(ALL) ALL
support EPG=(ALL) NOPASSWD: SQUID
support EPG=(ALL) NOPASSWD: ADMPW
# 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
###############################################################