身份切換與sudo
su
Centos 6 命令位置 /bin/su
Centos 7 命令位置 /usr/bin/su /bin 軟鏈接至 usr/bin
su變更時須輸入所要變更的用戶帳號與密碼,這在實際使用中會因為密碼而導致安全上的問題,因此,就引出了sudo的實用性。
? sudo能夠授權指定用戶在指定主機上運行某些命令。 如果未授權用戶嘗試使用 sudo,會提示聯系管理員
? sudo可以提供日誌,記錄每個用戶使用sudo操作
? sudo為系統管理員提供配置文件,允許系統管理員集中地管理用戶的使用權限和使用的主機
? sudo使用時間戳文件來完成類似“檢票”的系統,默認存活期為5分鐘的“入場券”
sudo
sudo配置
? 配置文件
/etc/sudoers
/etc/sudoers.d/
sudo 可以解析 /etc/sudoers.d/ 目錄中的文件,這樣就不需要編輯單一的 /etc/sudoers 文件,可以單獨修改一個設置然後放入此目錄。目錄中配置的格式和 /etc/sudoers一樣, 優點包括:
a.可以按指定分類創建文件
b.如果新配置有問題,可以刪除這個文件,而不用編輯 /etc/sudoers.
警告: /etc/sudoers格式錯誤會導致sudo不可用。必須使用visudo編輯該文件防止出錯。
#visudo -f /etc/sudoers.d/hunk 讀取並編輯/etc/sudoers.d/指定文件
#visudo –c 檢查語法
/etc/sudoers: parsed OK
出錯的時候,會提示如下信息,按 e 可以直接定位到出現錯誤的行
#visudo -c
/etc/sudoers: parsed OK
/etc/sudoers.d/hunk: bad permissions, should be mode 0440
/etc/sudoers配置文件
說明 :
1:授權規則
2:授權wheel組在任何位置執行任何指令。
3:設置sudo時免密碼
4:這一行並不是註釋,在/etc/sudoers.d/目錄的文件會一並加載,這樣做的好處是,每個用戶生成 一個配置文件,方便管理。
配置文件更改後,立即生效
? 時間戳文件
/var/db/sudo
? 日誌文件
/var/log/secure
#tail /var/log/secure
? 配置文件支持使用通配符glob
?: 任意單一字符
* : 匹配任意長度字符
[wxc]: 匹配其中一個字符
[!wxc]: 除了這三個字符的其它字符
\x : 轉義
[[alpha]] : 字母 示例: /bin/ls [[alpha]]*
更多請參考以前筆記
? 配置文件規則有兩類
1、別名定義:不是必須的
2、授權規則:必須的
授權規則格式:
語法格式:
用戶 登入主機=(代表用戶) 命令
user host=(runas) command
root ALL=(ALL) ALL
? 格式說明:
user: 運行命令者的身份
host: 允許在哪些主機
(runas):以哪個用戶的身份,此用戶應當有權限運行後面的指令,否則沒有意義。
command: 運行哪些命令,這裏建議使用絕對路徑。使用 逗號; 實現多行指令
其中,command一欄中的sudoedit比較特別,是授權用戶編輯文件,而且在普通用戶執行時,只需要這樣使用:$sudoedit /etc/sudoers.d/hunk
示例:
一個普通用戶並沒有權限掛載光盤
[hunk@centos7 ~]$mount /dev/sr0 /dvd
mount: only root can do that
設置sudo授權指定用戶可以掛載光盤和卸載光盤
# visudo
#hunk ALL=(root) /usr/bin/mount /dev/cdrom /dvd,/usr/bin/umount /dvd
這種寫法也可以,runas為空時,默認以root身份
#hunk ALL= /usr/bin/mount /dev/cdrom /dvd,/usr/bin/umount /dvd
支持通配符
#hunk ALL=/usr/bin/mount /dev/sr* /dvd,/usr/bin/mount /dev/cdrom /dvd,/usr/bin/umount /dvd
普通用戶使用方式:
# sudo mount /dev/sr0 /dvd
第一次的時候,會驗證密碼,以後每隔5分鐘會重新驗證密碼
$sudo mount /dev/sr0 /dvd
mount: /dev/sr0 is write-protected, mounting read-only
註意:
sudo的字符串必須與sudoers配置文件要一模一樣,否則就是不匹配
一些特殊的寫法:
rushmore = NOPASSWD: /bin/kill, PASSWD: /bin/ls, /usr/bin/lprm
NOPASSWD:不需要輸入密碼
PASSWD:需要輸入密碼
Defaults:hunk runas_default=user10
#1004 ALL=(root) /usr/sbin/,!/usr/sbin/ifconfig
! 排除或者理解為不能執行
Defaults:默認行為
Defaults@Host_List
Defaults:User_List
Defaults!Cmnd_List
Defaults>Runas_List
示例:
Defaults syslog=auth
Defaults>root !set_logname
Defaults:FULLTIMERS !lecture
Defaults:hunk !authenticate 不進行身份驗證
Defaults@SERVERS log_year, logfile=/var/log/sudo.log 指定這些主機的日誌相關
Defaults!PAGERS noexec
sudo別名
語法格式:
別名有四種類型:
別名格式:[A-Z]([A-Z][0-9]_)*
為sudo命令定義PATH環境變量
當你使用sudo去執行一個程序時,處於安全的考慮,這個程序將在一個新的、最小化的環境中執行,也就是說,諸如PATH這樣的環境變量,在sudo命令下已經被重置成默認狀態了。所以當一個剛初始化的PATH變量中不包含你所要運行的程序所在的目錄,用sudo去執行,你就會得到"command not found"的錯誤提示。
要想改變PATH在sudo會話中的初始值,用文本編輯器打開/etc/sudoers文件,找到"secure_path"一行,當你執行sudo 命令時,"secure_path"中包含的路徑將被當做默認PATH變量使用。
Defaults secure_path = $PATH:/sbin:/bin:/usr/sbin:/usr/bin
一些示例
授權 ls /usr/local/protected
$ sudo ls /usr/local/protected
以www的身份編輯指定的文件
$ sudoedit -u www ~www/htdocs/index.html
以組成員身份adm的查看日誌
$ sudo -g adm more /var/log/syslog
以jim的身份且使用主組為audio的身份編輯指定文件
$ sudoedit -u jim -g audio ~jim/sound.txt
允許關機
$ sudo shutdown -r +15 "quick reboot"
在使用*號時,要特別註意安全問題
%operator ALL = /bin/cat /var/log/messages*
當以上規則時,可以匹配為
$ sudo cat /var/log/messages.1
也可以匹配為
$ sudo cat /var/log/messages /etc/shadow
是不是相當的危險?
可以這麽設定
%operator ALL = /bin/cat /var/log/messages*,!/bin/cat /var/log/message* *
身份切換與sudo