Sudo臨時提權配置
😄 Written by Zak Zhu
參考
- LinuxPanda/sudo的使用和配置(https://www.cnblogs.com/zhaojiedi1992/p/zhaojiedi_linux_009.html)
- Sudo(https://wiki.archlinux.org/index.php/Sudo_(簡體中文)#讓_sudo_使用_/etc/sudoers.d_中的文件)
- 馬哥linux視頻
- Aaron Kili/在Linux中設置sudo的十條sudoers實用配置(https://linux.cn/article-8145-1.html)
Sudo簡介
普通用戶可以通過sudo命令來臨時提權, 以擁有更高權限的用戶身份來執行一些管理命令, 並且能限定其僅能夠在某些主機上執行此類的命令, sudo命令操作過程還會被記錄在日志中, 以便於日后審計.
Sudo配置文件
-
配置文件:
建議: 請在/etc/sudoers.d/下新建文件來配置sudo, 這樣更為優雅 ~~
- /etc/sudoers
- /etc/sudoer.d/*
警告: 如果編寫sudo配置存在語法錯誤, 則會導致sudo不可用. 因此必須使用visudo編輯配置文件以防止出錯 !!
-
visudo命令:
visudo - safely edit the sudoers file
visudo [OPTIONS] [-f SUDOERS_FILE] # Options: -c, --check # check-only mode -f, --file=SUDOERS_FILE # specify sudoers file location -s, --strict # strict syntax checking
Sudo配置語法
詳細配置語法, 請man sudoers
Sudo allows glob characters to be used in host names, path names and command line arguments in the sudoers file.
條目格式
User Host=(Runas) Tag:Cmnd
# Note: Cmnd must use absolute path !!
別名示例
取別名時注意:
- 英文字母要求全大寫
- 可以使用下划線
-
User_Alias
定義用戶別名OPERATOR, 由develop組, zak用戶, tian用戶組成
User_Alias OPERATOR = %develop, zak, tian
-
Host_Alias
-
定義主機別名DB, 由主機名為mysql1, mysql2, oracle1, oracle2組成
Host_Alias DB = mysql*, oracle*
-
定義主機別名WEB, 由IP地址為192.168.1.1至192.168.1.14, 172.16.32.1.1至172.16.32.1.14組成
Host_Alias WEB = 192.168.1.0/28, 172.16.32.0/28
-
-
Runas_Alias
定義執行者別名OP, 以root和oracle的身份來執行命令
Runas_Alias OP = root, oracle
-
Cmnd_Alias
定義命令別名PROCESSES, 由/bin/nice, /bin/kill, /usr/bin/kill, /usr/bin/killall組成
Cmnd_Alias KILL = /bin/nice, /bin/kill, /usr/bin/kill, /usr/bin/killall
Sudo配置實例
-
在/etc/sudoers文件中已配置了一條wheel組的提權, 這條配置允許屬於wheel組的用戶可以使用sudo命令在所有主機上執行所有命令
-
提權網管可以在所有主機上使用網絡相關命令管理系統網絡
-
useradd netadmin ; passwd netadmin
-
visudo -f /etc/sudoers.d/netadmin
Cmnd_Alias NETTOOLS = /usr/sbin/ifconfig, /usr/sbin/route, /usr/bin/firewall-cmd, /usr/bin/netstat, /usr/sbin/ss, /usr/bin/ping netadmin ALL=(root) NETTOOLS
-
-
提權賬號管理者可以在所有主機上使用用戶相關命令管理系統用戶
注意: 提權配置完, 需嚴謹測試, 防止root用戶被修改 !!
-
useradd useradmin ; passwd useradmin
-
visudo -f /etc/sudoers.d/useradmin
Cmnd_Alias USERCMD = /usr/sbin/useradd, /usr/sbin/userdel, /usr/sbin/usermod, /usr/bin/passwd ?* Cmnd_Alias BAN_USERCMD = /usr/sbin/usermod * root, /usr/bin/passwd root, /usr/bin/passwd * root useradmin ALL=(root) USERCMD, !BAN_USERCMD
-
-
提權ansible用戶可以在所有主機上無密碼執行所有命令
visudo -f /etc/sudoers.d/ansible
ansible ALL=(ALL) NOPASSWD:ALL
Sudo日志記錄
sudo默認通過syslog來記錄操作日志, 可以在/var/log/secure文件里查看到sudo相關的日志. 不過, 我們也可以自定義sudo日志到指定文件.
自定義日志文件
visudo
添加如下內容:
Defaults log_host, log_year, logfile="/var/log/sudo.log"