FUSE ile Şifreli Arşivi Mount Etme: archivemount ve encfs Kullanımı

Üretim ortamında yüz gigabaytlık bir arşiv dosyasıyla çalışmak zorunda kaldığınızda, dosyayı tamamen açıp işleminizi bitirip tekrar sıkıştırmak gerçekten can sıkıcı bir döngüye dönüşebiliyor. Bunu bir de şifreli arşivle yapmak zorunda olduğunuzu düşünün. İşte tam bu noktada archivemount ve encfs ikilisi hayat kurtarıcı oluyor. Bu yazıda FUSE (Filesystem in Userspace) altyapısı üzerinden arşivleri ve şifreli dizinleri doğrudan mount edip nasıl çalışabileceğimizi, gerçek dünya senaryolarıyla birlikte ele alacağım.

FUSE Nedir ve Neden Önemli?

FUSE, kernel modülü yazmaya gerek kalmadan kullanıcı alanında dosya sistemi oluşturmanızı sağlayan bir Linux çekirdek arabirimidir. Normal şartlarda dosya sistemi yazmak kernel geliştirme bilgisi gerektirir, hata yaparsanız sistemin çökmesine yol açabilirsiniz. FUSE bu riski ortadan kaldırıyor. Kullanıcı alanında çalışan bir süreç, çekirdekle konuşarak sanki gerçek bir dosya sistemiymiş gibi davranabiliyor.

archivemount ve encfs işte bu FUSE altyapısını kullanıyor. Yani root yetkisi olmadan bile kendi kullanıcı alanınızda bu araçları çalıştırabilirsiniz. Bu, paylaşımlı sunucularda çalışan sysadminler için büyük bir avantaj.

# FUSE modülünün yüklü olup olmadığını kontrol et
lsmod | grep fuse

# Yüklü değilse
sudo modprobe fuse

# FUSE versiyonunu kontrol et
fusermount --version

Kurulum

Çoğu dağıtımda bu araçlar varsayılan olarak gelmiyor. Hızlıca kuralım:

# Debian/Ubuntu tabanlı sistemler
sudo apt update
sudo apt install archivemount encfs fuse

# RHEL/CentOS/Rocky Linux
sudo dnf install archivemount encfs fuse fuse-libs

# Arch Linux
sudo pacman -S archivemount encfs fuse3

# Kullanıcının fuse grubuna eklenmesi (bazı sistemlerde gerekli)
sudo usermod -aG fuse $USER

Kurulumdan sonra newgrp fuse komutuyla grubu aktif edebilir ya da yeni bir oturum açabilirsiniz.

archivemount ile Arşive Dosya Sistemi Gibi Erişmek

archivemount temel olarak libarchive kütüphanesi üzerine inşa edilmiş ve tar, zip, iso ve daha birçok format için destek sunuyor. Çalışma mantığı şu: arşiv dosyasını bir mount noktasına bağlıyorsunuz ve o mount noktasına normal dizin gibi davranıyorsunuz.

Temel Kullanım

# Mount noktası oluştur
mkdir -p /tmp/arsiv_mount

# Bir tar.gz arşivini mount et
archivemount /yedekler/uygulama_yedek_2024.tar.gz /tmp/arsiv_mount

# Artık normal dizin gibi kullanabilirsin
ls -la /tmp/arsiv_mount/
cat /tmp/arsiv_mount/config/app.conf

# İşin bitince unmount et
fusermount -u /tmp/arsiv_mount

Burada dikkat edilmesi gereken nokta: archivemount varsayılan olarak salt okunur (read-only) modda bağlanıyor. Bu aslında bir güvenlik özelliği. Eğer arşive yazma işlemi yapmak istiyorsanız --no-cache seçeneğiyle birlikte kullanmanız gerekiyor ama dürüst olmak gerekirse yazma desteği hâlâ deneysel sayılıyor, kritik verilerle denememenizi tavsiye ederim.

Parametreler

-o readonly: Açıkça salt okunur modda bağla (varsayılan davranış zaten bu)

-o noatime: Dosyalara erişim zamanını güncelleme, performansı artırır

-o allow_other: Diğer kullanıcıların da mount noktasına erişmesine izin ver (fuse.conf’ta user_allow_other aktif olmalı)

–no-cache: Yazma modunda çalışırken önbelleği devre dışı bırakır

-o debug: Hata ayıklama için FUSE işlemlerini terminale döker

# Performans odaklı mount
archivemount -o noatime /yedekler/buyuk_arsiv.tar.bz2 /tmp/arsiv_mount

# Diğer kullanıcıların erişimine açık mount
archivemount -o allow_other /yedekler/paylasilan_arsiv.tar /tmp/arsiv_mount

# Hata ayıklama modu
archivemount -o debug /yedekler/sorunlu_arsiv.tar.gz /tmp/arsiv_mount

Gerçek Dünya Senaryosu: Yedek Arşivinden Tek Dosya Çekme

Diyelim ki her gece çalışan bir yedekleme scripti var ve /yedekler/ altında günlük tar.gz dosyaları birikiyor. Her biri 20-30 GB. Bir müşteri aradı ve dedi ki “3 Kasım’daki müşteri veritabanı yedeğinden sadece customers_export.sql dosyasını almam lazım.” Normal yöntemle:

# Klasik ve yavaş yöntem - 25GB açılır
tar -xzf /yedekler/yedek_2024-11-03.tar.gz customers_export.sql

archivemount ile:

mkdir -p /tmp/yedek_mount
archivemount /yedekler/yedek_2024-11-03.tar.gz /tmp/yedek_mount

# Sadece ihtiyacın olan dosyayı kopyala
cp /tmp/yedek_mount/veritabani/customers_export.sql /tmp/

# Unmount
fusermount -u /tmp/yedek_mount

İkinci yöntem arşivi tamamen açmadan, sadece ihtiyacınız olan dosyayı erişilebilir kılıyor. Disk alanı ve zaman açısından ciddi bir fark.

encfs ile Şifreli Dizin Oluşturma

encfs her dosyayı ayrı ayrı şifreleyerek şifreli bir dizin katmanı oluşturuyor. İki dizinle çalışıyor: biri şifreli verilerin saklandığı kaynak dizin, diğeri bu şifreli verilerin çözülmüş haliyle erişildiği mount noktası. Siz mount noktasına yazarsınız, encfs arkaplanda şifreleyerek kaynak dizine kaydeder.

encfs Kurulumu ve İlk Yapılandırma

# Şifreli veri için dizinler
mkdir -p ~/.sifreli_depo          # Şifreli dosyalar burada saklanır
mkdir -p ~/acik_depo              # Şifreli dosyaların açık hali burada görünür

# encfs'i başlat
encfs ~/.sifreli_depo ~/acik_depo

İlk çalıştırdığınızda sizi bir yapılandırma sihirbazıyla karşılar:

  • p (paranoia mode): En güçlü şifreleme ayarları, AES-256 ile şifreler
  • s (standard mode): Dengeli güvenlik ve performans
  • x (expert mode): Her şeyi kendiniz yapılandırırsınız

Üretim ortamı için paranoia modu tercih edin. Şifrenizi girdikten sonra ~/acik_depo mount edilmiş olacak, oraya yazdığınız her şey otomatik şifrelenerek ~/.sifreli_depo‘ya kaydedilecek.

encfs Parametreleri ve Seçenekler

–stdinpass: Şifreyi stdin’den okur, script otomasyonunda kullanılır

–extpass=komut: Şifreyi dış bir komuttan alır (örneğin şifre yöneticisinden)

–idle=dakika: Belirtilen süre işlem yapılmazsa otomatik unmount eder

–public: Mount noktasına root dahil herkesin erişmesine izin verir

–reverse: Tersine şifreleme, açık dizini şifreli olarak gösterir (yedekleme için kullanışlı)

# 10 dakika işlem olmazsa otomatik unmount
encfs --idle=10 ~/.sifreli_depo ~/acik_depo

# Şifreyi çevre değişkeninden al (güvenli olmayan ortamlarda kullanmayın)
echo "sifrem" | encfs --stdinpass ~/.sifreli_depo ~/acik_depo

# Tersine mod: Açık dizini şifreli arşive yedeklemek için
encfs --reverse ~/hassas_belgeler ~/.yedek_sifreli

encfs ile Günlük Çalışma

# Mount işlemi
encfs ~/.sifreli_depo ~/acik_depo

# Dosyalarla çalış
cp gizli_rapor.pdf ~/acik_depo/
vim ~/acik_depo/sunucu_sifreleri.txt

# Çalışma bitince unmount
fusermount -u ~/acik_depo

# Mount noktasını kontrol et
mount | grep encfs

archivemount ve encfs Birlikte Kullanımı

İşte bu yazının asıl ilginç kısmı burası. Şifreli bir arşiv üzerinde çalışmanız gerektiğinde iki katmanlı bir yaklaşım kullanabilirsiniz: önce encfs ile şifreyi çözüp arşive ulaşın, sonra archivemount ile arşivi mount edin.

Senaryo: Şifreli Yedek Deposundan Doğrudan Dosya Erişimi

Diyelim ki güvenlik politikası gereği tüm yedekleme arşivleri şifreli bir dizinde tutuluyor ve içlerinden sadece belirli konfigürasyon dosyalarına erişmeniz gerekiyor:

#!/bin/bash
# sifreli_arsiv_eriş.sh

SIFRELI_DEPO="/mnt/yedek_depo/.sifreli"
ACIK_DEPO="/tmp/acik_yedek"
ARSIV_MOUNT="/tmp/arsiv_mount"
HEDEF_ARSIV="sunucu_konfig_2024-11.tar.gz"

# Mount noktalarını oluştur
mkdir -p "$ACIK_DEPO" "$ARSIV_MOUNT"

echo "[1/3] Şifreli depo mount ediliyor..."
encfs "$SIFRELI_DEPO" "$ACIK_DEPO"

echo "[2/3] Arşiv mount ediliyor..."
archivemount "$ACIK_DEPO/$HEDEF_ARSIV" "$ARSIV_MOUNT"

echo "[3/3] Erişim hazır: $ARSIV_MOUNT"
ls -la "$ARSIV_MOUNT"

# Kullanıcı işini bitirince temizle
read -p "İşleminiz bitti mi? (Enter'a basın)"

echo "Temizleniyor..."
fusermount -u "$ARSIV_MOUNT"
fusermount -u "$ACIK_DEPO"

echo "Tüm mount noktaları kapatıldı."

Senaryo: Uzak Sunucudaki Şifreli Arşivden Seçici Geri Yükleme

Bir diğer gerçek dünya durumu: sshfs ile uzak sunucuyu mount edip, oradaki şifreli arşivi de archivemount ile açıp doğrudan çalışmak. Üç katmanlı bir mount yapısı kurmak mümkün:

# Uzak sunucuyu mount et
mkdir -p /tmp/uzak_sunucu
sshfs [email protected]:/yedekler /tmp/uzak_sunucu

# Uzaktaki şifreli dizini encfs ile aç
mkdir -p /tmp/sifreli_acik
encfs /tmp/uzak_sunucu/.sifreli /tmp/sifreli_acik

# İçindeki arşivi archivemount ile bağla
mkdir -p /tmp/arsiv_icerik
archivemount /tmp/sifreli_acik/uygulama_yedek.tar.gz /tmp/arsiv_icerik

# Artık uzaktaki şifreli arşivdeki dosyaları yerel dizin gibi görürsünüz
ls /tmp/arsiv_icerik/

# Temizlik - ters sırayla unmount et
fusermount -u /tmp/arsiv_icerik
fusermount -u /tmp/sifreli_acik
fusermount -u /tmp/uzak_sunucu

Burada ters sırayla unmount etmek kritik. Alt katmanı önce kapatırsanız üst katmandaki bağımlı mount’lar sorun çıkarır.

Otomatik Mount için /etc/fstab Yapılandırması

Sürekli aynı şifreli dizini mount ediyorsanız, bunu bir şekilde otomatize etmek isteyebilirsiniz. encfs için /etc/fstab‘a doğrudan yazamazsınız çünkü şifre sorulması gerekiyor, ama bir systemd servisi veya PAM entegrasyonu yapılabilir. Daha basit bir alternatif olarak şifreyi güvenli bir şekilde saklayıp script üzerinden çağırabilirsiniz:

# Şifreyi güvenli dosyaya yaz (izinlere dikkat!)
echo "guclu_sifre_buraya" > ~/.encfs_sifre
chmod 600 ~/.encfs_sifre

# Mount scriptini oluştur
cat > ~/bin/mount_sifreli.sh << 'EOF'
#!/bin/bash
encfs --extpass="cat ~/.encfs_sifre" ~/.sifreli_depo ~/acik_depo
echo "Şifreli depo mount edildi."
EOF

chmod +x ~/bin/mount_sifreli.sh

Şifreyi bir dosyada saklamak ideal değil elbette. Daha güvenli bir yaklaşım pass veya gpg-agent entegrasyonu:

# pass ile şifre yönetimi
encfs --extpass="pass show encfs/depo-sifre" ~/.sifreli_depo ~/acik_depo

Hata Ayıklama ve Yaygın Sorunlar

“Transport endpoint is not connected” Hatası

Bu hatayı genellikle FUSE işlemi çökünce görebilirsiniz:

# Zorla unmount et
fusermount -uz /tmp/arsiv_mount
# veya
sudo umount -l /tmp/arsiv_mount

archivemount ile Büyük Arşivlerde Yavaşlık

archivemount arşiv içindeki dizin yapısını indexlemek için arşivi baştan sona tarar. 10 GB üzeri arşivlerde bu indexleme birkaç dakika sürebilir. Bunu göz önünde bulundurun:

# Indexleme süresini ölç
time archivemount /yedekler/buyuk_arsiv.tar.gz /tmp/mount_test
# Bağlandıktan sonra hız normale döner

encfs v1.9+ ile Uyumluluk Uyarıları

Yeni encfs sürümleri eski yapılandırmaları güvensiz bulabilir ve uyarı verir. Şunu görürseniz endişelenmeyin:

# Uyarıyı bastırmak için (güvenlik riskini kabul ediyorsunuz demektir)
ENCFS6_CONFIG=~/.encfs6.xml encfs ~/.sifreli_depo ~/acik_depo

Ama daha doğru çözüm, yeni bir encfs dizini oluşturup eski verileri taşımak.

Güvenlik Notları

encfs kullanırken bazı önemli noktalara dikkat etmek gerekiyor:

  • Metadata sızıntısı: encfs dosya içeriklerini şifreler ama dosya sayısı, boyutu gibi metadata bilgileri açık kalır. Gerçek yüksek güvenlik senaryoları için eCryptfs veya LUKS daha uygun
  • Swap alanı: Şifresi çözülmüş veriler belleğe alındığında swap’a yazılabilir. Kritik verilerle çalışıyorsanız swap şifrelemeyi düşünün
  • Mount noktası izinleri: allow_other seçeneğini gereksiz yere kullanmayın
  • Şifre gücü: encfs şifrenizi ne kadar güçlü seçerseniz saldırılara karşı o kadar dayanıklı olur, brute-force koruması yoktur
# Şifreli dizinde hangi dosyaların olduğunu bile gizlemek istiyorsanız
# ve metadata koruması önemliyse, LUKS tercih edin:
sudo cryptsetup luksFormat /dev/sdb1
sudo cryptsetup open /dev/sdb1 gizli_depo
sudo mkfs.ext4 /dev/mapper/gizli_depo
sudo mount /dev/mapper/gizli_depo /mnt/gizli

Sonuç

archivemount ve encfs kombinasyonu, arşivleme ve şifreleme işlemlerini disk alanından tasarruf ederek ve performanslı biçimde yönetmek isteyen sysadminler için güçlü bir araç seti sunuyor. Büyük arşivleri tamamen açmadan içlerindeki dosyalara erişmek, özellikle yedek geri yükleme senaryolarında ciddi zaman kazandırıyor. encfs ise kurulumu kolay, şifre yönetimi konusunda esnek bir şifreli depolama çözümü sağlıyor.

Tabii bu araçların sınırları var. archivemount yazma desteği konusunda olgun değil, encfs ise gerçek anlamda paranoid güvenlik senaryoları için yeterli değil. Ama günlük operasyonel ihtiyaçlar için, özellikle geliştirme ve test ortamlarında, bu ikilinin FUSE ile sunduğu esneklik çok değerli.

Aynı mantığı farklı FUSE dosya sistemleriyle genişletebilirsiniz: s3fs ile S3 bucket’ları, rclone mount ile bulut depoları, sshfs ile uzak sunucular. FUSE ekosistemi bir kez kavrandığında, dosya sistemi kavramı bambaşka bir anlam kazanıyor.

Bir yanıt yazın

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