shred ve wipe Komutları ile Dosyaları Güvenli Silme ve Kurtarılamaz Hale Getirme

Disk temizleme deyince aklınıza ne geliyor? Çöp kutusunu boşaltmak mı, yoksa rm -rf çalıştırıp işin bittiğini düşünmek mi? Yıllarca bu işi yapan biri olarak şunu söyleyeyim: standart silme işlemleri, veriyi gerçek anlamda yok etmiyor. Sadece dosya sistemine “bu alan artık kullanılabilir” diye işaret koyuyor. Veri hâlâ orada, bekliyor. Ve doğru araçlarla kurtarılabiliyor.

Bu yazıda shred ve wipe komutlarını ele alacağız. Neden gerekli oldukları, nasıl çalıştıkları ve hangi senaryolarda hangisini kullanmanız gerektiği hakkında gerçek dünya perspektifinden konuşacağız.

Neden Normal Silme Yetmez?

Linux’ta bir dosyayı rm ile sildiğinizde, işletim sistemi o dosyanın inode kaydını siler ve disk bloklarını “serbest” olarak işaretler. Ama bit seviyesinde veri yerinde durmaya devam eder. testdisk, photorec, foremost gibi araçlar bu blokları tarayarak silinmiş dosyaları geri getirebilir.

Peki bu neden önemli?

  • Elden çıkaracağınız bir sunucu diski var, üzerinde müşteri veritabanı var
  • Bulut ortamına gönderilecek bir VM image’ı hazırlıyorsunuz
  • Şirketten ayrılan bir çalışanın bilgisayarını başka birine devrediyorsunuz
  • Compliance gereksinimi var (KVKK, GDPR, ISO 27001 kapsamında)

Bu durumların hepsinde “silmiştim zaten” demek yeterli değil. İspat lazım, iz bırakmayan silme lazım.

shred Komutu

shred, GNU coreutils paketinin bir parçası, yani neredeyse her Linux sisteminde hazır geliyor. Kurulum gerektirmiyor, hemen kullanabilirsiniz.

Temel mantığı şu: dosyanın üzerine birden fazla kez rastgele veri yazar, böylece orijinal içerik geri kurtarılamaz hale gelir. Varsayılan olarak 3 geçiş yapar, son geçişte sıfır yazar ve ardından dosyayı siler.

Temel Kullanım

shred dosya.txt

Bu komut dosyanın üzerine yazar ama silmez. Dosya hâlâ dizinde görünür, içeriği anlamsız verilerle dolu olur.

shred -u dosya.txt

-u parametresi ile dosyayı yazma işleminin ardından siler. Gerçek dünyada genellikle bunu kullanırsınız.

shred -v -u dosya.txt

-v (verbose) parametresi ile her geçişi ekranda görebilirsiniz. Özellikle büyük dosyalarda ne kadar ilerlediğini takip etmek için kullanışlı.

Geçiş Sayısını Ayarlamak

Varsayılan 3 geçiş çoğu senaryo için yeterli. Ama paranoya seviyenize göre artırabilirsiniz:

shred -n 7 -v -u gizli_rapor.pdf

-n 7 ile 7 geçiş yaptırırsınız. DoD 5220.22-M standardı 7 geçiş önerir. Gutmann yöntemi ise 35 geçiş yapar, ama modern diskler için bu kadarına gerçekten gerek yok.

Tüm Diski Silmek

Sunucu emekliye alınıyorsa ya da disk elden çıkarılacaksa, tek tek dosya silmek değil tüm diski silmek gerekir:

shred -v -z -n 3 /dev/sdb

Burada -z parametresi son geçişte sıfır yazarak diskin “boş görünmesini” sağlar. /dev/sdb‘nin doğru disk olduğundan emin olmak için önce lsblk veya fdisk -l çalıştırın. Yanlış diski seçerseniz geri dönüş yok.

lsblk
# Diski doğruladıktan sonra:
shred -v -z -n 3 /dev/sdb

Belirli Bir Boyutu Silmek

Disk üzerinde sadece belirli miktarda veri silmek isterseniz:

shred -v -n 3 -s 500M /dev/sdb

-s 500M ile diskin ilk 500 MB’ını silersiniz. MBR ve başlangıç bölümlerini temizlemek için pratik olabilir.

shred Parametreleri Özeti

  • -n [sayı]: Üzerine yazma geçiş sayısı (varsayılan: 3)
  • -u: İşlem sonunda dosyayı sil
  • -v: İlerlemeyi göster (verbose)
  • -z: Son geçişte sıfır yaz
  • -s [boyut]: İşlenecek bayt miktarı
  • -f: İzin sorunlarını aşmak için dosya izinlerini değiştir
  • -x: Boyutu yuvarlama, tam belirtilen boyutu kullan

shred’in Sınırlamaları

Burada dürüst olmak lazım. shred her durumda %100 güvence vermez.

Journaling dosya sistemleri: ext3, ext4, XFS gibi journaling destekli dosya sistemlerinde, journal üzerine yazılan veriyi kaydedebilir. Bu durumda shred‘in garantisi zayıflar.

SSD’ler ve wear leveling: SSD’ler, disk ömrünü uzatmak için yazma işlemlerini farklı hücrelere dağıtır. shred bir blokun üzerine yazdığını düşünürken, SSD farklı bir fiziksel hücreye yazıyor olabilir. Bu yüzden SSD’lerde shred güvenilir değildir.

Log-structured dosya sistemleri: ZFS, Btrfs gibi sistemlerde benzer sorunlar yaşanabilir.

RAID ve LVM: Üzerine yazma işlemleri stripe’lara dağılabilir, bazı parçalar atlanabilir.

Bu sınırlamalar için ne yapılmalı? SSD’ler için donanım düzeyinde Secure Erase özelliği kullanılmalı (hdparm veya nvme-cli ile). Gerçekten hassas veriler için fiziksel imha en güvenli yol.

wipe Komutu

wipe, shred‘e göre daha az bilinen ama bazı açılardan daha kapsamlı bir araç. Paket yöneticinizden kurmanız gerekiyor:

# Debian/Ubuntu:
apt install wipe

# RHEL/CentOS/Fedora:
dnf install wipe
# ya da eski sistemlerde:
yum install wipe

wipe‘ın farkı; Peter Gutmann’ın araştırmasına dayanan çoklu geçiş algoritmalarını desteklemesi ve daha detaylı kontrol seçenekleri sunması. Aynı zamanda dizinleri de silebiliyor.

Temel Kullanım

wipe dosya.txt

Varsayılan olarak 34 geçiş yapar (Gutmann yöntemi), bu ciddi bir zaman alabilir.

wipe -r dizin/

-r parametresi ile bir dizini ve içindeki tüm dosyaları temizler. rm -rf‘in güvenli versiyonu gibi düşünebilirsiniz.

Hızlı Mod

34 geçiş çoğu zaman aşırı. Daha hızlı ama yeterince güvenli bir temizlik için:

wipe -q dosya.txt

-q (quick) parametresi geçiş sayısını 4’e indirir. Çoğu kurumsal senaryo için bu yeterli.

wipe -qr /home/eski_kullanici/

Ayrılan bir çalışanın home dizinini temizlemek için kullanışlı bir kombo.

wipe Parametreleri Özeti

  • -r: Dizinleri özyinelemeli olarak sil
  • -q: Hızlı mod (4 geçiş)
  • -s: Sessiz mod (çıktı yok)
  • -v: Verbose mod
  • -f: Onay sormadan zorla sil
  • -D: Disk aygıtı olarak kullan
  • -c: Silme sonrası dosya adını da temizle

Disk Aygıtında wipe Kullanımı

wipe -D /dev/sdb

Bu komut ile tüm bir disk aygıtını wipe edebilirsiniz. -D parametresi olmadan wipe dosya sistemi üzerinde çalışır, bu parametre ile ham aygıt üzerinde çalışır.

Gerçek Dünya Senaryoları

Senaryo 1: Sunucu Yeniden Kullanıma Açılıyor

Veri merkezinde bir bare-metal sunucu emekliye alınıp farklı bir projeye devredilecek. Üzerinde eski uygulama veritabanları var.

# Önce hangi diskler var, kontrol edelim
lsblk -o NAME,SIZE,TYPE,MOUNTPOINT

# İşletim sisteminin olmadığı veri diskini shred edelim
shred -v -z -n 3 /dev/sdb

# İşlem tamamlanınca kontrol için:
hexdump -C /dev/sdb | head -20

Son komut diskin başlangıcının sıfırlarla dolu olduğunu göstermelidir.

Senaryo 2: Hassas Log Dosyalarını Düzenli Silme

Uygulama kişisel veri içeren loglar üretiyor. Belirli bir süre saklandıktan sonra güvenli silinmesi gerekiyor. Bunu cron ile otomatize edebilirsiniz:

#!/bin/bash
# /usr/local/bin/secure_log_cleanup.sh

LOG_DIR="/var/log/uygulama"
DAYS_OLD=90

find "$LOG_DIR" -name "*.log" -mtime +$DAYS_OLD -print0 | 
  while IFS= read -r -d '' dosya; do
    shred -u -v -n 3 "$dosya"
    echo "$(date): $dosya silindi" >> /var/log/secure_cleanup.log
  done

Bu script’i crontab’a ekleyin:

# Her gün gece 2'de çalıştır
0 2 * * * /usr/local/bin/secure_log_cleanup.sh

Senaryo 3: SSH Private Key ve Sertifika Temizliği

Rotate edilen SSH key’leri veya süresi dolan sertifikaları güvenle silmek:

# Eski SSH anahtarlarını güvenle sil
shred -u -v ~/.ssh/id_rsa_eski
shred -u -v ~/.ssh/id_rsa_eski.pub

# GPG private key dosyalarını temizle
shred -u -v -n 5 /path/to/private.key

Senaryo 4: VM Snapshot ve Geçici Disk Temizliği

Buluta yüklenecek bir VM image’ı hazırlanıyor. İçinde test verisi kalmaması lazım:

# VM içinde çalıştırılacak temizleme
# Önce geçici dosyalar
find /tmp -type f -exec shred -u {} ;

# Swap'ı temizle
swapoff -a
shred -v -z /dev/sdaX  # swap partition
mkswap /dev/sdaX
swapon -a

# Kullanılmayan alanı sıfırla (image boyutunu küçültmek için)
dd if=/dev/zero of=/zero.fill bs=1M
rm /zero.fill

Bu son kısım önemli: disk imajını sıkıştırmadan önce boş alanı sıfırlarla doldurup silmek, hem güvenlik sağlar hem de imaj boyutunu küçültür.

Senaryo 5: KVKK Kapsamında Çalışan Ayrılışı

Şirketten ayrılan bir çalışanın bilgisayarındaki verileri KVKK gereksinimlerine uygun silmek:

# Çalışanın home dizinini wipe et
wipe -r -q -f /home/ahmet.yilmaz/

# Belge klasörü ayrıca shred
find /home/ahmet.yilmaz/Belgeler -type f -exec shred -u -n 3 {} ;

# Mail spool varsa
shred -u -n 3 /var/mail/ahmet.yilmaz

# İşlem logunu kaydet (audit trail için)
echo "$(date) - ahmet.yilmaz home dizini güvenle silindi - $(whoami)" 
  >> /var/log/kvkk_silme_kaydi.log

Alternatif Araçlar: dd ile Silme

shred ve wipe olmadan da güvenli silme yapılabilir. dd bu iş için kullanılabilir, özellikle sistem kurtarma modunda veya araçların kurulu olmadığı ortamlarda:

# Diski sıfırlarla doldur
dd if=/dev/zero of=/dev/sdb bs=4M status=progress

# Rastgele veriyle doldur
dd if=/dev/urandom of=/dev/sdb bs=4M status=progress

/dev/urandom ile rastgele veri yazmak, sıfır yazmaktan çok daha güvenli ama çok daha yavaş. Pratikte önce rastgele veri, ardından sıfır yazabilirsiniz:

dd if=/dev/urandom of=/dev/sdb bs=4M status=progress conv=noerror
dd if=/dev/zero of=/dev/sdb bs=4M status=progress conv=noerror

Silmenin Doğrulanması

İşlem yaptınız, ama gerçekten temizlendi mi? Kontrol etmek için:

# Disk üzerinde belirli bir string ara
strings /dev/sdb | grep -i "musteri|kullanici|password|sifre"

# Hexdump ile ilk sektörleri kontrol et
hexdump -C /dev/sdb | head -50

# foremost ile dosya kurtarma dene (boş gelirse başarılı)
foremost -i /dev/sdb -o /tmp/foremost_output/
ls -la /tmp/foremost_output/

Bu son adım kritik: eğer foremost hiçbir şey bulamazsa silme işlemi başarılı demektir. Audit için bu çıktıyı kaydedin.

Performans Konuları

Büyük diskler için shred ciddi zaman alabilir. 1 TB’lık bir disk için 3 geçiş saatlerce sürebilir. Bunu aklınızda tutarak planlama yapın.

Paralel silme için birden fazla diski aynı anda işleyebilirsiniz:

# Arka planda paralel shred
shred -v -z -n 3 /dev/sdb &
shred -v -z -n 3 /dev/sdc &
shred -v -z -n 3 /dev/sdd &

# Hepsinin bitmesini bekle
wait
echo "Tüm diskler temizlendi"

Sonuç

Güvenli dosya silme, özellikle kurumsal ortamlarda görmezden gelinemeyecek bir konu. shred ve wipe bu işi yapmak için sağlam araçlar, ama körü körüne her durumda yeterli olduklarını düşünmemek lazım.

HDD’ler için shred ile 3 ila 7 geçiş yapmanız çoğu senaryo için yeterli. SSD’ler için donanım düzeyinde güvenli silme (ATA Secure Erase) tercih edilmeli. Çok hassas veriler için fiziksel imha hâlâ en kesin çözüm.

Her silme işlemini kayıt altına alın. Audit trail olmadan yapılan temizlik, compliance açısından değersiz. Script’lerinize log satırları ekleyin, kimlerin hangi veriyi ne zaman sildiğini belgelendirin.

Son olarak: bir diski veya dosyayı silmeden önce gerçekten silmek istediğinizden emin olun. shred ve wipe‘ın sizi kurtaracak bir geri alma seçeneği yok.

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir