Linux 權限管理進階:sudo 實戰(zhàn)技巧詳解
今天分享一下sudo權限管理。
1. 什么是 sudo?
sudo(superuser do)允許普通用戶在不切換到 root 賬戶的前提下,以其他用戶(默認是 root)的身份運行命令。相比直接使用 su,sudo 提供了更細粒度、更安全的權限控制。
2. sudo 的基本命令用法
sudo command # 以 root 權限執(zhí)行命令
sudo -u 命令 # 以指定用戶身份執(zhí)行命令
sudo -i # 獲取一個 root 登錄 shell
sudo -l # 查看當前用戶被授權執(zhí)行的命令列表
3. sudo 權限配置
所有 sudo 的核心配置文件是 /etc/sudoers,但你不應該直接編輯它。推薦使用 visudo 來避免配置錯誤導致系統(tǒng)無法使用 sudo。
visudo
sudoers 文件的基本語法:
<用戶> <主機>= (<可切換身份>) <命令列表>
例如:
liyb ALL=(ALL) NOPASSWD: /usr/vibin/systemctl restart nginx
含義是:用戶 liyb 可以在所有主機上,以任意用戶身份,無需輸入密碼,執(zhí)行 /bin/systemctl restart nginx。
4. 實戰(zhàn)案例
(1) 限制用戶只運行特定命令:
liyb ALL=(ALL) /usr/bin/systemctl restart nginx
效果:用戶 bob 只能使用 sudo 重啟 nginx,不能用它來執(zhí)行其他命令。
(2) 多個用戶共享相同權限:
Cmnd_Alias RESTART_CMDS = /sbin/reboot, /usr/bin/systemctl restart nginx
User_Alias ADMINS = alice, liyb
ADMINS ALL=(ALL) NOPASSWD: RESTART_CMDS
用戶組 ADMINS 成員可以無需密碼執(zhí)行 RESTART_CMDS 里的命令。
(3) 開發(fā)人員編輯特定配置文件
dev ALL=(ALL) NOPASSWD: /usr/bin/vi /etc/nginx/nginx.conf
開發(fā)人員只能編輯 nginx 配置文件,而無法訪問其他系統(tǒng)文件。
(4) 將liyb設為root權限
liyb ALL=(ALL) ALL
如果設置成這樣,代表liyb用戶可以執(zhí)行任何權限,不過需要輸入密碼才能執(zhí)行。
還有一種辦法就是將liyb用戶加入wheel組。
5. sudo 日志與審計
所有通過 sudo 執(zhí)行的命令都會被記錄,方便日后審計和追蹤:
- Ubuntu/Debian 系統(tǒng):/var/log/auth.log
- CentOS/RHEL 系統(tǒng):/var/log/secure
日志信息包含用戶名、執(zhí)行命令、終端信息、是否成功等關鍵信息:
6. 安全建議與最佳實踐
- 最小權限原則:只授權用戶執(zhí)行他們所需的最少命令
- 避免通配符(如 /bin/*):容易被濫用
- 謹慎使用 NOPASSWD:雖然方便,但可能成為安全隱患
- 定期審計授權規(guī)則:用戶、命令需求可能會變化