16 puan yazan GN⁺ 2024-05-01 | 1 yorum | WhatsApp'ta paylaş

run0: systemd'nin sudo yerine geçen aracı

  • v256'ya dahil edilen yeni araç (aslında mevcut systemd-run'ın symlink edilmiş hali)
  • sudoya benzer şekilde çalışıyor, ancak SUID değil
  • Servis yöneticisinden hedef kullanıcının UID'siyle komut veya kabuk başlatmasını istiyor
    • İstemciden bağlam devralmadan, PID 1'den yeni fork edilen yalıtılmış bir yürütme bağlamında hedef komutu çağırıyor
  • run0 kendi yapılandırma dilini uygulamıyor, yetkilendirme için polkit kullanıyor.
  • Yetki yükseltme sırasında terminal arka planını kırmızımsı bir tona çevirerek ayrıcalıklı modda çalışıldığını bildiriyor. Pencere başlığında da yetki yükseltmeyi gösteren kırmızı bir nokta gösteriyor.
  • systemd-run'ın --property= anahtarını destekliyor; böylece çağrılan ayrıcalıklı komut/oturum için istenen servis ayarları belirtilebiliyor.

sudo'nun sorunları

  • sudo, ayrıcalıksız kullanıcıların kendi bağlamlarından çağırabildiği, görece büyük bir SUID ikilisidir.
  • Karmaşık bir yapılandırma dili, yüklenebilir eklentiler (LDAP vb.), ana makine adı eşleştirme gibi nedenlerle saldırı yüzeyi geniştir.
  • En büyük sorun SUID ikilisi olması. Ayrıcalıksız kod tarafından çağrılır ve ayrıcalıksız kodun kontrol ettiği yürütme bağlamını (ortam değişkenleri, süreç zamanlama özellikleri, cgroup atamaları, güvenlik bağlamı, aktarılan dosya tanımlayıcıları vb.) devralır. SUID ikililerinin bunları çok dikkatli biçimde temizlemesi gerekir, ancak çoğu zaman bunu yeterince iyi yapamazlar.

Diğerleri

  • run0 ile yalnızca kabuk değil, root yetkisiyle başka komutlar da çalıştırılabilir. Program sona erdiğinde terminal rengi eski haline döner.
  • Arka plan renginin otomatik değişmesi rahatsız edici olabilir, ancak --background= anahtarıyla değiştirilebilir veya devre dışı bırakılabilir.
  • sudoyu tamamen run0 ile değiştirmek mümkün görünüyor, ancak her dağıtımın tercihi farklı olabilir.
  • LDAP desteği gibi sudonun eklenti yaklaşımı birçok soruna sahip. polkit, systemd içinde güvenli şekilde yönetilen bir yöntemle genişletilebilir.
  • run0'ın bash betiği içinde çalışıp çalışmadığı, sudo ile uyumlu SUDO_xxx ortam değişkenleriyle kontrol edilebilir.

GN⁺ görüşü

  • Sık kullanılan sudoya alternatif olarak run0'ın sunulması etkileyici. SUID'in risklerinden kaçınırken sudonun avantajlarını da devralıyor gibi görünüyor.
  • Yetki yükseltmenin görsel olarak açıkça belirtilmesi, yanlışlıkla oluşabilecek zararı azaltmaya yardımcı olabilir. Terminal arka plan renginin değişmesi rahatsız edici olabilir ama seçeneklerle ayarlanabildiği için büyük bir sorun olmayacaktır.
  • polkit üzerinden yetki yapılandırması, sudoya göre daha az esnek olabilir; ancak bu durum sistemi daha basit hale getirip saldırı yüzeyini azaltabilir. polkit yapılandırma örneklerinin iyi belgelenmesi önemli görünüyor.
  • sudoya bağımlı mevcut betikler vb. için geçiş sürecinde bir süre daha sudonun birlikte sunulması gerekecek gibi duruyor. Ancak yeni ortamlarda en baştan run0 kullanmak daha iyi olabilir.
  • Uzun vadede run0'ın benimsenmesini vesile ederek SUID'i cesurca kaldırıp sistem yetkilerini sistem servislerinde merkezi olarak yöneten bir mimariye geçiş umuluyor. Güvenlik ve dayanıklılık açısından bunun doğru yön olduğu düşünülüyor.

1 yorum

 
GN⁺ 2024-05-01
Hacker News görüşleri
  • run0, sudodan farklı olarak istemciden hiçbir bağlam devralmadan PID 1'den yeni çatallanmış izole bir exec bağlamında hedef komutu çağırıyor. Bu, shell komutlarının genel kullanım senaryosuyla uyuşmuyor; pratikte sorun kaynağı olacak ve yaygın biçimde benimsenmesi zor olacaktır.
  • run0 yaygın biçimde kullanılırsa, sudo gibi davranan bir bayrak eklenecek ve insanlar da o bayrağı sürekli kullanacaktır. Bu sorun çıkardığında systemd projesi sudoyu ortadan kaldırmaya çalışabilir.
  • run0, yetki seviyeleri arasında katı IPC sınırları koyarak sudodan farklı bir yaklaşım benimsiyor. systemd kullanmak isteyenler için iyi bir yöntem olabilir.
  • sudo büyük ölçüde tek bir kişi tarafından bakımı yapılan bir proje.
  • run0ın davranışı birçok açıdan sudodan çok sshye daha yakın. localhosta SSH ile bağlanarak benzer bir araç uygulanabilir.
  • 1980'lerin ortasında Berkeley'in deneysel BSD klonunda benzer bir fikir test edildi, ancak her şeyi pipe üzerinden geçirmenin karmaşıklığı nedeniyle reddedildi. Bunun yerine devralınan ortamın denetimi güçlendirildi.
  • run0 için loglama, aktarılan ortam değişkenleri, sinyal işleme ve sudoedit yerine ne kullanılacağı gibi soru işaretleri var.
  • run0 dışında, Rust ile yazılmış, bellek güvenli ve daha az hatalı bir sudo gerçekleştirmesi de bulunuyor.
  • Son dönemde tek bir fiziksel makinede yalnızca tek bir kullanıcının bulunduğu durumlar daha yaygın; bu nedenle Unix yetki sistemini basitleştirme ihtiyacı var.
  • Yetki yükseltme sırasında terminal arka plan rengini kırmızıya çevirmek önemli bir unsur değil.