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:
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_user
: Root yerine farklı bir kullanıcı (ör.nginx
,mysql
) olup o kullanıcının haklarıyla işlem yapmak.
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:
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):
Daha güvenli kullanım için Ansible Vault önerilir.
Komut Satırında Parola Sorma:
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:
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?