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