Introduction
Ansible is a powerful automation tool that simplifies the management of remote systems. When working with Ansible, it's crucial to understand and configure the default privilege escalation method to ensure secure and efficient execution of your playbooks. This tutorial will guide you through the process of setting the default privilege escalation method in Ansible.
Understanding Privilege Escalation
Privilege escalation is a fundamental concept in Ansible, which allows you to execute tasks with elevated permissions on the target hosts. This is particularly important when managing systems that require administrative or root-level access to perform certain actions, such as installing software, modifying system configurations, or managing services.
In Ansible, the default privilege escalation method is sudo, which allows the Ansible playbook to execute commands with the privileges of the sudo user on the target hosts. However, Ansible also supports other privilege escalation methods, such as su, pbrun, pfexec, doas, and runas, depending on the target system's requirements.
To understand the importance of privilege escalation in Ansible, consider the following scenario:
- hosts: webservers
tasks:
- name: Install Apache web server
apt:
name: apache2
state: present
In this example, the task of installing the Apache web server requires administrative privileges on the target hosts. If the Ansible playbook is executed without the appropriate privilege escalation method, the task will fail, and the web server will not be installed.
By configuring the default privilege escalation method in Ansible, you can ensure that all tasks that require elevated permissions are executed successfully, without the need to specify the escalation method for each individual task.
Configuring Default Escalation Method
To configure the default privilege escalation method in Ansible, you can use the become and become_method options in your Ansible configuration file (typically ansible.cfg) or in your playbook.
Configuring in ansible.cfg
In the ansible.cfg file, you can set the default privilege escalation method using the following configuration:
[privilege_escalation]
become=yes
become_method=sudo
This configuration sets the default privilege escalation method to sudo. You can change the become_method value to other supported methods, such as su, pbrun, pfexec, doas, or runas, depending on the target system's requirements.
Configuring in Playbook
Alternatively, you can configure the default privilege escalation method directly in your Ansible playbook using the become and become_method options at the play or task level. For example:
- hosts: webservers
become: yes
become_method: sudo
tasks:
- name: Install Apache web server
apt:
name: apache2
state: present
In this example, the become and become_method options are set at the play level, which means that all tasks in the playbook will use the sudo privilege escalation method by default.
You can also set the become and become_method options at the task level if you need to use a different escalation method for specific tasks:
- hosts: webservers
tasks:
- name: Install Apache web server
apt:
name: apache2
state: present
become: yes
become_method: sudo
By configuring the default privilege escalation method, you can ensure that your Ansible playbooks execute tasks with the appropriate permissions, without the need to specify the escalation method for each individual task.
Applying Privilege Escalation in Playbooks
Now that you understand how to configure the default privilege escalation method in Ansible, let's explore how to apply it in your playbooks.
Privilege Escalation at the Play Level
As mentioned earlier, you can set the become and become_method options at the play level to apply the default privilege escalation method to all tasks within the play. This is a convenient way to ensure that all tasks that require elevated permissions are executed successfully.
- hosts: webservers
become: yes
become_method: sudo
tasks:
- name: Install Apache web server
apt:
name: apache2
state: present
- name: Start Apache service
service:
name: apache2
state: started
In this example, the become and become_method options are set at the play level, which means that both the "Install Apache web server" and "Start Apache service" tasks will be executed with the sudo privilege escalation method.
Privilege Escalation at the Task Level
If you need to use a different privilege escalation method for specific tasks, you can set the become and become_method options at the task level. This can be useful when you have a mix of tasks that require different levels of permissions.
- hosts: webservers
tasks:
- name: Install Apache web server
apt:
name: apache2
state: present
become: yes
become_method: sudo
- name: Start Apache service
service:
name: apache2
state: started
become: yes
become_method: su
In this example, the "Install Apache web server" task uses the sudo privilege escalation method, while the "Start Apache service" task uses the su method.
By applying privilege escalation at the appropriate level in your Ansible playbooks, you can ensure that your tasks are executed with the necessary permissions, improving the reliability and security of your infrastructure management.
Summary
In this Ansible tutorial, you have learned how to configure the default privilege escalation method, which is essential for seamless and secure automation of your remote systems. By understanding and applying the appropriate escalation method, you can ensure that your Ansible playbooks run with the necessary permissions, enabling you to manage and maintain your infrastructure more effectively.


