Sahadan Notlar

Windows ve IIS servislerinde izin sorunlarını teşhis etmek

Durum: Farklı IIS/SQL/NTFS vakalarında kimlik ve izin sorunları teşhis edilip düzeltildi; aşağıdaki örnekler farklı olaylardan derlendi. Gizlilik: Gerçek müşteri bilgileri, kullanıcılar, IP’ler ve sertifika parmak izleri yayımlanmıyor; örnekleri kendi ortamınıza uyarlayın.

IIS’te erişim reddi görüldüğünde sorun dosya izni, Application Pool kimliği, Anonymous Authentication veya SQL Server yetkisi olabilir. Hepsine rastgele tam yetki vermek çözüm değildir.

Dört ayrı yetki katmanı

Geçmişte bir Classic ASP uygulamasında `NT AUTHORITY\IUSR` veritabanı bağlantı hatası; başka bir işte web uygulamasının fotoğraf klasörüne yazma ihtiyacı; ayrıca iki ayrı site için farklı havuzların SQL erişim yetkileri görüldü. Bunlar tek bir vaka gibi birleştirilmemelidir.

  • IIS Application Pool Identity: w3wp.exe işleminin hangi Windows hesabıyla çalıştığı.
  • Anonymous Authentication: istek işlenirken hangi kimliğin kullanılacağı.
  • NTFS ACL: fiziksel dosya/klasör okuma ve yazma yetkileri.
  • SQL Server login + database user + rol: bağlantı açma ve ilgili DB üzerinde işlem yapma hakları.

Belirtiye göre teşhis

  • 401/403 için Authentication modu, Authorization, NTFS ve istenen yol kontrol edilir.
  • 500 için IIS Failed Request Tracing, uygulama hatası ve olay günlüğü değerlendirilir.
  • SQL Login failed için SQL Error Log’daki gerçek kullanıcı kimliği incelenir.
  • Dosya yazma hatasında hedef klasör, dosya kilidi, App Pool Identity ve ACL karşılaştırılır.
  • Hata giderildiğinde geniş yetki yerine yalnızca gereken izin kalır.

Güvenli denetim komutları

App Pool’a yükleme klasöründe yazma hakkı gerekiyorsa yalnızca o klasörde Modify yetkisi verilir. Site köküne veya bütün diske gereksiz yazma izni vermeyin.

Import-Module WebAdministration
Get-ChildItem IIS:\AppPools | Select-Object Name,State
Get-ItemProperty IIS:\AppPools\SitePool | Select-Object -ExpandProperty processModel
icacls 'C:\inetpub\sites\SiteA\uploads'
Get-WinEvent -LogName Application -MaxEvents 50 | Select-Object TimeCreated,ProviderName,Id,Message

NTFS için yalnızca dar izin örneği

SQL örneğindeki satırlar yorum niteliğinde ve SSMS üzerinde ilgili SQL sözdizimiyle kullanılmalıdır. Kimlik fiziksel sunucular arasında taşınıyorsa sanal havuz hesabı yerine uygun domain service hesabı düşünülür.

icacls 'C:\inetpub\sites\SiteA\uploads' /grant 'IIS AppPool\SitePool:(OI)(CI)M'
# SQL aynı Windows makinesindeyse:
-- CREATE LOGIN [IIS APPPOOL\SitePool] FROM WINDOWS;
-- DB içinde yalnızca ihtiyaç duyulan rol/izinleri verin.

Çalışmanın sonucu

Farklı vakalarda doğru uygulama hesabının belirlenmesi, ilgili SQL kullanıcı haklarının verilmesi ve dar NTFS erişimiyle sorunlar çözüldü. Teşhisin anahtarı hatayı üreten katmanı doğru saptamak ve çözüm sonrası yetkiyi dar tutmaktır.

Güvenlik uygulamalarında her izin değişikliği kayıt altına alınmalı, testten önce geri dönüş planı hazırlanmalıdır.