Ansible 中 sudo 提权
sudo 简单介绍
sudo(superuser or another do)以超级管理员或其他人的身份执行命令。一般用于普通用户执行需要root权限的命令时进行的提权操作。
基本流程:
- 管理员需要先授权(修改/etc/sudoers文件)
- 普通用户以sudo的形式执行命令
- 可以通过sudo -l查看授权情况
sudoers 语法
sudo用于集中管理用户与权限文件为 /etc/sudoers,修改该文件有两种方式:
- visudo(带语法检查,默认没有颜色提示)
- vim /etc/sudoers(不带语法检查,默认有颜色提示)
使用visudo修改文件的操作方法与使用vim编辑器完全一致。
授权格式:用户或组 主机列表=(提权身份) [NOPASSWD]:命令列表
[root@pubserver ~]# sed '/#/d' /etc/sudoers
Defaults !visiblepw
Defaults always_set_home
Defaults match_group_by_gid
Defaults always_query_group_plugin
Defaults env_reset
Defaults env_keep = "COLORS DISPLAY HOSTNAME HISTSIZE KDEDIR LS_COLORS"
Defaults env_keep += "MAIL PS1 PS2 QTDIR USERNAME LANG LC_ADDRESS LC_CTYPE"
Defaults env_keep += "LC_COLLATE LC_IDENTIFICATION LC_MEASUREMENT LC_MESSAGES"
Defaults env_keep += "LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE"
Defaults env_keep += "LC_TIME LC_ALL LANGUAGE LINGUAS _XKB_CHARSET XAUTHORITY"
Defaults secure_path = /sbin:/bin:/usr/sbin:/usr/bin
root ALL=(ALL) ALL
%wheel ALL=(ALL) ALL
其中:
用户或组:给谁进行命令授权。使用组时,用”%组名”表示。
主机列表:定义允许使用的主机。可以使用IP地址、网段地址进行限制,也可以使用ALL表示不限制主机来源。
提权身份:定义以谁的身份。可以指定用户名,也可以使用ALL表示系统最高权限,缺省时表示root用户。
命令列表:可以使用命令的绝对路径来限制命令列表(如/usr/sbin/reboot),多个命令之间使用逗号进行间隔,也可以使用ALL表示不限制命令。
配置 sudo 提权
使用sudo提权,输入的是用户自己的密码,可以精准控制用户获取部分权限。执行的操作被记入日志,提高了系统安全性。
1、示例1
允许 mike 以root权限执行/sbin/下的所有命令,但是,禁止修改eth0网卡的参数,代码示意如下:
[root@svr7 ~]# visudo
.. ..
mike ALL=/sbin/*, !/sbin/ifconfig eth0
2、示例2
wheel组的用户无需验证可执行所有命令,代码示意如下:
[root@svr7 ~]# visudo
.. ..
%wheel ALL=(ALL) NOPASSWD: ALL