天天看點

visudo精确使用者賦權與sudo日志跟蹤 1、為什麼需要sudo? 2、sudo指令用法 3、sudo工作流程 4、visudo單使用者授權 5、visudo利用群組授權 6、visudo利用别名授權 7、visudo與環境變量 8、配置sudo日志檔案跟蹤

目錄

<a>1、為什麼需要sudo?... 1</a>

<a>2、sudo指令用法... 1</a>

<a>3、sudo工作流程... 1</a>

<a>4、visudo單使用者授權... 1</a>

<a>5、visudo利用群組授權... 2</a>

<a>6、visudo利用别名授權... 2</a>

<a>7、visudo與環境變量... 2</a>

<a>8、配置sudo日志檔案跟蹤... 3</a>

sudo配置參考文檔:

<a href="http://linux.vbird.org/linux_basic/0410accountmanager.php#userswitch">http://linux.vbird.org/linux_basic/0410accountmanager.php#userswitch</a>

<a href="http://www.cnblogs.com/ggjucheng/archive/2012/08/22/2650103.html">http://www.cnblogs.com/ggjucheng/archive/2012/08/22/2650103.html</a>

<a href="http://www.cnitblog.com/xijia0524/archive/2008/06/30/46168.aspx">http://www.cnitblog.com/xijia0524/archive/2008/06/30/46168.aspx</a>

sudo日志記錄跟蹤參考文檔:

<a href="http://firerat.blog.51cto.com/2371183/455524/">http://firerat.blog.51cto.com/2371183/455524/</a>

當我的主機是多人共管的環境時,如果大家都使用 su 來切換成為 root 的身份,那麼就得每個人知道 root 的密碼,這樣密碼太多人知道可能會流出去,很不安全!怎辦?透過 sudo 來處理即可!

sudo的執行則僅需要自己的密碼 ,sudo 可以讓你以其他使用者的身份執行指令 (通常是使用 root 的身份來執行指令),是以并非所有人都能夠執行 sudo ,而是僅有規範到 /etc/sudoers 内的使用者才能夠執行 sudo 這個指令。

sudo可讓使用者以其他的身份來執行指定的指令,預設的身份為root。在/etc/sudoers中設定了可執行sudo指令的使用者。若其未經授權的使用者企圖使用sudo,則會發出警告的郵件給管理者。使用者使用sudo時,必須先輸入目前使用者密碼,之後有5分鐘的有效期限,超過期限則必須重新輸入密碼。

文法:

sudo [-bhHpV][-s ][-u &lt;使用者&gt;][指令] 或 sudo [-klv]

參數:

參數

描述

-b

在背景執行指令

-H

将HOME環境變量設為新身份的HOME環境變量

-k

結束密碼的有效期限,也就是下次再執行sudo時便需要輸入密碼

-K

同-k

-l

列出目前使用者可執行與無法執行的指令

-p

改變詢問密碼的提示符号

-s

執行指定的shell

-u

以指定的使用者作為新的身份。若不加上此參數,則預設以root作為新的身份

-v

延長密碼有效期限5分鐘

-V

顯示版本資訊

1)當使用者執行 sudo 時,系統于 /etc/sudoers 檔案中搜尋該使用者是否有執行 sudo 的權限;

2)若使用者具有可執行 sudo 的權限後,便讓使用者輸入使用者自己的密碼來确認;

3)若密碼輸入成功,便開始進行 sudo 後續接的指令(但 root 執行 sudo 時,不需要輸入密碼);

4)若欲切換的身份與執行者身份相同,那也不需要輸入密碼。

visudo是直接操作/etc/sudoers檔案,我們也可以直接 vi /etc/sudoers,但是visudo指令的好處在于,退出/etc/sudoers檔案時,系統會檢查/etc/sudoers文法是否正确。

[root@www ~]# visudo

....(前面省略)....

root ALL=(ALL) ALL #&lt;==找到這一行,大約在80 行左右

yang1 ALL=(ALL) ALL #&lt;==新增這行!則yang1使用者通過sudo擁有所有權限

文法解釋:

root

ALL=(ALL)

ALL

使用者賬号

登入者的來源主機名=(可切換的身份)

可下達的指令

詳細解釋:

使用者帳号

代表哪個使用者使用sudo的權限

來源主機名稱

指定信任使用者,即根據w檢視[使用者帳号]的來源主機

可切換的身份

代表可切換的使用者角色,和sudo -u結合使用,預設是切換為root.

用于權限設定,也可使用!來表示不可執行的指令

舉例:

[root@www ~]# visudo

yang2 ALL=(root) !/usr/bin/passwd,!/usr/bin/passwd root

#允許yang2使用者通過sudo來修改所有其它使用者的密碼,但不能修改root的密碼

%test ALL=(ALL) ALL

# 在最左邊加上 % ,代表後面接的是一個群組,格式和單使用者授權一樣

[root@www ~]# usermod -a -G testtest #&lt;==将test 加入root 的組中

任何加入test這個群組的使用者,就能夠使用 sudo 切換任何身份來操作任何指令

不需要密碼即可使用 sudo

%wheel ALL=(ALL) NOPASSWD: ALL

#在指令處加入NOPASSWD:ALL即可

公司有很多部門,要友善管理,就可使用别名的方式,如:開發部,運維部,技術支援部,每個部門裡多個人,部門之間擁有的指令權限也不一樣,同一部門權限一樣。如果一條一條寫的話,寫也麻煩,改就更麻煩了。

别名的使用方法:

使用方法可通過 man sudoers後面的舉例找到

ALL=

(ALL)

登入者的來源主機名

User_Alias FULLTIMERS = millert, mikef, dowdy

Host_Alias CSNETS = 128.138.243.0, 128.138.204.0/24, 128.138.242.0

Runas_Alias OP = root, operator

Cmnd_Alias PRINTING = /usr/sbin/lpc, /usr/bin/lprm

例:

User_Alias ADMPW = pro1,pro2, pro3, myuser1, myuser2 #配置使用者别名ADMPW

Cmnd_Alias ADMPWCOM =!/usr/bin/passwd, /usr/bin/passwd [A-Za-z]*, !/usr/bin/passwd root

#配置指令别名ADMPWCOM

ADMPW ALL=(root) ADMPWCOM #指定使用者别名裡的成員,擁有指令别名裡的權限

1)現象描述:test1使用者sudo指令已經有所有的權限,但不能檢視網卡資訊。

[test1@test ~]$ sudo -l

…省略…

User test1 may run thefollowing commands on this host:

(ALL) ALL

sudo權限已經全部有了

[test1@test ~]$ sudo ifconfig eth0

sudo: ifconfig: command notfound

不可以檢視!提示這個指令找不到?為什麼?這是因為系統環境變量導緻的。

2) root環境變量與普通使用者環境變量比較

test1使用者找不到which指令在哪裡,而root使用者可以。

[test1@test ~]$ which ifconfig

/usr/bin/which: no ifconfig in(/application/mysql/bin:/usr/kerberos/bin:/usr/local/bin:/bin:/usr/bin:/home/test1/bin)

[test1@test ~]$ su - root

Password:

[root@test ~]# which ifconfig

/sbin/ifconfig

這是為什麼呢?

3)檢視兩個test1和root的PATH變量

[root@test ~]# echo $PATH

/application/mysql/bin:/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin

[root@test ~]# su - test1

[test1@test ~]$ echo $PATH

/application/mysql/bin:/usr/kerberos/bin:/usr/local/bin:/bin:/usr/bin:/home/test1/bin

發現普通使用者都沒有sbin的路徑,而很多指令都放在這些路徑下。

4)在普通使用者變量檔案添加上述路徑,cd ~ &amp;&amp; vi ~.profile

在PATH後加入:/sbin:/usr/sbin:/usr/local/sbin

[test1@test ~]$ cat.bash_profile |grep PATH

PATH=$PATH:$HOME/bin:/sbin:/usr/sbin:/usr/local/sbin

[test1@test ~]$ source.bash_profile #使修改的變量檔案生效

#修改變量後,接下來繼續檢視網卡資訊

[test1@test ~]$ sudo ifconfigeth0

eth0 Link encap:Ethernet HWaddr 00:0C:29:3B:DA:97

inet addr:10.0.0.239 Bcast:10.0.0.255 Mask:255.255.255.0

可以正常執行了!

5)為防止不出現使用者找不到的指令,有兩個方法

5.1)把上述路徑添加到環境變量中,~/.bash_profile檔案(普通使用者可編輯),或/etc/profile全局檔案(需root使用者編輯)

5.2)執行指令用絕對路徑,如: /sbin/ifconfig eth0

注:centos6.4沒有此問題

操作步驟:

1)查詢sample.sudoers檔案位置

[root@yang1 ~]# rpm -ql sudo

/usr/share/doc/sudo-1.7.2p1/sample.sudoers

/usr/share/doc/sudo-1.7.2p1/sample.syslog.conf

2)檢視sample.sudoers中的日志相關配置

sample.syslog.conf這個檔案為官方配置sudo日志配置筆記

[root@yang1 ~]# cat/usr/share/doc/sudo-1.7.2p1/sample.sudoers|grep "log"

Defaults syslog=auth

Defaults&gt;root !set_logname

Defaults@SERVERS log_year, logfile=/var/log/sudo.log

3)建立日志檔案

touch /var/log/sudo.log

4)把sudo日志檔案加入系統日志

把下面指令添加到/etc/syslog.conf末尾

local2.debug /var/log/sudo.log

注:空白處不能用空格,必須用tab

centos6.4的日志服務為rsyslog

5)在/etc/sudoers中添加日志路徑(也可用visudo編輯)

加在/etc/sudoers末尾:

echo 'Defaults logfile=/var/log/sudo.log' &gt;&gt; /etc/sudoers

6)測試

[root@yang1 ~]# cat/var/log/sudo.log #測試前sudo.log為空

[root@yang1 ~]# su - yang1 #進入普通使用者(事先已授權)

[yang1@yang1 ~]$ sudo -l #檢視目前使用者sudo可執行的指令

[sudo] password for yang1:

Matching Defaults entries foryang1 on this host:

requiretty, !visiblepw, env_reset, env_keep="COLORS DISPLAYHOSTNAME HISTSIZE INPUTRC KDEDIR LS_COLORS MAIL PS1 PS2 QTDIR

USERNAME LANG LC_ADDRESS LC_CTYPE LC_COLLATE LC_IDENTIFICATIONLC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC

LC_PAPER LC_TELEPHONE LC_TIME LC_ALL LANGUAGE LINGUAS _XKB_CHARSETXAUTHORITY", logfile=/var/log/sudo.log

Runas and Command-specificdefaults for yang1:

User yang1 may run the followingcommands on this host:

(ALL)!/usr/sbin/useradd, (ALL) !/usr/sbin/userdel, (ALL) /bin/touch #發現不能建立删除使用者,能建立檔案。

[yang1@yang1 ~]$ sudo touchyangrong #使用sudo建立一個檔案

[yang1@yang1 ~]$ cat/var/log/sudo.log #檢視sudo.log檔案,已有記錄,測試成功

9月 5 12:37:46 : yang1 : TTY=pts/2; PWD=/home/yang1 ; USER=root ; COMMAND=list

9月 5 12:38:05 : yang1 : TTY=pts/2; PWD=/home/yang1 ; USER=root ;

COMMAND=/bin/touch yangrong

測試成功!

上述為簡單的審計,複雜點的可以把日志集中存儲,更複雜點的可以對使用者行為做錄像回放,過濾分析等。

每一次總結文檔,對自己也是一次煅煉,若有錯誤,歡迎指出。

     本文轉自楊雲1028 51CTO部落格,原文連結:http://blog.51cto.com/yangrong/1289452,如需轉載請自行聯系原作者