天天看點

身份切換與sudo

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

-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/指定檔案

身份切換與sudo

#visudo –c 檢查文法

/etc/sudoers: parsed OK

出錯的時候,會提示如下資訊,按 e 可以直接定位到出現錯誤的行

身份切換與sudo

#visudo -c

/etc/sudoers.d/hunk: bad permissions, should be mode 0440

/etc/sudoers配置檔案

身份切換與sudo

說明 :

1:授權規則

2:授權wheel組在任何位置執行任何指令。

3:設定sudo時免密碼

4:這一行并不是注釋,在/etc/sudoers.d/目錄的檔案會一并加載,這樣做的好處是,每個使用者生成 一個配置檔案,友善管理。

配置檔案更改後,立即生效

 時間戳檔案

/var/db/sudo

 日志檔案

/var/log/secure

#tail /var/log/secure

身份切換與sudo

 配置檔案支援使用通配符glob

?: 任意單一字元

* : 比對任意長度字元

[wxc]: 比對其中一個字元

[!wxc]: 除了這三個字元的其它字元

\x : 轉義

[[alpha]] : 字母 示例: /bin/ls [[alpha]]*

更多請參考以前筆記

 配置檔案規則有兩類

1、别名定義:不是必須的

2、授權規則:必須的

授權規則格式:

文法格式:

使用者 登入主機=(代表使用者) 指令

user host=(runas) command

root ALL=(ALL) ALL

身份切換與sudo

 格式說明:

user: 運作指令者的身份

host: 允許在哪些主機

(runas):以哪個使用者的身份,此使用者應當有權限運作後面的指令,否則沒有意義。

command: 運作哪些指令,這裡建議使用絕對路徑。使用 逗号; 實作多行指令

其中,command一欄中的sudoedit比較特别,是授權使用者編輯檔案,而且在普通使用者執行時,隻需要這樣使用:$sudoedit /etc/sudoers.d/hunk

示例:

一個普通使用者并沒有權限挂載CD光牒

[hunk@centos7 ~]$mount /dev/sr0 /dvd

mount: only root can do that

設定sudo授權指定使用者可以挂載CD光牒和解除安裝CD光牒

# 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

$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* *

本文轉自 ljpwinxp 51CTO部落格,原文連結:http://blog.51cto.com/191226139/2059648

繼續閱讀