sudo 命令

一、sudo 簡介

sudo是linux系統管理指令,是容許系統管理員讓普通用戶執行一些或者所有的root命令的一個工具,如halt,reboot,su等等。這樣不只減小了root用戶的登陸 和管理時間,一樣也提升了安全性。sudo不是對shell的一個代替,它是面向每一個命令的。(百度百科)linux

su 命令

su是最簡單的身份切換命令,通常都是su - username,而後輸入password就ok了,root用su至其餘用戶無須密碼;但非root用戶切換時須要密碼。切換到root可使用su -和su - root。shell

  • 切換用戶的方式:
    su UserName:非登陸式切換,即不會讀取目標用戶的配置文件
    su - UserName:登陸式切換,會讀取目標用戶的配置文件;徹底切換
  • 換個身份執行命令:
    su [-] UserName -c 'COMMAND'
    選項:
    -l:「su -l UserName」至關於「su - UserName」
    -c: 僅執行一次命令,而不切換用戶身份

二、sudo的特性

  • sudo 可以受權指定用戶在指定主機上運行某些命令。 若是未受權用戶嘗試使用 sudo,會提示聯繫管理員
  • sudo 能夠提供日誌,記錄每一個用戶使用sudo操做,以便於往後審計
  • sudo 爲系統管理員提供配置文件,容許系統管理員集中地管理用戶的使用權限和使用的主機
  • sudo 默認存活期爲5分鐘

編輯配置文件的方式vim

  • # sudoedit /etc/sudoers
  • # vim /etc/sudoers
  • # visudo
    visudo –c 命令具備語法檢查功能,和crontab -e編輯後退出檢查語言功能相似。

三、sudo相關文件

配置文件: /etc/sudoers, /etc/sudoers.d/
時間戳文件: /var/db/sudo
日誌文件: /var/log/secure
配置文件支持使用通配符glob:centos

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

配置文件規則有兩類安全

  • 別名定義:不是必須的,別名必須所有並且只能使用大寫英文字母的組合
  • 受權規則:必須的
  • 用戶別名
    sudo 命令

四、sudo語法

  • who which_hosts=(runas) command
    被管理主機地址【訪問主機】
    容許哪個用戶,執行某一條命令在哪一臺主機上
    誰(who)可以以哪一個用戶(runas)的身份經過什麼主機(which host)執行什麼命令(command)

user: 運行命令者的身份
host: 經過哪些主機
(runas): 以哪一個用戶的身份
command: 運行哪些命令 網絡

sudo 命令

  • sudo受權示例
    sudo 命令
    user1 ALL=(root) NOPASSWD: /usr/sbin/useradd, /usr/sbin/usermodide

  • 經常使用的標籤
    PASSWD:執行被受權的命令以前,必須輸入密碼進行身份驗證
    NOPASSWD:執行被受權的命令以前,無需輸入密碼進行身份驗證
    注意:PASSWD、NOPASSWD等標籤只能在受權項中使用,不能在別名中使用

五、sudo命令

sudo -u centos 切換身份
-V 顯示版本信息等配置信息 
-u user 默認爲root 
-l  列出當前用戶可使用的全部sudo命令
-v 再延長密碼有效期限5分鐘,更新時間戳 
-k  認證信息失效,清除時間戳(1970-01-01),下次須要從新輸密碼 
-b 在後臺執行指令

六、總結

  • su方式切換是需要輸入目標用戶的password。而sudo僅僅需要輸入本身的password,因此sudo可以保護目標用戶的password不對外泄漏。
  • sudo受權時passwd,su,sudo,sudoedit,visudo等具備特殊意義的命令時,務必要考慮全面(例如禁止修改root用戶的密碼等操做)。
  • 仔細看了sudo的配置文件發現sudo的which_hosts表示容許哪個IP地址或網絡訪問當前主機,這種說法不對。一般能用到這個參數的場景很少,通常在有NIS服務或集中管理的時候,其實就是管理全部主機的管理策略在一臺主機上編輯sudoers這個文件,而後將它推到全部主機。

man幫助文件顯示該參數的正確含義:
#jack能夠運行任何命令在定義地CSNET(128.138.243.0, 128.138.242.0和128.138.204.0/24的子網)中,不過注意前兩個不須要匹配子網掩碼由於是本地主機地址,而最後一個必須匹配掩碼由於是網絡地址。
jack CSNETS = ALL
#lisa能夠運行任何命令在定義爲CUNETS(128.138.0.0)的子網中主機上。
lisa CUNETS = ALL
sudo 命令工具

相關文章
相關標籤/搜索