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 小时前
8位机械工程师如何共享一台图形工作站算力?
linux·服务器·网络
Peter_chq2 小时前
【操作系统】基于环形队列的生产消费模型
linux·c语言·开发语言·c++·后端
一坨阿亮3 小时前
Linux 使用中的问题
linux·运维
dsywws4 小时前
Linux学习笔记之vim入门
linux·笔记·学习
幺零九零零5 小时前
【C++】socket套接字编程
linux·服务器·网络·c++
wclass-zhengge5 小时前
Docker篇(Docker Compose)
运维·docker·容器
李启柱5 小时前
项目开发流程规范文档
运维·软件构建·个人开发·设计规范
小林熬夜学编程6 小时前
【Linux系统编程】第四十一弹---线程深度解析:从地址空间到多线程实践
linux·c语言·开发语言·c++·算法
力姆泰克6 小时前
看电动缸是如何提高农机的自动化水平
大数据·运维·服务器·数据库·人工智能·自动化·1024程序员节
BPM_宏天低代码6 小时前
低代码 BPA:简化业务流程自动化的新趋势
运维·低代码·自动化