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
sudokomutu 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: presentbecome: 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
become_method: Hangi yöntemi kullanacağınızı belirtir. Varsayılansudo. Diğer yöntemler:doas,pfexec,runas(Windows), vb.become_method: sudobecome_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=sudoBu 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=SuperSecret123Daha güvenli kullanım için Ansible Vault önerilir.
Komut Satırında Parola Sorma:
ansible-playbook site.yml --ask-become-passPlaybook ç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,pfexecvb. kullanılabilir.Parola gerektiren sunucularda
ansible_become_passveya--ask-become-passkullanabilirsiniz.Switch user senaryosu için
become_userparametresiyle, başka bir sistem hesabına geçerek görevleri yürütmek mümkündür.
Last updated
Was this helpful?