原創作品,允許轉載,轉載時請務必以超鏈接形式標明文章 原始出處 、作者信息和本聲明。否則將追究法律責任。http://yangrong.blog.51cto.com/6945369/1289452
sudo配置參考文檔:
http://linux.vbird.org/linux_basic/0410accountmanager.php#userswitch
http://www.cnblogs.com/ggjucheng/archive/2012/08/22/2650103.html
http://www.cnitblog.com/xijia0524/archive/2008/06/30/46168.aspx
sudo日誌記錄跟蹤參考文檔:
http://firerat.blog.51cto.com/2371183/455524/
1、爲什麼需要sudo?
當我的主機是多人共管的環境時,如果大家都使用 su 來切換成爲 root 的身份,那麼就得每個人知道 root 的密碼,這樣密碼太多人知道可能會流出去,很不安全!怎辦?透過 sudo 來處理即可!
sudo的執行則僅需要自己的密碼 ,sudo 可以讓你以其他用戶的身份執行指令 (通常是使用 root 的身份來執行指令),因此並非所有人都能夠執行 sudo ,而是僅有規範到 /etc/sudoers 內的用戶才能夠執行 sudo 這個指令。
2、sudo命令用法
sudo可讓用戶以其他的身份來執行指定的指令,預設的身份爲root。在/etc/sudoers中設置了可執行sudo指令的用戶。若其未經授權的用戶企圖使用sudo,則會發出警告的郵件給管理員。用戶使用sudo時,必須先輸入當前用戶密碼,之後有5分鐘的有效期限,超過期限則必須重新輸入密碼。
語法:
sudo [-bhHpV][-s ][-u <用戶>][指令] 或 sudo [-klv]
參數:
參數 | 描述 |
-b | 在後臺執行指令 |
-H | 將HOME環境變量設爲新身份的HOME環境變量 |
-k | 結束密碼的有效期限,也就是下次再執行sudo時便需要輸入密碼 |
-K | 同-k |
-l | 列出目前用戶可執行與無法執行的指令 |
-p | 改變詢問密碼的提示符號 |
-s | 執行指定的shell |
-u | 以指定的用戶作爲新的身份。若不加上此參數,則預設以root作爲新的身份 |
-v | 延長密碼有效期限5分鐘 |
-V | 顯示版本信息 |
3、sudo工作流程
1)當用戶執行 sudo 時,系統於 /etc/sudoers 檔案中搜尋該使用者是否有執行 sudo 的權限;
2)若使用者具有可執行 sudo 的權限後,便讓使用者輸入用戶自己的密碼來確認;
3)若密碼輸入成功,便開始進行 sudo 後續接的指令(但 root 執行 sudo 時,不需要輸入密碼);
4)若欲切換的身份與執行者身份相同,那也不需要輸入密碼。
4、visudo單用戶授權
visudo是直接操作/etc/sudoers文件,我們也可以直接 vi /etc/sudoers,但是visudo命令的好處在於,退出/etc/sudoers文件時,系統會檢查/etc/sudoers語法是否正確。
[root@www ~]# visudo
....(前面省略)....
root ALL=(ALL) ALL #<==找到這一行,大約在80 行左右
yang1 ALL=(ALL) ALL #<==新增這行!則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的密碼
5、visudo利用羣組授權
[root@www ~]# visudo
....(前面省略)....
%test ALL=(ALL) ALL
# 在最左邊加上 % ,代表後面接的是一個羣組,格式和單用戶授權一樣
[root@www ~]# usermod -a -G testtest #<==將test 加入root 的組中
任何加入test這個羣組的使用者,就能夠使用 sudo 切換任何身份來操作任何指令
不需要密碼即可使用 sudo
[root@www ~]# visudo
....(前面省略)....
%wheel ALL=(ALL) NOPASSWD: ALL
#在指令處加入NOPASSWD:ALL即可
6、visudo利用別名授權
公司有很多部門,要方便管理,就可使用別名的方式,如:開發部,運維部,技術支持部,每個部門裏多個人,部門之間擁有的命令權限也不一樣,同一部門權限一樣。如果一條一條寫的話,寫也麻煩,改就更麻煩了。
別名的使用方法:
使用方法可通過 man sudoers後面的舉例找到
root | ALL= | (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 |
例:
[root@www ~]# visudo
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 #指定用戶別名裏的成員,擁有命令別名裏的權限
7、visudo與環境變量
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 ~ && 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沒有此問題
8、配置sudo日誌文件跟蹤
操作步驟:
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>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' >> /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
測試成功!
上述爲簡單的審計,複雜點的可以把日誌集中存儲,更復雜點的可以對用戶行爲做錄像回放,過濾分析等。
每一次總結文檔,對自己也是一次煅煉,若有錯誤,歡迎指出。