使用者管理(3)---su、sudo
使用者切換
su命令
su就是切換使用者身份的命令。通過su命令可以在使用者之間切換,超級許可權使用者root向普通或虛擬使用者切換不需要密碼驗證。其他普通使用者之間或者普通使用者切換到root,都需要切換使用者的密碼驗證。
su語法
su [選項引數] [使用者]
引數選項 | 說明 |
---|---|
-,-l,–login | 使一個shell成為登入的shell,如執行su - Ian時,表示該使用者想改變身份為Ian,並且使用Ian使用者的環境變數配置如:/home/Ian/.bash_profile等 |
-c,–command | 切換到一個shell下,執行一個命令,然後退出所切換的使用者環境 |
例項
1.-c引數的運用。在root下,以Lisa身份建立一個檔案。
2.如何讓系統在每一次開機時也要以普通使用者啟動指定的服務指令碼呢?
把要執行的指令碼放入開機自啟動配置檔案/etc/rc.local中。通過su - 使用者 -c “命令”執行啟動服務的命令。
[root@ianLinux ~]# tail -5 /etc/rc.local
## 分使用者方案啟動服務命令
su - Lisa -c "/bin/sh /home/Lisa/bin/deploy.sh"
/bin/sh /home/Lisa/bin/deploy.sh就是僅能在Lisa使用者下啟動的服務命令指令碼。
su命令總結
- 普通使用者切換到root使用者,可使用su -或su - root。必須輸入root的密碼才能完成切換。
- root使用者切換到普通使用者,可使用su - 普通使用者名稱,不需要任何密碼就能完成切換。切換到普通使用者後,在執行一些命令如ifconfig時,可能會遭遇到環境變數PATH路徑問題而找不到某個系統命令(一般是/sbin,/usr/sbin等下面的命令),這時就需要將普通使用者的PATH,配置成root的PATH內容。
- 如果僅希望以某個使用者的角色執行命令而不直接切換到該使用者下操作,可以使用su - 使用者名稱 -c “命令”的方式。
sudo命令
sudo以root身份執行普通使用者無法執行的任務。
sudo命令執行的流程
- 當用sudo執行命令時,系統會首先查詢/var/run/sudo/%HOME(或者是/var/db/sudo/%HOME)目錄中是否有使用者時間戳檔案,如果時間戳檔案過期,則提示使用者是否輸入自身的密碼。
- 當密碼驗證成功後,系統會查詢.etc/sudoers配置檔案,判斷使用者是否有執行相應sudo命令許可權。
- 如果具備執行相應sudo命令許可權,就會自動由當前使用者切換到root,然後以root身份執行該命令。
- 執行完成後,又會自動的直接退回到當前使用者shell下。
驗證:
visudo
一開始/var/db/sudo/Lisa/是沒有時間戳的。
在刪除時需要輸入當前使用者密碼,驗證密碼正確後,檢查/etc/sudoers配置檔案裡是否存在執行相關命令的許可權,如果有,執行並返回結果。
刪除後就有時間戳了,而且5分鐘內再次刪除時不需要輸入密碼。
時間戳
這是/etc/sudoers配置檔案裡不存在執行相關命令的許可權情況,直接退出sudo。
sudo語法
sudo [引數選項] 命令
引數選項 | 說明 |
---|---|
-l | 列出使用者在主機上可用的和被禁止的命令。當配置好sudo授權規則後,可用這個引數來檢視授權情況 |
-k | 同-K。刪除時間戳,下一個sudo命令要求提供密碼,前提是該使用者授權中不能有NOPASSWD:引數。時間戳預設5分鐘也會失效 |
[Lisa@ianLinux ~]$ sudo -l
[sudo] password for Lisa:
...
使用者 Lisa 可以在該主機上執行以下命令:
(ALL) /bin/rm
[Lisa@ianLinux ~]$
visudo
visudo修改/etc/sudoers配置檔案,給使用者進行授權。visudo -c能檢查語法。
檔案許可權440。
如果這個配置檔案裡面語法錯了,或者許可權改變了,sudo就不能用了。
如何利用sudo控制使用者對系統命令的使用許可權。
su與sudo
切換使用者身份的su命令為我們管理linux系統帶來了很多方便,通過切換到root下,可以完成各種系統管理工作,只要任何一個普通使用者知道了root使用者的密碼,都能以普通使用者的身份切換到root來完成本來無法完成的系統管理的工作。
但是這樣通過su命令切換到root後,也帶來了安全管理問題。系統有多個普通使用者,都可以通過su切換到root身份進行系統管理,甚至還可以改掉root密碼,讓其他的普通使用者無法再實現系統管理。這樣的非集權式管理,在一定程度上就對系統的安全造成了較大的威脅。
我們既希望超級使用者root密碼掌握在少數或唯一的管理員手上,又希望多個系統管理員能夠完成更復雜的系統管理的工作,即希望多個系統管理員都能管理系統而又不讓超級許可權氾濫。這就需要sudo命令來代替su命令了。