1. 程式人生 > >身份切換與sudo

身份切換與sudo

防止 ica 示例 命令 沒有 logfile 更新時間 hat sed

su命令用於切換當前用戶身份到其他用戶身份,變更時須輸入所要變更的用戶帳號與密碼。以root身份切換至普通用戶則不需要輸入密碼


su

功能描述:

身份切換,替代用戶和組ID運行指令

格式:

su –l username –c ‘command‘

su username

su - username

默認:


Centos 6 命令位置 /bin/su

Centos 7 命令位置 /usr/bin/su /bin 軟鏈接至 usr/bin

版本

選項

說明

示例

6

- 或 -l

變更身份時,變更環境變量為用戶的



-c 指令

執行完指定的指令後,即恢復原來的身份



--session-command=COMMAND

與-c一致,只是不創建新的會話



-m 或 -p

變更身份時,不變更環境變量



-s

指定要執行的shell




su變更時須輸入所要變更的用戶帳號與密碼,這在實際使用中會因為密碼而導致安全上的問題,因此,就引出了sudo的實用性。

? sudo能夠授權指定用戶在指定主機上運行某些命令。 如果未授權用戶嘗試使用 sudo,會提示聯系管理員

? sudo可以提供日誌,記錄每個用戶使用sudo操作

? sudo為系統管理員提供配置文件,允許系統管理員集中地管理用戶的使用權限和使用的主機

? sudo使用時間戳文件來完成類似“檢票”的系統,默認存活期為5分鐘的“入場券”


sudo

功能描述:

授權使用指用命令

格式:

sudo [-u user] COMMAND

默認:


版本

選項

說明

示例

6

-u user

切換至指定用戶, 默認為root



-l 或 -ll

列出用戶在主機上可用的和被禁止的命令



-f

指定sudoers文件



-V

顯示配置信息



-v

再延長密碼有效期限5分鐘,更新時間戳



-k

清除時間戳(變為1970-01-01),下次需要重新輸密碼



-K

與-k一致,同時刪除時間戳文件



-b

在後面執行指令



-p

改變詢問密碼的提示符

如:-p ”password on %h for user %p:"



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別名


語法格式:

別名有四種類型:

別名關鍵字

賦值示例

User_Alias

User_Alias ADMINS = hunk, tom

Host_Alias

Host_Alias FILESERVERS = fs1, fs2

Host_Alias DNSSERVERS = 114.114.114.114,8.8.8.8

Runas_Alias

Runas_Alias OP = root

Cmnd_Alias

Cmnd_Alias SOFTWARE = /bin/rpm, /usr/bin/up2date, /usr/bin/yum

Cmnd_Alias SERVICES = /sbin/chkconfig, /usr/bin/systemctl start

別名格式:[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