next up previous contents
Next: 群組管理指令 Up: 帳號與身份管理 Previous: 使用者管理指令   Contents

使用者身份切換


		 su		轉換用戶身份。

sudo 不需要 root 的密碼,卻可執行 root 的工具。
visudo 編輯 /etc/sudoers。

  1. su:轉換用戶身份。
    [root@linux ~]# su [-lcm] [username]
    參數:
    -   :變換身份為 root,取得一個新的 shell,使用 root 的環境設定參數檔
         ,如 /root/.bash_profile 等。
    -l username :變換身份為 username,且使用 username 的所有相關環境設定檔。
    -m,-p  :使用目前的環境設定,而不重新讀取新使用者的設定檔。
    -c command  :僅進行一次指令 command。
    
    [dywang@dywOffice ~]$ su
    Password:
    [root@dywOffice dywang]# 
    
    # su 與 su - 之差別
    [dywang@dywHome2 ~]$ echo $SHLVL
    4
    [dywang@dywHome2 ~]$ su
    Password:
    [root@dywHome2 dywang]# pwd
    /home/dywang
    [root@dywHome2 dywang]# echo $SHLVL
    5
    [root@dywHome2 dywang]# exit
    exit
    [dywang@dywHome2 ~]$ echo $SHLVL
    4
    [dywang@dywHome2 ~]$ su -
    Password:
    [root@dywHome2 ~]# pwd
    /root
    [root@dywHome2 ~]# echo $SHLVL
    1
    
    # 一般使用者變換至一般使用者
    [dywang@dywHome2 ~]$ su ddyw
    Password:
    [ddyw@dywHome2 dywang]$ pwd
    /home/dywang
    [ddyw@dywHome2 dywang]$ echo $SHLVL
    5
    [ddyw@dywHome2 dywang]$ exit
    exit
    [dywang@dywHome2 ~]$ su -l ddyw
    Password:
    [ddyw@dywHome2 ~]$ pwd
    /home/ddyw
    [ddyw@dywHome2 ~]$ echo $SHLVL
    1
    [ddyw@dywHome2 ~]$ exit
    [dywang@dywHome2 ~]$ su -m ddyw
    Password:
     * Warning: SSH_AUTH_SOCK in environment is invalid; ignoring it
     * Warning: GPG_AGENT_INFO in environment is invalid; ignoring it
     * Warning: removing empty lock file
    rm: cannot remove `/home/dywang/.keychain/dywHome2-lockf': Permission denied
     * Warning: removing empty lock file
    以下省略
    
    [dywang@dywHome2 ~]$ su -m root
    Password:
    [root@dywHome2 ~]# 
    
    # root 變換至一般使用者
    [root@dywHome2 tmp]# su ddyw
    [ddyw@dywHome2 tmp]$ echo $SHLVL
    2
    [ddyw@dywHome2 tmp]$ su - ddyw
    Password:
    [ddyw@dywHome2 ~]$ echo $SHLVL
    1
    [root@dywHome2 tmp]# echo $SHLVL
    1
    [root@dywHome2 tmp]# su -m ddyw
    bash: /root/.bashrc: Permission denied
    [ddyw@dywHome2 tmp]$ echo $SHLVL
    2
    [ddyw@dywHome2 tmp]$ exit
    exit
    

  2. sudo:不需要 root 的密碼,卻可執行 root 的工具。
    [root@linux ~]# sudo [-u [username|#uid]] command
    參數:
    -u  :後面可以接使用者帳號名稱,或者是 UID。例如 UID 是 500 的身份。
    例如:-u #500 來作為切換到 UID 為 500 的使用者來執行命令。
    
    [dywang@dywOffice ~]$ sudo mkdir /root/testing
    Password:
    [dywang@dywOffice ~]$ ll /root/testing
    ls: /root/testing: Permission denied
    [dywang@dywOffice ~]$ su
    Password:
    [root@dywOffice dywang]# ll /root/
    total 12
    drwx------  2 root root 4096 Jul 12 19:35 drakx/
    drwxr-xr-x  2 root root 4096 Aug  7 12:14 testing/
    drwx------  4 root root 4096 Aug  7 10:33 tmp/
    [root@dywOffice dywang]# exit
    exit
    [dywang@dywOffice ~]$ sudo rm -rf /root/testing
    
    1. 當使用者執行 sudo 時,系統會主動的去尋找 /etc/sudoers 檔案,判斷該使用者是否有執行 sudo 的權限;
    2. 若使用者具有可執行 sudo 的權限,便讓使用者『輸入使用者自己的密碼』來確認;
    3. 若密碼輸入成功,便開始進行 sudo 後續接的指令;
    4. root 執行 sudo 時,不需要輸入密碼;
    5. 若欲切換的身份與執行者身份相同,那也不需要輸入密碼。
  3. sudo 改變身份執行命令, 但要特別注意的是,如果沒有加入 -i 選項,會使用改變身份前的環境變數,例如以下狀況沒有 -i 選項,改變身份執行 pwd 命令,結果是 /root 目錄,執行 ls 則沒有權限,因為這時要列出的 /root 目錄;當加入 -i 選項後,就有帶入用戶 dywang 登入的環境,所以無論 pwd 及 ls 結果都與實際用戶登入執行結果一樣。
    [root@dywH ~]# sudo -u dywang pwd
    /root
    [root@dywH ~]# sudo -u dywang ls
    ls: cannot open directory .: Permission denied
    [root@dywH ~]# sudo -i -u dywang pwd
    /home/dywang
    [root@dywH ~]# sudo -i -u dywang ls
    0937466081_10105_receipt-3.pdf		+Jg_Dhy86( !MNeV-temp-191339-10.png
    0937466081_10105_receipt-3.ps
    

  4. visudo:編輯 /etc/sudoers。
    1. visudo 是以 vi 開啟 /etc/sudoers,不過儲存離開時,visudo 會額外檢查 /etc/sudoers 內部的語法, 以避免使用者輸入錯誤的資訊。
    2. 加入一行『 dywang ALL=(ALL) ALL 』代表的意義是:
      使用者帳號 登入的主機 = (可以變換的身份) 可以下達的指令
      [root@dywOffice dywang]# visudo
      # User privilege specification
      root    ALL=(ALL) ALL
      dywang  ALL=(ALL) ALL
      
    3. 若系統有個 Web 的軟體是由使用者 www 進行編輯,想要讓使用者 dywang 可以用帳號 www 進行編輯:
      dywang ALL = (www) ALL
      
    4. 以群組進行規範。例如:讓屬於群組 grpcsie 的使用者都能夠進行 sudo :
      %grpcsie ALL = (ALL) ALL
      ## 『使用者帳號』的欄位前面加上『%』表示群組。
      
    5. 讓群組內的使用者在使用 sudo 時不需要輸入密碼,可在『可以下達的指令』欄位內多加入參數『NOPASSWD:』:
      %csie ALL = (ALL) NOPASSWD: ALL
      

練習題

  1. 如何變換身份為 root?
    Sol. su - 或 su
  2. 如何變換身份為 csie,並使用 csie 的所有相關環境設定檔?
    Sol. su -l csie
  3. 如何變換身份為 csie,但使用目前的環境設定,而不重新讀取新使用者的設定檔?
    Sol. su -m csie 或 su -p csie
  4. 如何只執行 root 權限的指令 cmd 一次,而不變換身份為 root?
    Sol. su -c cmd
  5. 如何執行 root 權限的指令 cmd,而不變換身份為 root?
    Sol. sudo cmd
  6. 使用者是否具有可執行 sudo 的權限,記錄在那個設定檔?
    Sol. /etc/sudoers
  7. 若使用者具有可執行 sudo 的權限,會讓使用者輸入誰的密碼來確認?
    Sol. 使用者本身的密碼
  8. root 執行 sudo 需不需密碼來確認?
    Sol. 不需要
  9. 為什麼不建議直接以 vi 修改 /etc/sudoers,而是執行 visudo 來編輯?
    Sol. visudo 儲存離開時會額外去檢查 /etc/sudoers 內部的語法,以避免使用者輸入錯誤的資訊。
  10. 若系統有個 Web 的軟體是由使用者 www 進行編輯,想要讓使用者 dywang 可以用帳號 www 進行編輯,請以 visudo 加入正確的一行。
    Sol. dywang ALL=(www) ALL
  11. 若要讓屬於群組 grpcsie 的使用者都能夠進行 sudo,請以 visudo 加入正確的一行。
    Sol. %grpcsie ALL = (ALL) ALL
  12. 若要讓屬於群組 grpcsie 的使用者都能夠進行 sudo,且不需要輸入密碼,請以 visudo 加入正確的一行。
    Sol. %grpcsie ALL = (ALL) NOPASSWD: ALL


next up previous contents
Next: 群組管理指令 Up: 帳號與身份管理 Previous: 使用者管理指令   Contents
2015-04-13