Mehmet

WFN Üye
Konular
1,851
Mesajlar
1,852
Çözüm
0
Ticaret Puanı
0
Üyelik
1 Ay 6 Gün
Konum
YurtDışı
Web Sitesi
Var
Alanı
Google Adsense
1/1
Konu sahibi
En az ayrıcalık ilkesi, web uygulamasındaki her kullanıcıya, servise ve işlem hesabına yalnızca görevini yerine getirmek için zorunlu olan izinleri vermektir. Uygulamada bunun karşılığı; web sunucusunu ayrı bir işletim sistemi kullanıcısıyla çalıştırmak, veritabanında sınırlı bir rol kullanmak, yüklenen dosyaları çalıştırılamaz tutmak ve yönetim işlemlerini normal uygulama hesabından ayırmaktır.

İlke nasıl çalışır?​


Bir isteğin uygulamaya ulaşmasından veritabanına veya dosya sistemine erişmesine kadar her katmanda ayrı bir yetki sınırı bulunur. Bu sınırlar, bir uygulama açığının etkisini daraltır; ek bir ayrıcalık yükseltme açığının hiç bulunmadığına dair garanti vermez.

Örneğin bir blog uygulamasında şu ayrım yapılabilir:

BileşenGerekli izinVerilmemesi gereken yetki
Web uygulamasıKendi kodunu ve gerekli yapılandırmayı okuyabilmeTüm sunucuda yönetici yetkisi
Veritabanı rolüUygulamanın kullandığı tablolarda gerekli okuma ve yazma işlemleriRol oluşturma, sunucu ayarı değiştirme, tüm veritabanlarını yönetme
Yükleme diziniDosya oluşturma ve gerektiğinde okumaYüklenen dosyaları program olarak çalıştırma

Bu ayrım, tek bir hesabın hem web dosyalarını değiştirmesini hem de veritabanında sınırsız işlem yapmasını engeller. İzinler mümkün olan en dar kapsamda başlatılır; uygulamanın gerçekten ihtiyaç duyduğu bir işlem başarısız olursa yalnızca o işlem için gerekli izin eklenir.

Uygulanabilir kurulum planı​


Aşağıdaki örnekte uygulamanın Linux üzerinde webapp kullanıcısıyla, PostgreSQL veritabanının da app_runtime rolüyle çalıştığı varsayılmıştır. İsimleri kendi ortamınızdaki karşılıklarla değiştirin.

  1. Uygulama için ayrı bir işletim sistemi hesabı oluşturun ve web sürecini bu hesapla çalıştırın. Bu hesapta kabukla oturum açmayı zorunlu bırakmayın; yalnızca uygulamanın dosyalarına ve ihtiyaç duyduğu çalışma dizinlerine erişim verin.
  2. Kod, yapılandırma ve yükleme dizinlerini ayırın. Kod dizinini çalışma hesabı için mümkünse yalnızca okunabilir tutun; yükleme dizininde yazma izni verin. Yükleme dizininde sunucunun betik veya ikili dosya çalıştırmasını engelleyin.
  3. Uygulamanın gerektirdiği veritabanı işlemlerini listeleyin. Örneğin ziyaretçi işlemleri için yazı okumaya, yorum eklemeye ve oturum kaydı oluşturmaya izin gerekebilir; ancak şema silme veya yeni veritabanı rolü oluşturma izni gerekmez.
  4. Çalışma rolünü yönetici rolünden ayırın. Şema oluşturma ve migration işlemleri için ayrı bir bakım hesabı kullanın; bu hesabın parolasını veya erişim bilgisini normal web sürecine vermeyin.
  5. Gizli bilgileri kod deposuna ve herkese açık web dizinine koymayın. Uygulama hesabının yalnızca kendi gizli yapılandırmasını okuyabilmesini sağlayın; yedek, günlük ve başka uygulamaların sırlarını aynı erişim alanına bırakmayın.
  6. Yönetim işlemlerini ayrı bir yetki akışıyla sınırlandırın. Normal ziyaretçi isteğiyle dosya silme, kullanıcı rolü değiştirme veya sistem komutu çalıştırma gibi işlemler doğrudan yapılmamalıdır; gerekiyorsa ayrıca kimlik doğrulama, yetki kontrolü ve işlem günlüğü uygulanmalıdır.
  7. Uygulamanın temel işlevlerini test edin. Sayfa okuma, giriş, kayıt, dosya yükleme ve yönetim işlemlerini ayrı ayrı deneyin. Beklenen sonuç, her işlevin çalışması ve uygulama hesabının ilgisiz dosya, tablo veya yönetim işlemine erişememesidir.

Somut örnek: veritabanı yetkisini daraltma​


Bir PostgreSQL uygulamasında çalışma rolüne yalnızca gerekli tablo işlemleri verilebilir. Örneğin uygulamanın yalnızca posts tablosunu okuması ve comments tablosuna yeni yorum eklemesi gerekiyorsa, rolün tüm veritabanına yönetici yetkisiyle bağlanması yerine bu işlemler açıkça tanımlanır:

SQL:
GRANT USAGE ON SCHEMA public TO app_runtime;
GRANT SELECT ON TABLE public.posts TO app_runtime;
GRANT INSERT ON TABLE public.comments TO app_runtime;

Bu örnek, uygulama rolünün önceden oluşturulduğu, nesne sahibi/superuser olmadığı ve doğrudan, grup üyeliğinden veya PUBLIC üzerinden geniş hak almadığı varsayımıyla yalnız gerekli izinleri ekler; mevcut fazla izinleri kendiliğinden kaldırmaz. Şemadaki bir REVOKE komutu da tablo, rol üyeliği ve PUBLIC haklarını topluca temizlemez. Var olan kurulumda etkin hakları ve nesne sahipliğini önce denetleyin. Şema ve tablo adlarını kendi test nesnelerinizle eşleştirin. Başarılı uygulama sonucunda uygulama gerekli sorguları çalıştırır; yetki dışı bir sorguda veritabanı erişim hatası alınır. Hata görülürse doğrudan yönetici yetkisi vermek yerine hatanın hangi tablo veya işlemden kaynaklandığını belirleyip yalnızca o izni ekleyin. Serial/nextval kullanılan bir yorum kimliği varsa ilgili sequence için USAGE gibi ayrıca gereken en dar hak da bulunabilir; gerçek sequence adını doğrulayın. INSERT ... RETURNING ile okunan sütunlar için SELECT gereksinimini de hesaba katın. Şema değişiklikleri gerekiyorsa bunları ayrı bakım rolüyle çalıştırın.

Uygulama içindeki nesne erişimini de her istekte kontrol edin: örneğin kullanıcı yalnız kendi belgesini indirebilmeli, URL’deki kimliği değiştirerek başka kullanıcının belgesine erişememelidir. Yönetim düğmesini arayüzde gizlemek sunucudaki yetki kontrolünün yerine geçmez. Tanımlanmamış erişimleri varsayılan olarak reddedin.

Sık yapılan hatalar​


Web sunucusunu yönetici hesabıyla çalıştırmak: Bir uygulama açığı, dosya sisteminin ve sunucunun tamamında etkili olabilir. Uygulama için ayrı hesap kullanın.

Tüm dosyalara yazma izni vermek: Kod dizininin yazılabilir olması, ele geçirilen uygulamanın kendi kodunu kalıcı olarak değiştirmesini kolaylaştırır. Yazma ihtiyacını yalnızca önceden belirlenmiş çalışma ve yükleme dizinleriyle sınırlayın.

Veritabanı yöneticisini uygulamaya vermek: Uygulama sorgu çalıştırabilse de rol oluşturma veya tablo silme yetkisine çoğu zaman ihtiyaç duymaz. Yönetici hesabını yalnızca bakım işlemlerinde kullanın.

İzin ekleyip geri değerlendirmemek: Geçici teşhis için verilen geniş yetki kalıcı hale gelebilir. Her değişikliği kaydedin, gereksiz izinleri kaldırın ve düzenli olarak uygulamanın gerçek erişim listesini gözden geçirin.

Kaynaklar​



Sık sorulan sorular​


En az ayrıcalık yalnızca dosya ve veritabanı izinlerinden mi oluşur?​


Hayır. İşletim sistemi hesabı, ağ erişimi, bulut servis rolleri, API anahtarları, yönetici ekranları ve uygulama içindeki kullanıcı rolleri de aynı ilkeye göre sınırlandırılmalıdır.

Bir işlev için gereken izni nasıl belirlerim?​


İşlevi dar bir test ortamında çalıştırın, hangi kaynaklara gerçekten ihtiyaç duyduğunu günlüklerden ve uygulama hatalarından belirleyin, sonra yalnızca bu kaynaklara izin verin. Test tamamlandığında geçici geniş yetkileri kaldırın.

Yükleme dizinine yazma izni vermek güvenli midir?​


Yazma ihtiyacı varsa gereklidir; ancak bu dizin koddan ayrılmalı, içerik türü ve dosya adı doğrulanmalı, yüklenen içerik doğrudan çalıştırılmamalı ve mümkünse uygulamanın genel web kökünün dışında tutulmalıdır.
 

Sende şimdi bize katılmak ister misin?

Kayıt ol

Bize katılım kolay ve ücretsizdir!

Konuyu görüntüleyenler

Bu konuyu şu anda görüntüleyen üye bulunmuyor.