Privilege Escalation
1) Privilege Escalation Nedir?
Bir sistemde farklı kullanıcıların farklı izin seviyeleri (privileges) vardır. Normal kullanıcıların her işlemi yapmaya yetkisi yoktur; bazıları root veya yönetici izni (sudo vb.) gerektirir.
Yetki Yükseltme (Privilege Escalation): Geçici olarak daha yüksek bir izin seviyesine (genellikle root gibi) geçmektir.
Günlük hayattan örnek: “Admin” isimli bir kullanıcıysanız, paket kurmak ya da sistem dosyalarını değiştirmek istediğinizde
sudo
komutu kullanarak “root hakları” elde edersiniz.
Ansible da aynı mantığı uygular. Normal bir kullanıcıyla sisteme bağlandığınızda, root izni gerektiren görevlerde (ör. paket kurulumu, servis ayarları) “become” (eski adıyla “sudo”) özelliğini kullanarak geçici olarak yüksek yetki kullanır.
2) Neden Gerekli?
Pek çok yönetimsel görev (örn. paket yükleme, servis başlatma, sistem dosyası düzenleme) normal kullanıcı izinleriyle yapılamaz.
Ansible, root olarak bağlanmak yerine genellikle daha güvenli bir yöntemi tercih eder: Normal kullanıcıyla SSH’ye bağlanıp sadece gerektiği anda yetki yükseltir.
3) Ansible’da Become Direktifi (Sudo)
Playbook içinde ya da envanter (hosts) dosyasında belirtebilirsiniz. En basit haliyle, playbook içinden:
- name: Install Nginx
hosts: webservers
become: yes
tasks:
- name: Install package
yum:
name: nginx
state: present
become: yes
→ Görevleri root haklarıyla çalıştır (sudo).Varsayılan yükseltme yöntemi çoğunlukla
sudo
dur.
Görevlerinizde root iznine ihtiyaç olduğunda, Ansible “sudo” kullanarak yüksek hakları devreye sokar.
4) Diğer Become Parametreleri
become_method
: Hangi yöntemi kullanacağınızı belirtir. Varsayılansudo
. Diğer yöntemler:doas
,pfexec
,runas
(Windows), vb.become_method: sudo
become_user
: Root yerine farklı bir kullanıcı (ör.nginx
,mysql
) olup o kullanıcının haklarıyla işlem yapmak.become_user: nginx
Bu parametreleri playbook, inventory, konfigürasyon dosyası (ansible.cfg) veya komut satırı düzeyinde tanımlayabilirsiniz.
5) Envanter (Hosts) Dosyasından Örnek
İsterseniz envanter dosyanızda her host için hangi yetki yükseltme ayarlarını kullanacağınızı belirtebilirsiniz. Mesela:
bashKopyala[webservers]
web1 ansible_host=192.168.1.101 ansible_user=admin ansible_become=yes ansible_become_method=sudo
Bu durumda web1’e admin
kullanıcı olarak SSH yapacak, görevleri sudo
ile yükselterek çalıştıracak.
6) Parola Gerekiyorsa?
Bazı sunucularda sudo
yaparken bir sudo parolası (sudo password) gerekir. Bunu iki şekilde halledebilirsiniz:
Envanterde Parola Tanımlamak (riskli, düz metin):
web1 ansible_host=192.168.1.101 ansible_user=admin ansible_become_pass=SuperSecret123
Daha güvenli kullanım için Ansible Vault önerilir.
Komut Satırında Parola Sorma:
ansible-playbook site.yml --ask-become-pass
Playbook çalışırken sizden interaktif olarak sudo parolasını ister.
7) Switch User (become_user) Kullanımı
Sistemde bir uygulama kullanıcı hesabı varsa (örn.
nginx
,mysql
), o kullanıcı hesabına geçerek dosyaları düzenlemeniz gerekebilir.Örneğin, bir görevi “nginx” kullanıcısı haklarıyla yapmak için:
- name: Configure Nginx hosts: webservers become: yes become_user: nginx tasks: - name: Create config file in Nginx home template: src: nginx.conf.j2 dest: /home/nginx/nginx.conf
Bu şekilde Ansible, önce normal kullanıcıyla SSH yapar, sonra sudo su - nginx
benzeri bir komutla o hesaba geçip görevi gerçekleştirir.
8) Ayarların Öncelik Sırası
Ansible’da aynı ayar (ör. become
, become_user
) birden fazla yerde tanımlanabilir:
Komut satırında (en yüksek öncelik)
Playbook içinde
Inventory (hosts) dosyasında
ansible.cfg (en düşük öncelik)
Hangisinde tanımlarsanız, daha üst öncelikli bir yerde tanımlanmadığı sürece o ayar geçerli olur.
9) Özet
Yetki yükseltme (Privilege Escalation), Ansible’daki “become” mekanizmasıyla root veya başka bir kullanıcıya geçer.
Sudo varsayılan yöntemdir (
become_method: sudo
), ancakdoas
,pfexec
vb. kullanılabilir.Parola gerektiren sunucularda
ansible_become_pass
veya--ask-become-pass
kullanabilirsiniz.Switch user senaryosu için
become_user
parametresiyle, başka bir sistem hesabına geçerek görevleri yürütmek mümkündür.
Last updated
Was this helpful?