天天看點

sudo指令詳解

sudo指令詳解

sudo指令是Linux上的一個非常有用的工具,它允許系統管理者配置設定給普通使用者一些合理的“權利”,讓他們執行一些隻有超級使用者或其他特許使用者才能完成的任務,比如:運作一些像mount,userdel,useradd之類的指令,或者編輯一些系統配置檔案,像/etc/passwd,/etc/samba/smb.conf等。這樣以來,就不僅減少了root使用者的登陸次數和管理時間,也提高了系統安全性。

一、sudo指令的特點

 1. sudo能夠限制指定使用者在指定主機上運作某些指令。

 2. sudo可以提供日志,忠實地記錄每個使用者使用sudo做了些什麼,并且能将日志傳到中心主機或者日志伺服器。

 3. sudo為系統管理者提供配置檔案,允許系統管理者集中地管理使用者的使用權限和使用的主機。它預設的存放位置是/etc/sudoers。

 4.sudo使用時間戳檔案來完成類似“檢票”的系統。當使用者執行sudo并且輸入密碼後,使用者獲得了一張預設存活期為300秒的“入場券”(預設值可以在編譯的時候改變)。逾時以後,使用者必須重新輸入密碼。

二、配置檔案

 1)授權機制:sudo的授權配置檔案,/etc/sudoers

  對于此配置檔案,共分為兩類内容:

1.别名的定義:定義内建變量;

2.使用者規格:其實就是授權項,其中可以調用定義過的别名;

  2)使用者規格(授權項):

每行隻能有一個授權項;

其格式為:

who  where=(whom)  what

user client=(runas) commands

注意:通過編輯/etc/sudoers檔案完成的授權,隻能通過sudo指令來啟用;

3)/etc/sudoers檔案的編寫格式:

who: 此次sudo配置的授權目标使用者;

username:單個使用者的使用者賬戶名稱;

#uid:單個使用者的UID;

%groupname:指定組内的所有使用者賬戶;

%#gid:以"gid"為GID的組内的所有使用者賬戶;

user_alias:事先定義過的使用者賬戶的别名;

where:定義被授權通路的用戶端主機;

ip/hostname:單個主機;

Network Address:網絡位址;

host_alias:事先定義過的主機的别名;

whom:授權使用者後續指令的運作者的真實身份;通常是root;

what:此次授權能夠運作的指令;

command:單個指令;

directory:指定目錄下所有的指令;

sudoedit:特殊指令,用于授權其他使用者可以執行sudo指令,并且可以編輯/etc/sudoers檔案;

cmnd_alias:實作定義過的指令的别名;

三、指令參數

 sudo [option]... command

 -u user:以指定的使用者身份運作指令;

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

 -l  顯示出自己(執行sudo的使用者)的權限

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

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

 -b  将要執行的指令放在背景執行

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

四、定義别名的方法

 Alias_Type ALIASNAME = item1, item2, ...

 Alias_Type:

User_Alias:

Host_Alias:

Runas_Alias:

Cmnd_Alias:

 ALIASNAME:别名的名稱必須全部使用大寫字母;

 User_Alias USERADMINUSERS = tom, jerry, centos, suse, %myclass

 Cmnd_Alias USERADMINCOMMANDS = /usr/sbin/useradd, /usr/sbin/userdel, /usr/bin/passwd [a-zA-Z0-9]*, ! /usr/bin/passwd root, /usr/sbin/usermod

 USERADMINUSERS  ALL=(root)  USERADMINCOMMANDS

 常用的标簽:

PASSWD

NOPASSWD

 Cmnd_Alias USERADMINCOMMANDS = NOPASSWD: /usr/sbin/useradd, PASSWD: /usr/sbin/userdel, /usr/bin/passwd [a-zA-Z0-9]*, ! /usr/bin/passwd root, /usr/sbin/usermod

 這樣NOPASSWD後面的指令在執行的時候是不需要輸入密碼的,PASSWD後面的指令執行的時候則需要輸入密碼。

本文轉自 Runs_ 51CTO部落格,原文連結:http://blog.51cto.com/12667170/1969678,如需轉載請自行聯系原作者

繼續閱讀