Windows ortamında dosya güvenliği denilince akla ilk gelen çözümlerden biri EFS (Encrypting File System) ve onun komut satırı aracı olan cipher‘dır. Pek çok sysadmin bu aracı sadece “şifreli dosya var mı yok mu” kontrol etmek için kullanır, oysa cipher komutu çok daha fazlasını sunuyor. Bu yazıda cipher komutunu derinlemesine inceleyeceğiz, gerçek dünya senaryolarında nasıl kullanacağınızı göstereceğiz ve bu aracı günlük operasyonlarınıza nasıl entegre edeceğinizi ele alacağız.
EFS ve Cipher Nedir?
EFS, Windows NT 3.1’den bu yana var olan bir NTFS özelliğidir. Dosyaları ve klasörleri kullanıcı bazında şifreler. Şifreleme işlemi kullanıcının sertifikasına bağlıdır ve yalnızca o kullanıcı (ya da Recovery Agent olarak tanımlanmış kişi) dosyayı açabilir.
cipher komutu ise EFS ile etkileşime geçmenin komut satırı yoludur. GUI ile yapabileceğiniz her şeyi, hatta GUI’den yapamayacağınız bazı şeyleri cipher ile yapabilirsiniz. Özellikle şu alanlarda hayat kurtarır:
- Toplu şifreleme/şifre çözme işlemleri
- Script ile otomatik EFS yönetimi
- Silinen dosyaların kurtarılmasını engellemek için boş alanı silme
- EFS sertifika yönetimi
- Recovery Agent yapılandırması
Temel Cipher Parametreleri
Bir araçla ciddi iş yapmadan önce parametrelerini iyi tanımak gerekir. cipher /? dediğinizde uzun bir çıktı alırsınız ama en kritik olanları şunlardır:
-e: Belirtilen dosya veya klasörü şifreler -d: Şifrelenmiş dosya veya klasörün şifresini çözer -s: Alt dizinlere de işlemi uygular (recursive) -a: Hem dosyalara hem klasörlere işlem uygular -i: Hatalar olsa bile işleme devam eder -f: Zaten şifrelenmiş dosyaları da yeniden şifreler (force) -q: Sessiz mod, sadece kritik bilgileri gösterir -h: Gizli ve sistem dosyalarını da dahil eder -k: Mevcut kullanıcı için yeni EFS sertifikası ve anahtar oluşturur -r: Recovery Agent sertifikası ve özel anahtarı oluşturur -u: Tüm şifrelenmiş dosyalardaki kullanıcı anahtarlarını günceller -n: Güncellemeleri yapmaz, sadece listeler (u ile kullanılır) -w: Belirtilen diskteki silinmiş verileri overwrite eder -x: EFS sertifikasını ve anahtarını dışa aktarır -l: Sertifika thumbprint’lerini listeler -adduser: Şifrelenmiş dosyaya başka bir kullanıcı ekler -removeuser: Şifrelenmiş dosyadan kullanıcı kaldırır -rekey: Şifrelenmiş dosyaları yeni anahtarla yeniden şifreler
Temel Kullanım Senaryoları
Tek Bir Dosyayı Şifreleme
En basit senaryo ile başlayalım. Diyelim ki C:Confidential klasöründe hassas bir rapor dosyanız var:
cipher /e C:ConfidentialQ4_Raporu.xlsx
Komut çalıştıktan sonra dosyanın adı Windows Explorer’da yeşil renkte görünecektir. Bu, EFS şifrelemesinin aktif olduğunu gösterir.
Şifreleme durumunu doğrulamak için:
cipher /c C:ConfidentialQ4_Raporu.xlsx
Bu komut size dosyanın şifrelenip şifrelenmediğini, hangi kullanıcıların erişebildiğini ve hangi sertifikanın kullanıldığını gösterir.
Tüm Klasörü Şifreleme
Gerçek dünyada tek tek dosya şifrelemek pek pratik değil. Genellikle tüm bir klasörü ve alt klasörlerini şifrelemek istersiniz:
cipher /e /s:C:Confidential
Bu komut C:Confidential altındaki tüm dosyaları ve alt klasörleri şifreler. Dikkat edilmesi gereken nokta şu: Bu komut mevcut dosyaları şifreler, ancak klasörü de şifrelenmiş olarak işaretler. Yani buraya yeni bir dosya kopyaladığınızda o dosya da otomatik olarak şifrelenir.
Gizli ve sistem dosyalarını da dahil etmek istiyorsanız:
cipher /e /s:C:Confidential /h /a
Şifre Çözme İşlemi
Şifrelemeyi kaldırmak da benzer şekilde çalışır:
cipher /d /s:C:Confidential
Eğer yalnızca belirli bir dosyanın şifresini çözmek isterseniz:
cipher /d C:ConfidentialQ4_Raporu.xlsx
Gelişmiş Kullanım: Gerçek Dünya Senaryoları
Senaryo 1: Çalışan Ayrılığında Güvenli Temizlik
Bir çalışan şirketten ayrıldığında, bilgisayarındaki verilen başkaları tarafından kurtarılmasını istemezsiniz. cipher /w komutu tam bu iş için var. Silinmiş dosyaların bulunduğu alanı üç kez üzerine yazarak kurtarılmaz hale getirir:
cipher /w:C:
Bu işlem biraz zaman alır çünkü diskteki tüm boş alanı işliyor. Büyük disklerde saatler sürebilir. Bir script ile bunu otomatize etmek isteyebilirsiniz:
@echo off
echo Guvenli disk temizligi basliyor...
echo Tarih: %date% Saat: %time%
cipher /w:C:
echo Temizlik tamamlandi.
echo Tarih: %date% Saat: %time%
Bu script’i çalışan bilgisayarlarını teslim almadan önce çalıştırmak iyi bir pratik.
Senaryo 2: Toplu Kullanıcı EFS Sertifika Yönetimi
Active Directory ortamında birden fazla kullanıcı için EFS sertifikası oluşturup güncellemek gerekebilir. Özellikle sertifika süresi dolduğunda ya da yeni bir PKI yapısına geçtiğinizde bu işlem kritik önem taşır.
Mevcut kullanıcının EFS sertifikasını listelemek için:
cipher /l
Yeni bir EFS anahtar çifti oluşturmak için:
cipher /k
Bu komut yeni bir sertifika oluşturur ama eski şifrelenmiş dosyalar hala eski sertifikayla şifrelenmiş olur. Yeni anahtar ile tüm dosyaları güncellemek için:
cipher /u
Eğer ne değişeceğini önce görmek istiyorsanız:
cipher /u /n
/n parametresi değişiklikleri uygulamadan sadece listeler. Büyük ortamlarda önce bunu çalıştırıp çıktıyı incelemenizi öneririm.
Senaryo 3: Recovery Agent Yapılandırması
Domain ortamında en kötü senaryo şudur: Kullanıcı şirketten ayrıldı, EFS ile şifrelenmiş kritik dosyalar var ve sertifika da gitti. Bu durumda Recovery Agent olmadan dosyalar sonsuza kadar erişilemez olur.
Recovery Agent sertifikası oluşturmak için:
cipher /r:C:EFS_RecoveryRecoveryAgent
Bu komut iki dosya oluşturur: .cer uzantılı sertifika ve .pfx uzantılı özel anahtar dosyası. Komut çalıştırıldığında .pfx dosyası için şifre oluşturmanız istenecek. Bu şifreyi asla unutmayın ve güvenli bir yerde saklayın.
Sonra bu recovery agent sertifikasını Group Policy üzerinden tüm domain’e dağıtabilirsiniz:
Computer Configuration > Windows Settings > Security Settings >
Public Key Policies > Encrypting File System
Buraya sertifikayı ekledikten sonra, domain’deki tüm yeni EFS şifrelemelerinde recovery agent otomatik olarak dahil edilecektir.
Senaryo 4: Çok Kullanıcılı EFS Erişimi
Bazen bir dosyaya birden fazla kişinin erişmesi gerekir. EFS normalde tek kullanıcılıdır ama /adduser parametresi ile bunu aşabilirsiniz:
cipher /adduser /certhash:SERTIFIKA_THUMBPRINT C:SharedProje_Plani.docx
Önce hedef kullanıcının sertifika thumbprint’ini almanız gerekiyor. Bunun için:
cipher /l
Veya PowerShell ile daha detaylı bilgi:
certutil -user -store My
Bir kullanıcıyı kaldırmak için:
cipher /removeuser /certhash:SERTIFIKA_THUMBPRINT C:SharedProje_Plani.docx
Batch Script ile Otomatik EFS Yönetimi
Gerçek ortamlarda bu işlemleri tek tek yapmak yerine script ile otomatize etmek çok daha verimli. İşte kullanabileceğiniz kapsamlı bir EFS yönetim scripti:
@echo off
setlocal EnableDelayedExpansion
:: EFS Durum Kontrol ve Raporlama Scripti
:: Kullanim: efs_rapor.bat [KLASOR_YOLU]
set TARGET_DIR=%1
if "%TARGET_DIR%"=="" set TARGET_DIR=C:Users%USERNAME%Documents
echo ============================================
echo EFS Sifreleme Durum Raporu
echo Tarih: %date%
echo Hedef: %TARGET_DIR%
echo ============================================
echo.
:: Klasordeki sifreli dosyalari listele
echo Sifreli dosyalar:
cipher /s:"%TARGET_DIR%" | findstr /C:"E" | findstr /V "Listed"
echo.
:: Sifreli olmayan dosyalari listele
echo Sifresiz dosyalar:
cipher /s:"%TARGET_DIR%" | findstr /C:"U"
echo.
echo Rapor tamamlandi.
Bu script’i Task Scheduler’a ekleyip haftalık çalıştırırsanız, hangi dosyaların şifreli olduğunu düzenli olarak takip edebilirsiniz.
Toplu Şifreleme Scripti
@echo off
:: Belirli klasorleri toplu sifreleme
:: Sysadmin tarafindan haftalik calistirilmali
set LOG_FILE=C:Logsefs_islem_%date:~-4,4%%date:~-7,2%%date:~-10,2%.log
echo EFS Toplu Sifreleme Basladi >> %LOG_FILE%
echo Tarih/Saat: %date% %time% >> %LOG_FILE%
:: Sifrelenmesi gereken klasorler
set DIRS=C:Confidential C:HR_Data C:FinanceReports
for %%d in (%DIRS%) do (
if exist "%%d" (
echo Isleniyor: %%d >> %LOG_FILE%
cipher /e /s:"%%d" /h /a /q
if !errorlevel! equ 0 (
echo BASARILI: %%d >> %LOG_FILE%
) else (
echo HATA: %%d sifreleme basarisiz >> %LOG_FILE%
)
) else (
echo UYARI: %%d bulunamadi >> %LOG_FILE%
)
)
echo EFS Toplu Sifreleme Tamamlandi >> %LOG_FILE%
echo ================================ >> %LOG_FILE%
Cipher ile Güvenlik Denetimi
Cipher yalnızca şifreleme için değil, güvenlik denetimi için de kullanışlıdır. Bir sunucuda hangi dosyaların şifrelendiğini ve hangilerinin şifrelenmediğini raporlamak için:
cipher /s:C:SensitiveData /q 2>&1 | findstr /C:"[U]" > C:Reportsunencrypted_files.txt
Bu komut şifrelenmemiş dosyaları bir rapor dosyasına yazar. Güvenlik denetimlerinizde bu çıktıyı kullanabilirsiniz.
Belirli bir kullanıcının şifrelenmiş dosyalarını bulmak için ise şu yaklaşımı kullanabilirsiniz:
cipher /u /n 2>&1 | findstr /i "kullanici_adi" > C:Reportsuser_encrypted_files.txt
Sık Karşılaşılan Sorunlar ve Çözümleri
“Access is denied” hatası: EFS şifrelemesi yaparken bu hatayla karşılaşıyorsanız, büyük ihtimalle dosya başka bir kullanıcıya ait veya siz Administrator hesabıyla çalışıyorsunuzdur. EFS kullanıcı bazlı çalışır, Administrator hesabı otomatik olarak erişim sahibi değildir. İlgili kullanıcı hesabıyla giriş yapıp işlemi tekrarlayın.
“The EFS certificate has expired” uyarısı: Sertifika süresi dolmuş demektir. Önce yeni sertifika oluşturun, ardından dosyaları güncelleyin:
cipher /k
cipher /u
Şifrelenmiş dosyaları kopyalayınca şifreleme kayboluyor: Hedef dosya sistemi NTFS değilse bu normal. FAT32 veya exFAT EFS’i desteklemez. Ayrıca ağ üzerinden kopyalama da şifrelemeyi kaldırabilir. Robocopy kullanarak şifrelemeyi koruyarak kopyalama yapabilirsiniz:
robocopy C:Kaynak C:Hedef /E /EFSRAW
/EFSRAW parametresi EFS şifreli dosyaları şifreli halde kopyalar.
“No private key found” hatası: Bu ciddi bir sorun. Kullanıcının EFS özel anahtarı kaybolmuş veya bozulmuş demektir. Bu durumda:
- Recovery Agent varsa, recovery agent sertifikasını içe aktarıp dosyaları açabilirsiniz
- Eski bir sertifika yedeğiniz varsa onu geri yükleyin
- Hiçbiri yoksa maalesef dosyalar kurtarılamaz
Bu nedenle EFS sertifikalarını düzenli olarak dışa aktarıp güvenli yerde saklamak hayati önem taşır:
cipher /x:C:BackupEFS_Sertifika_Yedek
Bu komut mevcut EFS sertifikasını ve özel anahtarı .pfx formatında dışa aktarır.
Domain Ortamında En İyi Pratikler
Active Directory ortamında EFS kullanıyorsanız şu noktalara dikkat etmeniz gerekiyor:
Recovery Agent mutlaka yapılandırın. Kullanıcılar şirketten ayrıldığında, hesapları devre dışı bırakıldığında ya da sertifika bozulduğunda dosyalara erişebilmek için bu şart. Recovery Agent sertifikasını çok güvenli bir yerde, tercihen offline olarak saklayın.
Sertifika yedekleme politikası belirleyin. Her kullanıcının EFS sertifikasını profile dahil edip domain controller’a yedekleyin. Group Policy ile bunu zorunlu hale getirebilirsiniz.
EFS sertifikalarını otomatik yenileme için PKI altyapısı kurun. Windows Server CA ile EFS sertifikalarını otomatik olarak yenileyebilirsiniz. Manuel takip hem zaman alır hem de unutulabilir.
Şifreleme kullanımını loglamak için denetim politikası aktif edin. Group Policy üzerinden:
Computer Configuration > Windows Settings > Security Settings >
Advanced Audit Policy > Object Access > File System
Bu şekilde kim ne zaman EFS şifrelemesi kullandı veya değiştirdi takip edebilirsiniz.
EFS’i BitLocker ile karıştırmayın. EFS kullanıcı bazlı, BitLocker disk bazlı şifrelemedir. İkisi birbirinin alternatifi değil, tamamlayıcısıdır. Disk şifrelemesi için BitLocker, dosya bazlı erişim kontrolü için EFS kullanın.
Cipher Kullanımında Dikkat Edilmesi Gereken Noktalar
Şifreli dosyaları yedekleme sistemleri her zaman düzgün handle etmeyebilir. Windows Server Backup EFS’i destekler ama üçüncü parti backup araçlarınızın EFS farkındalığını kontrol edin. Aksi takdirde şifreli dosyalar yedeklenemeyebilir veya yanlış yedeklenebilir.
Şifrelenmiş dosyaları email veya bulut depolama gibi sistemlere gönderirken şifrelemenin kaybolabileceğini unutmayın. Bu sistemler genellikle NTFS’i anlamaz.
Temp dosyalarına dikkat edin. Bazı uygulamalar şifreli dosyaları açarken geçici kopyalar oluşturur ve bu kopyalar temp klasöründe şifresiz kalabilir. Bu nedenle temp klasörlerini de şifrelemeyi düşünebilirsiniz:
cipher /e /s:"%TEMP%"
Sonuç
cipher komutu, Windows ortamında dosya güvenliğini yönetmek için güçlü ve geniş kapsamlı bir araç. Temel şifreleme işlemlerinden recovery agent yönetimine, toplu operasyonlardan güvenlik denetimine kadar pek çok alanda kullanılabilir. Özellikle şu üç konuda cipher‘ı iş akışınıza mutlaka dahil etmenizi öneririm:
Birincisi, hassas veri içeren klasörler için otomatik şifreleme scriptleri oluşturun ve bunları periyodik olarak çalıştırın. İkincisi, domain ortamında Recovery Agent’ı mutlaka yapılandırın ve sertifikayı güvenle saklayın. Üçüncüsü, çalışan ayrılığı süreçlerinize cipher /w ile boş alan silmeyi ekleyin.
EFS mükemmel bir çözüm değil, BitLocker veya diğer tam disk şifreleme çözümleriyle birlikte kullanıldığında katmanlı bir güvenlik mimarisi oluşturur. Ama doğru yapılandırıldığında ve doğru senaryolarda kullanıldığında, özellikle kullanıcı bazlı veri gizliliği gerektiren durumlarda oldukça etkilidir. Komut satırından yönetilebilmesi de onu büyük ölçekli ortamlarda scriptlenebilir ve otomatize edilebilir yapıya kavuşturur.