天天看點

sudo

sudo,指令别名

sudo

sudo的使用

  • sudo指令可以用來使用其他的使用者身份執行指定的指令。如果未授權使用者嘗試使用 sudo,會提示聯系管理者。
  • sudo還有日志功能,無論誰使用sudo指令操作什麼指令,都會被記錄在日志當中

    /var/log/secure

  • sudo為系統管理者提供配置檔案,允許系統管理者集中地管理使用者的使用權限和使用的主機
  • sudo使用時間戳檔案來完成類似“檢票”的系統,預設存活期為

    5分鐘

    的“入場券”,關于時間戳檔案在

    /var/db/sudo

  • 通過visudo指令編輯配置檔案,具有文法檢查功能

    visudo –c

    檢查文法

指令:sudo [-u user] COMMAND

參數:

  • -V 顯示版本資訊等配置資訊
  • -u user 預設為root
  • -l,ll 列出使用者在主機上可用的和被禁止的指令
  • -v 再延長密碼有效期限5分鐘,更新時間戳
  • -k 清除時間戳(1970-01-01),下次需要重新輸密碼
  • -K 與-k類似,還要删除時間戳檔案
  • -b 在背景執行指令
  • -p 改變詢問密碼的提示符号

    示例: -p ”password on %h for user %p:"

上面就是指令的使用介紹和一些參數,并沒有具體的示例,那是因為,我們真正的要使用這個指令,需要配合針對于該指令的配置,配置檔案在

/etc/sudoers

,

/etc/sudoers.d/

中,其中第一個數主配置檔案,第二個是次配置檔案,但在實際上,我們最好是将我們的規則寫在此配置檔案目錄中,這樣便于管理還以免損壞主配置檔案,接下來,我們先對主配置檔案進行了解:

我們在上面顯示的東西,第一個

root ALL=(ALL) ALL

, 其實是

user host=(runas) command

,其中user代表是運作指令者的身份,host是指通過哪些主機運作,runas是以哪個使用者的身份運作,command運作哪些指令。

第二個配置

%wheel ALL=(ALL) ALL

則是讓哪些組中的成員以某些身份在哪些機器上運作哪些指令。

然後我們做一些示例,當然,我們需要寫配置檔案的,我們把配置寫到/etc/sudoers.d/下面去,保證主配置檔案不變。我們使用建立檔案

test

(檔案名可自己取,沒問題)

tom ALL=(root)/usr/bin/cat /etc/shadow      
sudo

我們使用tom使用者去使用root的身份在所有機器上檢視shasow檔案,在一般情況下,作為普通使用者tom是沒有權限檢視該檔案的,但是,我們給他一個臨時執行的權限,他就能使用sudo指令檢視到該檔案。

sudo

我們可以看到,他可以檢視該檔案,但是需要輸入自己的密碼,并且在5分鐘之内使用該指令,不需要再次輸入密碼,關于此的時間戳檔案在

/var/db/sudo

,一點五分鐘的時間過了,我們需要重新輸入密碼。并且時間戳檔案會自動更新。

sudo

剛剛我們是使用vim寫的那個配置檔案,但是檔案有沒有什麼問題呢?我們使用指令

visudo –c

來檢查一下該檔案是否有問題。

[root@CT73 sudoers.d]$ visudo -c
/etc/sudoers: parsed OK
/etc/sudoers.d/test: bad permissions, should be mode 0440      

我們看到test文法是沒有問題的,但是權限有點問題,它說權限應該是440,我們需要把它改改,我們可以使用手動修改,或者在寫這個檔案的時候使用visudo -f  test來寫就沒問題了。

我們的配置檔案還是支援通配符的,例如:

  • ? :任意單一字元
  • * :比對任意長度字元
  • [wxc]:比對其中一個字元
  • [!wxc]:除了這三個字元的其它字元
  • \x : 轉義
  • [[alpha]] :字母 示例: /bin/ls [[alpha]]*

以上這些都可以使用在通配符裡面,如:

tom ALL=(root)/usr/bin/cat /etc/*      

此時tom就可以使用cat指令檢視/etc/下面的所有檔案内容。或者我們還可以這樣寫:

tom ALL=(root)/usr/sbin/useradd      

這個配置使得tom使用者具有建立使用者的權限。

在配置檔案中,我們可以使用以下的命名方式:

Users和runas:

  • username
  • #uid
  • %group_name
  • %#gid
  • user_alias | runas_alias

host:

  • ip或hostname
  • network(/netmask)
  • host_alias

command:

  • command name
  • directory
  • sudoedit
  • Cmnd_Alias

示例如下:

讓tom可以在192.168.111.120主機下删除使用者

tom 192.168.111.120=(#0)/usr/sbin/userdel      

讓tom可以修改sudoers檔案,這是一個可怕的指令,tom可以修改任何他想得到的權限。

tom 192.168.111.120=(#0) sudoedit      
sudo

指令别名

很多的時候,需要使用sudo的使用者很多,我們要對他們處理,如果将一個配置寫的很長,會看起來很多,這時候,我們就可以使用指令别名:

别名有四種類型: User_Alias, Runas_Alias, Host_Alias, Cmnd_Alias

示例1:

讓student使用者可以使用pidof和ifconfig指令,讓在wheel組裡面的使用者可以無密碼執行任何操作

student ALL=(root)/sbin/pidof,/sbin/ifconfig
%wheel ALL=(ALL) NOPASSWD: ALL      

執行個體2:

定義使用者别名,包含兩個使用者,定義指令别名,讓這兩個使用者可以執行該操作。

User_Alias NETADMIN= netuser1,netuser2
Cmnd_Alias NETCMD =/usr/sbin/ip
NETADMIN ALL=(root) NETCMD      

示例3:

SYSADER SERS= SYDCMD,DSKCMD沒有帶

()

,它就代表

ALL

任何人

User_Alias SYSADER=wang,mage,%admins
User_Alias DISKADER=tom
Host_Alias SERS=www.fire.com,172.16.0.0/24
Runas_Alias OP=root
Cmnd_Alias SYDCMD=/bin/chown,/bin/chmod
Cmnd_Alias DSKCMD=/sbin/parted,/sbin/fdisk

SYSADER SERS= SYDCMD,DSKCMD
DISKADER ALL=(OP) DSKCMD      

示例4:

定義兩個使用者,在使用useradd,usermod,和passwd使用的時候不需要輸入密碼(設定無法改變root的密碼),在userdel的時候需要輸入密碼(防止誤操作,删除使用者)

User_Alias ADMINUSER = adminuser1,adminuser2
Cmnd_Alias ADMINCMD =/usr/sbin/useradd,/usr/sbin/usermod,/usr/bin/passwd [a-zA-Z]*,!/usr/bin/passwd root

ADMINUSER ALL=(root) NOPASSWD:ADMINCMD,PASSWD:/usr/sbin/userdel      

示例5:

預設設定,在授權普通使用者使用sudo指令時,如果沒有

-u username

的話,預設使用wang使用者,在

()

不寫tom,或者沒有

()

,預設就是以tom的執行指令

Defaults:wang runas_default=tom
wang ALL=(tom,jerry) ALL      

示例6:

wang 192.168.175.136,192.168.175.138=(root)/usr/sbin/,!/usr/sbin/useradd      

示例7:

讓tom可以檢視message*的日志檔案,但是這裡有一個安全問題

tom ALL=(ALL) NOPASSWD:/bin/cat /var/log/messages*      

我們在使用tom使用者cat/var/log/messages時候,還可以:

sudo cat /var/log/messages /etc/shadow      

并且在man幫助文檔中有說明:

Note that mail will not be sent if an unauthorized user tries to run sudo with
...skipping...
%operator ALL =/bin/cat /var/log/messages*
will allow command like:
$ sudo cat /var/log/messages.1
It will also allow:
$ sudo cat /var/log/messages /etc/shadow
which is probably not what was intended.      

轉載請标明出處:http://www.cnblogs.com/duzhaoqi/