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 sudodur.

Görevlerinizde root iznine ihtiyaç olduğunda, Ansible “sudo” kullanarak yüksek hakları devreye sokar.

4) Diğer Become Parametreleri

  1. become_method: Hangi yöntemi kullanacağınızı belirtir. Varsayılan sudo. Diğer yöntemler: doas, pfexec, runas (Windows), vb.

    become_method: sudo
  2. 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:

  1. 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.

  2. 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:

  1. Komut satırında (en yüksek öncelik)

  2. Playbook içinde

  3. Inventory (hosts) dosyasında

  4. 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), ancak doas, 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?