1. 程式人生 > >Linux:sudo命令例項講解

Linux:sudo命令例項講解

Linux下sudo命令例項講解

1、概念:

   sudo是linux下常用的允許普通使用者使用超級使用者許可權的工具,允許系統管理員讓普通使用者執行一些或者全部的root命令,如halt,reboot,su等等。這樣不僅減少了root使用者的登陸和管理時間,同樣也提高了安全性。Sudo不是對shell的一個代替,它是面向每個命令的。

   它的特性主要有這樣幾點:

       1、sudo能夠限制使用者只在某臺主機上執行某些命令。

       2、sudo提供了豐富的日誌,詳細地記錄了每個使用者幹了什麼。它能夠將日誌傳到中心主機或者日誌伺服器。

       3、sudo使用時間戳檔案--日誌 來執行類似的“檢票”系統。當用戶呼叫sudo並且輸入它的密碼時,使用者獲得了一張存活期為5分鐘的票(這個值可以在編譯的時候改變)。

       4、sudo的配置檔案是/etc/sudoers,屬性必須為0440,它允許系統管理員集中的管理使用者的使用許可權和使用的主機。

2、編輯配置檔案命令:visudo

       注意:編輯sudo的配置檔案/etc/sudoers是一般不要直接使用vi(vi /etc/sudoers)去編輯,因為sudoers配置有一定的語法,直接用vi編輯儲存系統不會檢查語法,如有錯也儲存了可能導致無法使用sudo工具,最好使用visudo命令去配置。雖然visudo也是呼叫vi去編輯,但是儲存時會進行語法檢查,有錯會有提示。

3、語法,引數

sudo [ -Vhl LvkKsHPSb ] │ [ -p prompt ] [ -c class│- ] [ -a auth_type ] [-u username│#uid ] command

引數:

  1. -V 顯示版本編號

  2. -h 會顯示版本編號及指令的使用方式說明

  3. -l 顯示出自己(執行 sudo 的使用者)的許可權

  4. -v 因為 sudo 在第一次執行時或是在 N 分鐘內沒有執行(N 預設為五)會問密碼,這個引數是重新做一次確認,如果超過 N 分鐘,也會問密碼

  5. -k 將會強迫使用者在下一次執行 sudo 時問密碼(不論有沒有超過 N 分鐘)

  6. -b 將要執行的指令放在背景執行

  7. -p prompt 可以更改問密碼的提示語,其中 %u 會代換為使用者的帳號名稱, %h 會顯示主機名稱

  8. -u username/#uid 不加此引數,代表要以 root 的身份執行指令,而加了此引數,可以以 username 的身份執行指令(#uid 為該 username 的使用者號碼)

  9. -s 執行環境變數中的 SHELL 所指定的 shell ,或是 /etc/passwd 裡所指定的 shell

  10. -H 將環境變數中的 HOME (家目錄)指定為要變更身份的使用者家目錄(如不加 -u 引數就是系統管理者 root )

  11. command 要以系統管理者身份(或以 -u 更改為其他人)執行的指令

二、實戰演練

1、定義一個使用者(tom)使其擁有新增使用者的特殊許可權,並進行建立使用者操作。

①、建立tom併為其建立密碼

  1. [[email protected] ~]# useradd tom

  2. [[email protected] ~]# echo "tom" | passwd --stdin tom

  3. Changing password for user tom.

  4. passwd: all authentication tokens updated successfully.

②、修改配置檔案,為tom新增特殊許可權useradd

  1. ## Allow root to run any commands anywhere

  2. root ALL=(ALL) ALL

  3. tom ALL=(root) /usr/sbin/useradd ##新增許可權,這裡的/usr/sbin/useradd表示普通使用者執行時必須使用全路徑,可以使用which 命令檢視哦!

  4. ## Allows members of the 'sys' group to run networking, software,


③、切換到使用者tom,驗證特殊許可權

  1. [[email protected] ~]# su - tom ##切換使用者

  2. [[email protected] ~]$ sudo -l ##檢視此使用者擁有的特殊許可權

  3. We trust you have received the usual lecture from the local System

  4. Administrator. It usually boils down to these three things:

  5. #1) Respect the privacy of others.

  6. #2) Think before you type.

  7. #3) With great power comes great responsibility.

  8. [sudo] password for tom: ##這裡需要驗證密碼,以保證是使用者本人執行操作

  9. Matching Defaults entries for tom on this host:

  10. requiretty, !visiblepw, always_set_home, env_reset, env_keep="COLORS DISPLAY HOSTNAME HISTSIZE

  11. INPUTRC KDEDIR LS_COLORS", env_keep+="MAIL PS1 PS2 QTDIR USERNAME LANG LC_ADDRESS LC_CTYPE",

  12. env_keep+="LC_COLLATE LC_IDENTIFICATION LC_MEASUREMENT LC_MESSAGES", env_keep+="LC_MONETARY

  13. LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE", env_keep+="LC_TIME LC_ALL LANGUAGE LINGUAS

  14. _XKB_CHARSET XAUTHORITY", secure_path=/sbin\:/bin\:/usr/sbin\:/usr/bin

  15. User tom may run the following commands on this host:

  16. (root) /usr/sbin/useradd ##可以以root身份,使用useradd命令

tom執行useradd

  1. [[email protected] ~]$ sudo /usr/sbin/useradd test1 ##新增使用者test1

  2. [[email protected] ~]$ tail -1 /etc/passwd

  3. test1:x:501:501::/home/test1:/bin/bash ##新增成功

④、檢視日誌/vat/log/secure
注意:要切換回root才有許可權檢視日誌

  1. [[email protected] ~]# tail /var/log/secure

  2. Apr 5 13:55:58 localhost su: pam_unix(su-l:session): session opened for user tom by root(uid=0)

  3. Apr 5 13:56:11 localhost su: pam_unix(su-l:session): session closed for user tom

  4. Apr 5 13:56:17 localhost passwd: pam_unix(passwd:chauthtok): password changed for tom

  5. Apr 5 13:56:17 localhost passwd: gkr-pam: couldn't update the 'login' keyring password: no old password was entered

  6. Apr 5 13:56:23 localhost su: pam_unix(su-l:session): session opened for user tom by root(uid=0)

  7. Apr 5 13:56:43 localhost sudo: tom : TTY=pts/0 ; PWD=/home/tom ; USER=root ; COMMAND=list

  8. ##tom以管理員身份執行了list命令

  9. Apr 5 14:00:50 localhost sudo: tom : TTY=pts/0 ; PWD=/home/tom ; USER=root ; COMMAND=/usr/sbin/useradd test1

  10. ##tom以管理員身份執行了useradd命令,新增使用者test1

  11. Apr 5 14:00:50 localhost useradd[2128]: new group: name=test1, GID=501

  12. Apr 5 14:00:50 localhost useradd[2128]: new user: name=test1, UID=501, GID=501, home=/home/test1, shell=/bin/bash

  13. Apr 5 14:07:15 localhost su: pam_unix(su-l:session): session closed for user tom

以後可以使用此命令日誌檢視主機是否遭到入侵攻擊,或者檢視某使用者登入進來並使用特殊許可權執行錯誤指令等等。所以我們要實時監控此檔案的動向。

⑤、-k引數示例

  1. [[email protected] ~]# su - tom

  2. [[email protected] ~]$ sudo -k ##結束密碼有效期

  3. [[email protected] ~]$ sudo /usr/sbin/useradd test2

  4. [sudo] password for tom: ##有效期結束後,執行特殊命令,需重新驗證密碼

  5. [[email protected] ~]$ tail -1 /etc/passwd

  6. test2:x:502:502::/home/test2:/bin/bash #新增test2成功

2、別名應用,alias:

  1. sudoers檔案支援使用別名對同類物件進行分組:組名必須使用全大寫字母,使用逗號將同類物件命令隔開。

  2. Host_Alias:主機別名

  3. User_Alias:使用者別名

  4. Runas_Alias:在哪些主機以誰的身份執行 的別名

  5. Cmnd_Alias:命令別名

①、在配置檔案中定義別名

  1. [[email protected] ~]# visudo

  2. Host_Alias USERHOSTS = 172.16.0.0/16,127.0.0.0/8,192.168.0.0/24 ##定義主機別名,可以在哪些機器執行特殊命令

  3. Cmnd_Alias USERADMIN=/usr/sbin/useradd,/usr/sbin/usermod,/usr/sbin/userdel ##定義命令別名

  4. root ALL=(ALL) ALL

  5. tom ALL=(root) USERADMIN ##此處定義tom可以執行別名USERADMIN中的所有命令

  6. tom USERHOSTS=(ROOT) USERADMIN ##可以在別名USERHOSTS中機器上執行別名USERADMIN中的命令


驗證:

  1. [[email protected] ~]# su - tom

  2. [[email protected] ~]$ sudo /usr/sbin/userdel -r test2 ##刪除使用者test2

  3. [sudo] password for tom:

  4. [[email protected] ~]$ tail -1 /etc/passwd ##刪除成功

  5. test1:x:501:501::/home/test1:/bin/bash

②、設禁止某使用者執行某操作

  1. <code class="language-python">tom ALL=(root) /usr/bin/passwd [a-zA-Z]*,!/usr/bin/passwd root  
  2. ##tom可以以root的身份更改密碼,但禁止更改root的密碼。</code>  

③、設定執特權命了時,無需輸入密碼

  1. tom ALL=(root) /usr/sbin/useradd,NOPASSWD: /usr/sbin/userdel,/usr/sbin/groupdel,PASSWD: /usr/sbin/usermod,/usr/sbin/groupmod

  2. ##這裡的/usr/sbin/useradd 操作時必須使用密碼;/usr/sbin/userdel, /usr/sbin/groupdel操作時可以不使用密碼(跟在其後的所有操作一律不使用密碼);/usr/sbin/usermod, /usr/sbin/groupmod 操作時還是要輸入密碼;還有PASSWD和NOPASSWD不可定義於別名中哦!


驗證:

  1. [[email protected] ~]# su - tom

  2. [[email protected] ~]$ sudo /usr/sbin/useradd test3

  3. [sudo] password for tom:

  4. [[email protected] ~]$ sudo -k

  5. [[email protected] ~]$ sudo /usr/sbin/useradd test4

  6. [sudo] password for tom: ##useradd每次都需要輸入密碼

  7. [[email protected] ~]$ sudo -k

  8. [[email protected] ~]$ sudo /usr/sbin/userdel test3 ##執行userdel沒有要求輸入密碼,NOPASSWD設定生效

  9. [[email protected] ~]$ tail -3 /etc/passwd

  10. tom:x:500:500::/home/tom:/bin/bash

  11. test1:x:501:501::/home/test1:/bin/bash

  12. test4:x:503:503::/home/test4:/bin/bash