標籤:des style blog http io color ar os 使用
Linux系統中,有時候普通使用者有些事情是不能做的,除非是root使用者才能做到。這時就需要用su命令臨時切換到root身份來做事了。
su:substitute[‘s?bst?tju?t]代替 user
su 的文法為:
su [OPTION選項參數] [使用者]
-, -l, --login 登入並改變到所切換的使用者環境;
-c, --commmand=COMMAND 執行一個命令,然後退出所切換到的使用者環境;
用su命令切換使用者後,可以用 exit 命令或快速鍵[Ctrl+D]可返回原登入使用者。
例子:
su 在不加任何參數,預設為切換到root使用者,但沒有轉到root使用者家目錄下,也就是說這時雖然是切換為root使用者了,但並沒有改變root登入環境;使用者預設的登入環境,可以在/etc/passwd 中查得到,包括家目錄,SHELL定義等;
su 加參數 - ,表示預設切換到root使用者,並且改變到root使用者的環境;
用su是可以切換使用者身份,如果每個普通使用者都能切換到root身份,如果某個使用者不小心泄漏了root的密碼,那豈不是系統非常的不安全?沒有錯,為了改進這個問題,產生了sudo這個命令。使用sudo執行一個root才能執行的命令是可以辦到的,但是需要輸入密碼,這個密碼並不是root的密碼而是使用者自己的密碼。預設只有root使用者能使用sudo命令,普通使用者想要使用sudo,是需要root預先設定的,即,使用visudo命令去編輯相關的設定檔/etc/sudoers。如果沒有visudo這個命令,請使用 "yum install -y sudo" 安裝。
預設root能夠sudo是因為這個檔案中有一行” root ALL=(ALL) ALL”
sudo 的適用條件:
由於su對切換到超級許可權使用者root後,許可權的無限制性,所以su並不能擔任多個管理員所管理的系統。如果用su來切換到超級使用者來管理系統,也不能明 確哪些工作是由哪個管理員進行的操作。特別是對於伺服器的管理有多人蔘與管理時,最好是針對每個管理員的技術特長和管理範圍,並且有針對性的下放給許可權, 並且約定其使用哪些工具來完成與其相關的工作,這時我們就有必要用到 sudo。
通過sudo,我們能把某些超級許可權有針對性的下放,並且不需要普通使用者知道root密碼,所以sudo 相對於許可權無限制性的su來說,還是比較安全的,所以sudo 也能被稱為受限制的su ;另外sudo 是需要授權許可的,所以也被稱為授權許可的su;
sudo 執行命令的流程:是目前使用者切換到root(或其它指定切換到的使用者),然後以root(或其它指定的切換到的使用者)身份執行命令,執行完成後,直接退回到目前使用者;而這些的前提是要通過sudo的設定檔/etc/sudoers來進行授權;
從編寫 sudo 設定檔/etc/sudoers開始
sudo的設定檔是/etc/sudoers ,我們可以用他的專用編輯工具visodu ,此工具的好處是在添加規則不太準確時,儲存退出時會提示給我們錯誤資訊;配置好後,可以用切換到您授權的使用者下,通過sudo -l 來查看哪些命令是可以執行或禁止的;
/etc/sudoers 檔案中每行算一個規則,前面帶有#號可以當作是說明的內容,並不執行;如果規則很長,一行列不下時,可以用\號來續行,這樣看來一個規則也可以擁有多個行;
/etc/sudoers 的規則可分為兩類;一類是別名定義,另一類是授權規則;別名定義並不是必須的,但授權規則是必須的;
sudo授權規則(sudoers配置):
授權使用者 主機=命令動作
這三個要素缺一不可,但在動作之前也可以指定切換到特定使用者下,在這裡指定切換的使用者要用( )號括起來,如果不要求輸入密碼直接運行命令的,應該加NOPASSWD:參數,但這些可以省略;舉例說明;
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的所有許可權
執行visudo之後,可以看見預設只有一條配置:
root ALL=(ALL) ALL
那麼你就在下邊再加一條配置:
support ALL=(ALL) ALL
這樣,普通使用者support就能夠執行root許可權的所有命令
以support使用者登入之後,執行:
sudo su -
然後輸入support使用者自己的密碼,就可以切換成root使用者了
2. 讓普通使用者support只能在某幾台伺服器上,執行root能執行的某些命令
首先需要配置一些Alias,這樣在下面配置許可權時,會方便一些,不用寫大段大段的配置。Alias主要分成4種
Host_Alias
Cmnd_Alias
User_Alias
Runas_Alias
1) 配置Host_Alias:就是主機的列表
Host_Alias HOST_FLAG = hostname1, hostname2, hostname3
2) 配置Cmnd_Alias:就是允許執行的命令的列表,命令前加上!表示不能執行此命令.
命令一定要使用絕對路徑,避免其他目錄的同名命令被執行,造成安全隱患 ,因此使用的時候也是使用絕對路徑!
Cmnd_Alias COMMAND_FLAG = command1, command2, command3 ,!command4
3) 配置User_Alias:就是具有sudo許可權的使用者的列表
User_Alias USER_FLAG = user1, user2, user3
4) 配置Runas_Alias:就是使用者以什麼身份執行(例如root,或者oracle)的列表
Runas_Alias RUNAS_FLAG = operator1, operator2, operator3
5) 配置許可權
配置許可權的格式如下:
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
- ###############################################################
參考:su sudo sudoers
http://desert3.iteye.com/blog/1663995
linux 切換使用者身份、su、sudo、/etc/sudoers