sudo 詳解

1、sudo 簡介

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

su 命令

su是最簡單的身份切換命令,一般都是su - username,然後輸入password就ok了,root用su至其他用戶無須密碼;但非root用戶切換時需要密碼。切換到root可以使用su -和su - root。

  • 切換用戶的方式:
    su UserName:非登錄式切換,即不會讀取目標用戶的配置文件
    su - UserName:登錄式切換,會讀取目標用戶的配置文件;完全切換
  • 換個身份執行命令:
    su [-] UserName -c 'COMMAND'
    選項:
    -l:“su -l UserName”相當於“su - UserName”
    -c: 僅執行一次命令,而不切換用戶身份

2、sudo的特性

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

編輯配置文件的方式

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

3、sudo相關文件

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

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

配置文件規則有兩類

  • 別名定義:不是必須的,別名必須全部而且只能使用大寫英文字母的組合
  • 授權規則:必須的
  • 用戶別名
    sudo 詳解

4、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/usermod

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

5、sudo命令

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

6、總結

  • 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 詳解

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章