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後面的命令執行的時候則需要輸入密碼。