旨在闡述CentOS中 su和sudo命令的基本用法和區別apache
知識儲備centos
1.Linux中一般不建議以root身份直接登錄,太危險了!然而以普通用戶身份登錄,在某些時候又受到權限壓制,su和sudo就是良好的解決方案;bash
2.su一般用來臨時切換到某個用戶身份,來執行一些指令;切換方式有徹底切換、不徹底切換;網絡
3.sudo一般用來以某個用戶身份來執行某些指令,執行完畢後登錄身份仍是自身,即supper do!編輯器
Su命令精要ide
su切換方式:
3d
(1) su -l root 徹底切換:會從新讀取新身份的私人配置文件,環境變量PATH等等;日誌
(2) su root 不徹底切換:不會從新讀取;blog
正常狀況下,切換到新身份後,會一直保持該身份運行着,除非使用exit命令退出新身份;
ci
幾個要點:
可使用 su -c command root切換到root身份運行完指令command後自動退出root身份,這點和sudo有點相似哦,詳情man su;
普通用戶切換到任何用戶都須要輸入密碼,只有root切換到普通用戶無需密碼;
su -,su -l,su --login 都表示徹底切換,會讀取私人的小配置!
sudo命令精要
sudo的功能大體有:
(1)受權指定用戶在指定主機上運行指定的命令『who、where、do what』
(2)詳細記錄用戶基於sudo執行命令的相關日誌信息
(3)sudo具備時效性認證:即用戶第一次執行sudo會要求輸入密碼驗證身份,這個憑據會保存一段時間,默認是5分鐘,5分鐘內不須要再次輸入密碼,「檢票系統」
sudo命令:
被受權用戶應該以sudo命令來運行被受權運行的命令:
su - 不加 默認是su到管理員,須要root密碼
sudo [OPTIONS] COMMAND
sudo su - 無需管理員密碼 哈哈,理解一下 挺有意思
-l: 查看當前用戶可執行的sudo命令;
-k: 清除此前記憶下的「令牌」;
-u USERNAME COMMAND:以指定用戶運行COMMAND命令;
sudo的配置文件:/etc/sudoers
前面所說,sudo能夠定義哪些用戶,在哪些主機上,作哪些指令。這些定義其實保存在配置文件/etc/sudoers上,建議使用專用的編輯器編輯,即visudo命令『有語法檢查等功能』
sudo配置文件語法
sudoers配置文件語法很簡單,以下
例如,指定普通用戶centos,容許在任何主機上以root身份執行fdisk命令
可是,若是要爲多個用戶、不一樣組用戶指定受權,一條條添加是否顯得太過麻煩呢?尤爲是當一個用戶能夠經過sudo執行多條command命令的時候。其實可使用 別名的方式 來受權,具體用法以下:
例如,指定容許用戶centos,用戶組apache,容許在任何主機上以root身份執行fdisk,useradd系統管理命令,和wget,ifconfig等網絡管理命令。那麼該如何定義呢?
幾個要點:
別名的名字,必須並且必定是大寫字符串
別名之間能夠相互嵌套,好比說User_Alias A = apache,B 這裏的B是另一個User_Alias
合理規劃好別名,合理嵌套好別名!
前面提到sudo有「檢票系統」,那麼一個受權的命令到底是否須要檢票,是根據該命令的標籤來決定的,好比下面
這意味着centos這個用戶經過sudo 能夠在任何主機上以root身份運行fdisk命令(須要檢票,出示一次票據後默承認以維持5分鐘哦),而運行wget是無需出示票據的
5. 請注意,受權的CMD1 CMD2 這些可sudo執行的命令,建議使用絕對路徑!
6. 使用visudo修改後配置文件後,當即生效
練習:
一、受權centos用戶能夠運行fdisk命令完成磁盤管理,以及使用mkfs或mke2fs實現文件系統管理;
受權前:
修改sudo配置文件:
#visudo centos ALL=(root) /sbin/fdisk, /sbin/mkfs.ext4
受權後:
二、受權gentoo用戶能夠運行邏輯卷管理的相關命令;
和邏輯卷相關的命令有
顯示相關pvs、vgs、lvs
掃描相關pvscan、vgscan、lvscan
建立相關pvcreate、vgcreate、lvcreate
編輯sudo配置文件:
#visudo Cmnd_Alias VGCMDS= /sbin/pvs, /sbin/vgs, /sbin/lvs, /sbin/pvscan, /sbin/vgscan, /sbin/lvscan, /sbin/pvcreate, /sbin/vgcreate, /sbin/lvcreate centos ALL=(root) VGCMDS
在定義Cmnd_Alias時,我嘗試了/sbin/{vgs,lvs}的寫法,發現不能識別,失敗!
在驗證的時候,老是不成功,最後發現沒有清空憑據,sudo -k
調查發現vgs、lvcreate等等VG相關命令,其實本質都是指向/sbin/lvm的軟連接,可是無需受權/sbin/lvm 也是能夠執行這些VG指令的