linux学习

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

留言

您的电子邮箱地址不会被公开。 必填项已用 * 标注