ansible提权之become_method与become_flags详解

目录

  • 常见become_method
  • become_flags
      • [`su` 常见选项总结](#su 常见选项总结)
      • [`sudo` 常见选项总结](#sudo 常见选项总结)
      • [`pbrun` 常见选项总结](#pbrun 常见选项总结)
      • [`pfexec` 常见选项总结](#pfexec 常见选项总结)
      • [`doas` 常见选项总结](#doas 常见选项总结)
      • 示例
        • [使用 `sudo` 的示例:](#使用 sudo 的示例:)
        • [使用 `pbrun` 的示例:](#使用 pbrun 的示例:)
        • [使用 `pfexec` 的示例:](#使用 pfexec 的示例:)
        • [使用 `doas` 的示例:](#使用 doas 的示例:)
  • 配置方式
      • [1. 配置文件](#1. 配置文件)
      • [2. 命令行参数](#2. 命令行参数)
      • [3. Playbook 配置](#3. Playbook 配置)
      • [4. Inventory 文件配置](#4. Inventory 文件配置)

常见become_method

become_method用于指定在远程主机上提升权限的方法。常见的方法包括:

  1. sudo : 通过sudo命令提升权限,通常是从普通用户提升到超级用户(root)。

    • 示例:become_method: sudo
    • 特点:需要在目标主机上配置sudoers文件,指定哪些用户有权限使用sudo。
  2. su : 通过su命令切换到其他用户,通常是从普通用户切换到超级用户。

    • 示例:become_method: su
    • 特点:需要提供目标用户的密码,适用于不支持sudo的系统。
  3. pbrun : 使用Privilege Manager的pbrun命令提升权限。

    • 示例:become_method: pbrun
    • 特点:适用于使用Privilege Manager的企业环境。
  4. pfexec : 使用Solaris上的pfexec命令提升权限。

    • 示例:become_method: pfexec
    • 特点:适用于Solaris系统。
  5. doas : 使用OpenBSD上的doas命令提升权限。

    • 示例:become_method: doas
    • 特点:适用于OpenBSD系统。

become_flags

become_flags用于指定在使用become_method提升权限时的附加命令行标志。这些标志根据具体的become_method而有所不同。

以下是其他常见 become_method 及其 become_flags 配置的总结:

su 常见选项总结

  • -c "command": 执行指定的命令。
  • -l: 模拟完整的登录,加载用户的环境变量。
  • -r : 模拟完整的登录,加载用户的环境变量(与 -l 类似)。
  • -m-p: 保留当前环境变量。
  • -s /bin/bash: 指定要使用的 shell。
  • -f : 快速模式,不执行 .profile 文件。

sudo 常见选项总结

  • -H : 切换用户的 HOME 环境变量为目标用户的主目录。
  • -S: 从标准输入读取密码,通常用于非交互式环境。
  • -u username: 指定以哪个用户身份执行命令,默认是 root。
  • -b: 在后台执行命令。
  • -i: 模拟初次登录,加载用户的环境变量。
  • -E: 保留用户的环境变量,不重置环境变量。
  • -k: 强制重新输入密码,不使用缓存的认证。

pbrun 常见选项总结

  • -u username: 指定以哪个用户身份执行命令。
  • -p policy: 使用特定的安全策略执行命令。
  • -n: 不提示输入密码。
  • -t timeout: 指定命令的超时时间。

pfexec 常见选项总结

  • -s: 使用指定的 shell 执行命令。
  • -u username: 指定以哪个用户身份执行命令。

doas 常见选项总结

  • -u username: 指定以哪个用户身份执行命令,默认是 root。
  • -n: 不提示输入密码。
  • -s: 使用指定的 shell 执行命令。

示例

使用 sudo 的示例:
yaml 复制代码
- hosts: all
  become: yes
  become_method: sudo
  become_flags: '-H -u username'
  tasks:
    - name: 安装HTTP服务器
      apt:
        name: apache2
        state: present
使用 pbrun 的示例:
yaml 复制代码
- hosts: all
  become: yes
  become_method: pbrun
  become_flags: '-u root -n'
  tasks:
    - name: 执行自定义命令
      command: /path/to/your/command
使用 pfexec 的示例:
yaml 复制代码
- hosts: all
  become: yes
  become_method: pfexec
  become_flags: '-s'
  tasks:
    - name: 执行自定义命令
      command: /path/to/your/command
使用 doas 的示例:
yaml 复制代码
- hosts: all
  become: yes
  become_method: doas
  become_flags: '-u username -n'
  tasks:
    - name: 执行自定义命令
      command: /path/to/your/command

配置方式

1. 配置文件

你可以在 Ansible 的配置文件(通常是 ansible.cfg)中设置 become_methodbecome_flags。在配置文件中添加以下内容:

ini 复制代码
[defaults]
become=True
become_method=su
become_flags=-r

2. 命令行参数

在执行 Ansible 命令时,可以使用命令行参数来设置 become_methodbecome_flags。例如:

sh 复制代码
ansible-playbook -i inventory playbook.yml --become --become-method=su --become-flags="-r"

3. Playbook 配置

在 Playbook 中,你可以在全局或任务级别设置 become_methodbecome_flags

全局配置
yaml 复制代码
- hosts: all
  become: yes
  become_method: su
  become_flags: '-r'
  tasks:
    - name: 执行自定义命令
      command: /path/to/your/command
任务级别配置
yaml 复制代码
- hosts: all
  become: yes
  tasks:
    - name: 使用 su 提升权限并执行命令
      become_method: su
      become_flags: '-r'
      command: /path/to/your/command

4. Inventory 文件配置

在 Inventory 文件中,你可以为特定主机或主机组设置 become_methodbecome_flags

ini 复制代码
[all:vars]
ansible_become=yes
ansible_become_method=su
ansible_become_flags=-r

[webservers]
webserver1.example.com
webserver2.example.com

[dbservers]
dbserver1.example.com
dbserver2.example.com
相关推荐
小池先生1 分钟前
服务请求出现偶发超时问题,经查服务本身没问题,问题出现在nginx转发。
运维·服务器·nginx
java_logo9 分钟前
vllm-openai Docker 部署手册
运维·人工智能·docker·ai·容器
MANONGMN20 分钟前
Linux 通配符与正则表达式(含实战案例+避坑指南)
linux·运维·正则表达式
带土124 分钟前
18 .shell编程-正则表达式
linux·正则表达式
勤源科技42 分钟前
运维知识图谱的构建与应用
运维·人工智能·知识图谱
jiyuzzz1 小时前
Docker部署WordPress及相关配置
运维·docker·容器
爱吃甜品的糯米团子1 小时前
Linux 学习笔记之进程管理、网络基础与常用软件安装
linux·网络·学习
Micro麦可乐1 小时前
Centos Stream 9 中Docker安装出现 download.docker.com:443 的问题解决
linux·docker·centos·podman
poemyang2 小时前
你的程序为何卡顿?从LINUX I/O三大模式寻找答案
linux·rpc
---学无止境---2 小时前
Linux中早期控制台初始化和注册的实现
linux