linux 切換使用者身份、su、sudo、/etc/sudoers

來源:互聯網
上載者:User

標籤: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代碼  
  1. #############################################################   
  2. # sudoers file.   
  3. #   
  4. # This file MUST be edited with the ‘visudo‘ command as root.   
  5. #   
  6. # See the sudoers man page for the details on how to write a sudoers file.   
  7. #   
  8. # Host alias specification   
  9. # User alias specification   
  10. # Cmnd alias specification   
  11. # Defaults specification   
  12. # User privilege specification   
  13. root    ALL=(ALL) ALL   
  14. # Uncomment to allow people in group wheel to run all commands   
  15. # %wheel        ALL=(ALL)       ALL   
  16. # Same thing without a password   
  17. # %wheel        ALL=(ALL)       NOPASSWD: ALL   
  18. # Samples   
  19. # %users  ALL=/sbin/mount /cdrom,/sbin/umount /cdrom   
  20. # %users  localhost=/sbin/shutdown -h now   
  21. ##################################################################   


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代碼  
  1. ############################################################################   
  2. # sudoers file.   
  3. #   
  4. # This file MUST be edited with the ‘visudo‘ command as root.   
  5. #   
  6. # See the sudoers man page for the details on how to write a sudoers file.   
  7. #   
  8. # Host alias specification   
  9. Host_Alias      EPG = 192.168.1.1, 192.168.1.2   
  10. # User alias specification   
  11. # Cmnd alias specification   
  12. Cmnd_Alias      SQUID = /opt/vtbin/squid_refresh, !/sbin/service, /bin/rm  
  13.   
  14. Cmnd_Alias      ADMPW = /usr/bin/passwd [A-Za-z]*, !/usr/bin/passwd, !/usr/bin/passwd root   
  15. # Defaults specification   
  16. # User privilege specification   
  17. root    ALL=(ALL) ALL   
  18. support EPG=(ALL) NOPASSWD: SQUID   
  19. support EPG=(ALL) NOPASSWD: ADMPW  
  20. # Uncomment to allow people in group wheel to run all commands   
  21. # %wheel        ALL=(ALL)       ALL   
  22. # Same thing without a password   
  23. # %wheel        ALL=(ALL)       NOPASSWD: ALL   
  24. # Samples   
  25. # %users  ALL=/sbin/mount /cdrom,/sbin/umount /cdrom   
  26. # %users  localhost=/sbin/shutdown -h now   
  27. ###############################################################  


參考:su sudo sudoers

http://desert3.iteye.com/blog/1663995

linux 切換使用者身份、su、sudo、/etc/sudoers

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.