linux學習之路之sudo詳解

來源:互聯網
上載者:User

標籤:主要介紹sudo的使用

sudo詳解

之前介紹過su的使用,su就是switch user,從一個使用者切換到另一個使用者

那麼sudo是什麼東東呢?

sudo:就是讓某個使用者能夠以另外任意一個使用者的身份通過某些主機執行某些任務。記住了,是以另外

         一個身份來執行命令,而不是切換到另一個使用者上去哦!

但是要想讓某個使用者能夠使用sudo來執行命令的話,必須要在sudo的設定檔定義才可以,只有在

/etc/sudoers中定義過的使用者才可以執行相應的命令,這些命令也必須要在sudo的設定檔/etc/sudoers中定義才可以,預設情況下,只有root使用者才可以使用sudo執行命令。

 

 

 

sudo的設定檔/etc/sudoers

剛剛說過,只有在/etc/sudoers中定義過的使用者可以使用sudo命令,所以,要想讓某些使用者也能夠使用sudo來執行某些命令,只需在/etc/sudoers中增加相應的sudo條目即可。

 

一般情況下,我們要想編輯某個設定檔,直接使用vim命令即可,但是由於使用vim編輯的設定檔無法檢查增減條目的文法,因此我們一般不建議使用vim直接編輯。而是使用另外一種命令來編輯/etc/sudoers。

visudo:該命令預設情況下就是越來編輯/etc/sudoers的,該命令可以檢查這個檔案的語法錯誤,因此,如果要想修改/etc/sudors是,使用visudo來編輯更好,這樣就不會出現什麼問題了。

visudo -f filename:也可以用來編輯其他設定檔的,只要加上-f和指定檔案即可

 

sudo條目

格式為:

who        which_host=(runas)        command

who:表示使用者帳號

which_host:表示登入者來源主機

runas:表示以哪一個使用者身份來執行,預設情況下,不加使用者,表示以root身份來執行

command:規範這個使用者可以使用sudo執行那些命令(這些命令要使用絕對路徑)

 

情景類比一:要想讓hadoop這個使用者能夠以root的身份來執行useradd,usermod命令,該如何??

1、預設情況下,只有root使用者才有許可權使用useradd,usermod命令的

650) this.width=650;" title="1.png" alt="wKioL1PsOmODTDlaAAChlNgznDc836.jpg" src="http://s3.51cto.com/wyfs02/M00/45/D5/wKioL1PsOmODTDlaAAChlNgznDc836.jpg" />

 

2、使用sudo以root身份來使用useradd命令添加使用者

650) this.width=650;" title="2.png" alt="wKiom1PsOY7gc5MHAACxVY1MMUg008.jpg" src="http://s3.51cto.com/wyfs02/M02/45/D4/wKiom1PsOY7gc5MHAACxVY1MMUg008.jpg" />

 

3、在/etc/sudoers中添加一個sudo條目

650) this.width=650;" title="3.png" alt="wKiom1PsOgGCHicOAAEFMs1ZLss662.jpg" src="http://s3.51cto.com/wyfs02/M00/45/D4/wKiom1PsOgGCHicOAAEFMs1ZLss662.jpg" />

 

4、再次使用sudo以root身份來添加使用者

650) this.width=650;" title="4.png" alt="wKioL1PsO0Djaj-4AAHTKdxaKxg371.jpg" src="http://s3.51cto.com/wyfs02/M02/45/D5/wKioL1PsO0Djaj-4AAHTKdxaKxg371.jpg" />

 

5、使用sudo以root身份來刪除xsl使用者

650) this.width=650;" title="5.png" alt="wKiom1PsOzmTyHwkAADuFhT9_Ao323.jpg" src="http://s3.51cto.com/wyfs02/M02/45/D4/wKiom1PsOzmTyHwkAADuFhT9_Ao323.jpg" />

 

注意:在上述這個過程中,每次執行命令時都要輸入密碼,這是因為如果某個使用者有事離開了但是卻沒有退出目前使用者,這時任何一個使用者就可以在此主機上執行任何命令,修改root密碼,或者刪除有關資訊等等,這對於系統來說是極不安全的。因此在每次執行命令前,都需要輸入目前使用者自身的密碼,該密碼有效期間為5分鐘(5分鐘內執行任何命令不需要輸入密碼),5分鐘過後就要重新輸入了。

 要想在執行某些命令時,不需要輸入密碼,可以在某些命令前加上"NOPASSWD:"等TAG資訊

例如:hadoop        ALL=(root)    NOPASSWD:  /usr/sbin/useradd

 其中ALL表示所有來源主機、所有可以切換的使用者、所有命令

 

注意:在增加某個條目時,如果規定了某個使用者可以執行修改密碼的命令時,也就是增加了這個命令/usr/bin/passwd,要去掉修改root帳號密碼的命令。使用!可以用來取反。這樣一般使用者就不能修改root的密碼了。以hadoop這個sudo條目為例:

hadoop        ALL=(root)        /usr/bin/passwd  [A-Za-z]*,!/usr/bin/passwd root

 /usr/bin/passwd  [A-Za-z]*:表示在執行passwd命令時,需要輸入修改的帳號名,因為如果不輸入帳號名,預設修改的也是root的密碼,因此這也是不可以的。

 

為sudo條目定義命令別名

有時候如果某些使用者需要執行相同的命令,如果一個一個的為他們添加sudo條目時,會比較麻煩。這時我們可以為某些使用者或者某些命令建立別名,以別名的方式為他們添加sudo條目,這樣就方便多了。

在定義別名時必須全部而且只能是大寫英文字母

可以為sudo條目中的每一個欄位定義一個別名。

如何定義別名:

定義使用者別名:

格式:  User_Alias   aliasname=

                aliasname可以是使用者名稱、組名(使用%引導)、還可以包含其他的使用者別名(嵌套)

 

定義主機別名

格式:Host_Alias    aliasname=

                aliasname可以是主機名稱、ip-addr、網路地址、其他主機別名(嵌套)

 

定義執行身份別名

格式:    Runas_Alias  aliasname=

                aliasname可以是使用者名稱、組名(前面加上%)、其他Runas別名(嵌套)

 

執行命令別名

格式        Cmnd_Alias  aliasname=

         aliasname可以是命令路徑(絕對路徑)、目錄(此目錄內的所有命令)、其他事先定義過的別名

        

 

情景類比二:有3個使用者,hadoop、xsl、test都可以執行useradd、passwd命令,該如何操作?

可以在/etc/sudoer中添加如下條目即可:

User_Alias USERALIAS=hadoop,xsl,test
Cmnd_Alias CMDALIAS=/usr/sbin/useradd,!/usr/bin/passwd root,/usr/bin/passwd [A-Za-z]*
USERALIAS   ALL=(root)  CMDALIAS

 

 

 當然可以使用sudo -l來查看某個使用者可以使用sudo來執行的某些命令

本文出自 “linux學習之路” 部落格,謝絕轉載!

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.