Takip et

Duplicity ve GPG Kullanarak Ubuntu’da Güvenli Otomatik Yedeklemeler Nasıl Yapılır?

Duplicity ve GPG Kullanarak Ubuntu’da Güvenli Otomatik Yedeklemeler Nasıl Yapılır? Giriş: Neden Güvenli ve Otomatik Yedekleme? Günümüz dijit

Duplicity ve GPG Kullanarak Ubuntu’da Güvenli Otomatik Yedeklemeler Nasıl Yapılır?

Giriş: Neden Güvenli ve Otomatik Yedekleme?

Günümüz dijital dünyasında veri, en değerli varlıklarımızdan biridir. Kişisel belgelerden kritik iş verilerine kadar her şey, dijital ortamlarda saklanmaktadır. Ancak donanım arızaları, yazılım hataları, yanlışlıkla silmeler, siber saldırılar veya doğal afetler gibi pek çok risk, verilerimizin kaybolmasına yol açabilir. Veri kaybı, hem bireyler hem de kurumlar için ciddi maliyetlere, itibar kaybına ve operasyonel aksaklıklara neden olabilir. Bu nedenle, düzenli ve güvenli yedeklemeler yapmak, veri güvenliği stratejisinin temel taşlarından biridir.

Yedekleme sürecinin manuel olarak yürütülmesi, hem zaman alıcı hem de hata yapmaya açık bir yöntemdir. Bu durum, yedeklemelerin sıklığını azaltabilir veya tamamen atlanmasına neden olabilir. İşte tam da bu noktada otomatik yedekleme sistemleri devreye girer. Otomatik yedeklemeler, insan müdahalesi olmadan belirli aralıklarla çalışarak verilerinizin güncel kalmasını ve potansiyel kayıplara karşı korunmasını sağlar.

Güvenlik, yedekleme stratejisinin bir diğer kritik yönüdür. Yedeklenen veriler, orijinal veriler kadar hatta daha fazla hassas olabilir. Bu verilerin yetkisiz kişilerin eline geçmesi, ciddi gizlilik ve güvenlik ihlallerine yol açabilir. Bu nedenle, yedeklenen verilerin şifrelenmesi ve güvenli bir şekilde depolanması zorunludur.

Bu makalede, Ubuntu işletim sistemi üzerinde Duplicity ve GPG (GNU Privacy Guard) araçlarını kullanarak nasıl güvenli ve otomatik yedekleme sistemleri kuracağımızı ayrıntılı olarak ele alacağız. Duplicity, güçlü özellikleri ve çeşitli depolama arka uçlarına (backend) destek vermesiyle öne çıkan, bant genişliği açısından verimli bir yedekleme aracıdır. GPG ise, yedeklenen verilerinizin şifrelenmesini sağlayarak gizliliğini ve bütünlüğünü koruyan, endüstri standardı bir şifreleme çözümüdür. Bu iki aracın birleşimi, verilerinizi hem yerel hem de uzak konumlarda güvenle saklamanız için güçlü bir çözüm sunar.

Duplicity Nedir ve Neden Tercih Edilmeli?

Duplicity, şifreli, bant genişliği açısından verimli ve uzaktan yedekleme yapabilen bir Python tabanlı yedekleme aracıdır. GNU Genel Kamu Lisansı (GPL) altında yayınlanan açık kaynaklı bir yazılımdır. Duplicity’nin temel amacı, yedekleme işlemini mümkün olduğunca güvenli ve verimli hale getirmektir.

Duplicity’nin Temel Özellikleri

* Artımlı Yedeklemeler (Incremental Backups): Duplicity, ilk tam yedeklemeden sonra yalnızca değişen veya yeni eklenen dosyaları yedekleyerek disk alanı ve bant genişliğinden tasarruf sağlar. Bu, özellikle büyük veri kümeleri için yedekleme sürelerini önemli ölçüde kısaltır.
* Şifreleme: Yedeklenen tüm veriler, GPG kullanılarak şifrelenir. Bu, verilerin depolandığı yerde yetkisiz erişime karşı korunmasını sağlar. Şifreleme, hem veri gizliliğini hem de bütünlüğünü garanti eder.
* Çeşitli Depolama Arka Uçları (Backends): Duplicity, yerel dosya sistemlerinin yanı sıra SSH/SFTP, Amazon S3, Google Cloud Storage, WebDAV, Rackspace Cloud Files, Backblaze B2, Microsoft OneDrive ve daha fazlası gibi birçok uzak depolama hizmetini destekler. Bu esneklik, yedekleme hedefinizi seçme konusunda size geniş bir yelpaze sunar.
* Bant Genişliği Verimliliği: Artımlı yedeklemelerin yanı sıra, Duplicity rsync algoritmasına benzer bir yaklaşımla sadece değişen blokları yedekleyerek bant genişliğini daha da optimize eder.
* İmzalı Manifest Dosyaları: Yedekleme setinin bütünlüğünü ve kimliğini doğrulamak için GPG ile imzalanmış manifest dosyaları kullanır. Bu, yedekleme verilerinin manipüle edilmediğinden emin olmanızı sağlar.
* Kolay Geri Yükleme: Yedeklenen verilerin geri yüklenmesi, belirli bir zaman noktasına veya belirli dosyalara kadar esnek seçenekler sunar.

GPG (GNU Privacy Guard) Nedir ve Yedeklemelerdeki Rolü?

GPG veya GNU Privacy Guard, OpenPGP standardının (RFC 4880) ücretsiz bir uygulamasıdır. E-postaların, dosyaların ve diğer verilerin şifrelenmesi ve dijital olarak imzalanması için kullanılan güçlü bir kriptografik araçtır. GPG, özellikle hassas verilerin gizliliğini ve bütünlüğünü sağlamak için yaygın olarak kullanılır.

GPG’nin Şifreleme Mekanizması

GPG, genellikle asimetrik şifreleme (açık anahtar şifrelemesi) prensibini kullanır. Bu sistemde, her kullanıcının bir çift anahtarı vardır:
* Genel Anahtar (Public Key): Bu anahtar, herkesle paylaşılabilir. Verileri şifrelemek veya bir imzanın doğruluğunu kontrol etmek için kullanılır.
* Özel Anahtar (Private Key): Bu anahtar kesinlikle gizli tutulmalıdır. Şifrelenmiş verileri çözmek veya dijital imza oluşturmak için kullanılır. Özel anahtar genellikle bir parola (passphrase) ile korunur.

Duplicity ile GPG kullanıldığında:
1. Duplicity, yedeklenecek verileri alır.
2. Bu verileri sıkıştırır ve parçalara ayırır.
3. Her bir parçayı, belirlenen GPG genel anahtarını kullanarak şifreler. Bu, sadece ilgili özel anahtara sahip kişinin bu verileri çözebileceği anlamına gelir.
4. Yedekleme manifest dosyalarını da GPG özel anahtarınızla imzalar. Bu imza, yedekleme setinin sizin tarafınızdan oluşturulduğunu ve aktarım sırasında değiştirilmediğini doğrular.

Bu mekanizma sayesinde, yedekleme verileriniz bulut depolama gibi üçüncü taraf hizmetlerde saklansa bile, verilerinizin içeriği şifreli kalır ve yetkisiz erişime karşı korunur.

Ön Gereksinimler ve Kurulum

Duplicity ve GPG ile güvenli yedeklemeler kurmaya başlamadan önce bazı ön gereksinimleri karşılamamız ve gerekli yazılımları kurmamız gerekir.

Sistem Gereksinimleri

* Ubuntu İşletim Sistemi: Bu rehber Ubuntu 20.04 LTS veya daha yeni sürümler için geçerlidir.
* Sudo Yetkileri: Yazılım kurulumu ve sistem yapılandırması için root veya sudo yetkilerine sahip bir kullanıcı.
* İnternet Bağlantısı: Yazılım paketlerini indirmek için gereklidir.
* Yeterli Depolama Alanı: Yedeklenecek verilerin boyutuna ve yedekleme stratejinize (tam/artımlı) bağlı olarak hem kaynak sistemde (geçici dosyalar için) hem de hedef depolama alanında yeterli boş alan olmalıdır.

Duplicity Kurulumu

Duplicity, Ubuntu’nun varsayılan depolarında bulunur ve kurulumu oldukça basittir:

sudo apt update
sudo apt install duplicity

Eğer belirli bir depolama arka ucunu (örneğin S3 için boto3) kullanacaksanız, Duplicity’nin ilgili Python kütüphanesi bağımlılıklarını da kurmanız gerekebilir. Ancak apt install duplicity genellikle temel bağımlılıkları da çeker.

GPG Kurulumu (Kontrolü)

GPG (GNU Privacy Guard) genellikle Ubuntu sistemlerinde varsayılan olarak yüklü gelir. Kurulumunu veya varlığını kontrol etmek için aşağıdaki komutu kullanabilirsiniz:

gpg --version

Eğer yüklü değilse, aşağıdaki komutla kurabilirsiniz:

sudo apt install gnupg

GPG Anahtar Yönetimi: Güvenliğin Temeli

Yedekleme sisteminizin güvenliği, GPG anahtarlarınızın güvenliğine doğrudan bağlıdır. Bu nedenle, anahtar yönetimine özel dikkat göstermeliyiz. Yedeklemeler için özel bir GPG anahtar çifti oluşturmak, en iyi uygulamadır.

Yeni Bir GPG Anahtar Çifti Oluşturma

Yedeklemeler için yeni bir GPG anahtar çifti oluşturmak için aşağıdaki komutu kullanın:

gpg --full-generate-key

Bu komut sizi bir dizi soruyla yönlendirecektir:

1. Anahtar türü: (1) RSA and RSA (varsayılan) seçeneğini seçin. Bu, hem şifreleme hem de imzalama için bir RSA anahtarı oluşturacaktır.
2. Anahtar boyutu: 4096 bit (önerilen) seçeneğini seçin. Daha büyük anahtarlar daha güvenlidir ancak şifreleme/şifre çözme işlemleri biraz daha uzun sürebilir.
3. Anahtarın geçerlilik süresi: 0 (anahtarın süresi dolmaz) veya belirli bir süre (örneğin 1y bir yıl için) belirleyebilirsiniz. Otomatik yedeklemeler için süresi dolmayan bir anahtar genellikle daha pratiktir, ancak güvenlik politikalarınıza göre süreli anahtar da tercih edilebilir.
4. Kullanıcı Kimliği:
* Gerçek ad: Yedekleme sistemi için açıklayıcı bir ad verin (örneğin, “Ubuntu Backup System” veya “ServerName Backup Key”).
* E-posta adresi: Geçerli bir e-posta adresi girin. Bu, anahtarı tanımlamak için kullanılır.
* Yorum: İsteğe bağlı bir yorum ekleyebilirsiniz (örneğin, “Duplicity yedeklemeleri için”).
5. Parola (Passphrase): Burası en kritik adımdır. Anahtarınızı koruyacak güçlü bir parola belirleyin. Bu parola, özel anahtarınızı kullanmak istediğinizde sizden istenecektir. Otomatik yedeklemelerde bu parolanın nasıl yönetileceğini daha sonra ele alacağız. Parolanızı asla unutmayın! Unutmanız durumunda yedeklerinizi geri yükleyemezsiniz.

Anahtar oluşturulduktan sonra, GPG anahtar halkasına eklenecektir.

GPG Anahtarlarını Listeleme

Oluşturduğunuz anahtarları ve sistemdeki diğer anahtarları listelemek için:

gpg --list-secret-keys --keyid-format LONG

Çıktıda, anahtar kimliğinizi (Key ID) göreceksiniz. Bu genellikle sec satırında rsa4096/0x şeklinde görünür. Örneğin, 0xABCDEF1234567890. Bu anahtar kimliği, Duplicity komutlarında kullanılacaktır.

Özel Anahtarı Güvenli Bir Şekilde Yedekleme

Bu adım HAYATİ önem taşır. Özel anahtarınızı kaybetmeniz veya unutmanız durumunda, şifrelenmiş yedeklerinizi geri yüklemeniz mümkün olmayacaktır. Özel anahtarınızı fiziksel olarak güvenli bir yerde (örneğin, şifreli bir USB sürücü, güvenli bir bulut depolama hizmeti veya basılı bir kopyanın güvenli bir kasada saklanması) yedeklemelisiniz.

Özel anahtarı dışa aktarmak için:

gpg --export-secret-keys --armor  > private_backup_key.asc

yerine yukarıda --list-secret-keys komutuyla bulduğunuz anahtar kimliğini yazın. Bu komut, özel anahtarınızı private_backup_key.asc adlı bir dosyaya dışa aktaracaktır. Bu dosyayı son derece güvenli bir şekilde saklayın.

Genel Anahtarı Dışa Aktarma

Genel anahtarı dışa aktarmak, yedekleri başka bir makinede çözmek veya başkalarının size şifreli veri göndermesini sağlamak için yararlı olabilir. Ancak Duplicity kendi içinde bu anahtarı kullanır, bu adım zorunlu değildir ancak iyi bir uygulamadır.

gpg --export --armor  > public_backup_key.asc

Bu komut, genel anahtarınızı public_backup_key.asc adlı bir dosyaya dışa aktaracaktır. Bu dosyayı, özel anahtar kadar olmasa da, güvenli bir yerde saklayabilirsiniz.

Yedekleme Depolama Alanı (Backend) Seçimi

Duplicity, yedekleme verilerinizi depolamak için çeşitli “arka uçlar” (backends) veya hedefler destekler. İhtiyaçlarınıza ve güvenlik gereksinimlerinize göre bir veya daha fazla hedef seçebilirsiniz.

Yerel Dizin

En basit yöntemdir, ancak felaket kurtarma senaryoları için önerilmez (çünkü kaynak ve yedek aynı fiziksel ortamdadır).

file:///path/to/local/backup/directory

SSH/SFTP ile Uzak Sunucu

Güvenli ve yaygın olarak kullanılan bir yöntemdir. Yedeklerinizin başka bir sunucuda veya ağ depolama cihazında saklanmasını sağlar.

sftp://user@host:port/path/to/remote/backup/directory
ssh://user@host:port/path/to/remote/backup/directory

SSH anahtar tabanlı kimlik doğrulama kullanmak, parola tabanlı kimlik doğrulamadan daha güvenlidir ve otomasyon için daha uygundur.

Amazon S3 gibi Bulut Depolama Hizmetleri

Ölçeklenebilir, dayanıklı ve genellikle uygun maliyetli bir çözümdür. Diğer bulut depolama hizmetleri (Google Cloud Storage, Backblaze B2 vb.) de benzer şekilde yapılandırılabilir.

s3://bucket_name[/path/to/backup/directory]

S3 için AWS kimlik bilgilerinizi (Access Key ID ve Secret Access Key) ortam değişkenleri (AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY) veya ~/.aws/credentials dosyası aracılığıyla sağlamanız gerekecektir.

Bu rehberde, örneklerimizde SSH/SFTP ve S3’ü kullanmaya odaklanacağız, ancak prensipler diğer arka uçlar için de benzerdir.

Duplicity ile İlk Tam Yedekleme

Duplicity ile bir yedekleme işlemi başlatmak için, ilk olarak bir tam yedekleme yapmanız gerekir. Bu, tüm verilerinizin bir kopyasını oluşturur ve gelecekteki artımlı yedeklemeler için bir temel oluşturur.

Temel Komut Yapısı

Duplicity komutunun genel yapısı şöyledir:

duplicity [seçenekler]   

* [seçenekler]: Şifreleme anahtarları, hariç tutulacak dosyalar gibi ek parametreler.
* : full (tam yedekleme), restore (geri yükleme), collection-status (yedekleme durumu) gibi işlemler.
* : Yedeklenecek verilerin bulunduğu yerel dizin.
* : Yedeklerin depolanacağı uzak veya yerel konumun URL’si.

GPG Anahtarlarıyla Şifreleme

Duplicity, yedeklemeyi şifrelemek ve imzalamak için GPG anahtarlarınızı kullanır. Bunun için --encrypt-key ve --sign-key seçeneklerini kullanmanız gerekir.

* --encrypt-key : Yedekleri şifrelemek için kullanılacak GPG genel anahtarının kimliği.
* --sign-key : Yedek manifest dosyalarını imzalamak için kullanılacak GPG özel anahtarının kimliği. Bu genellikle --encrypt-key ile aynı anahtar kimliği olur.

Duplicity, şifreleme ve imzalama için aynı anahtar çiftini kullanmanızı önerir.

Örnek: SSH/SFTP Hedefine Tam Yedekleme

Şimdi, /home/user/mydata dizinini user@remote.example.com:/backups adresindeki bir SSH/SFTP hedefine tam olarak yedekleyelim. yerine kendi GPG anahtar kimliğinizi yazın.

duplicity full \
    --encrypt-key  \
    --sign-key  \
    /home/user/mydata \
    sftp://user@remote.example.com/backups

Bu komutu çalıştırdığınızda, GPG özel anahtarınızın parolası sizden istenecektir. Ayrıca, SSH bağlantısı için uzak sunucunun parolasını (eğer SSH anahtarı kullanmıyorsanız) veya SSH anahtarınızın parolasını girmeniz gerekebilir.

Önemli Not: İlk yedekleme, tüm verileri kopyaladığı için zaman alabilir. Yedekleme tamamlandığında, Duplicity size başarılı bir mesaj gösterecektir.

Artımlı (Incremental) Yedeklemeler

Tam yedekleme yapıldıktan sonra, Duplicity gelecekteki yedeklemeler için varsayılan olarak artımlı modda çalışır. Bu, yalnızca bir önceki yedeklemeden bu yana değişen veya eklenen dosyaların yedekleneceği anlamına gelir. Bu, disk alanı ve bant genişliğinden önemli ölçüde tasarruf sağlar.

Duplicity’nin Akıllı Yaklaşımı

Duplicity, hedef depolama alanında bir “zincir” yedekleme dosyaları oluşturur. Bu zincir, bir tam yedekleme ile başlar ve ardından bir dizi artımlı yedekleme ile devam eder. Her artımlı yedekleme, bir önceki yedeklemeye göre yapılan değişiklikleri içerir. Bu sayede, herhangi bir zamanda verilerinizi geri yüklemek için sadece tam yedeklemeye ve o ana kadar olan artımlı yedeklemelere ihtiyaç duyulur.

Artımlı Yedekleme Komutu

Artımlı yedekleme yapmak için, full anahtar kelimesini komuttan çıkarmanız yeterlidir. Duplicity, hedefteki mevcut yedekleme zincirini otomatik olarak algılayacak ve buna göre bir artımlı yedekleme yapacaktır.

duplicity \
    --encrypt-key  \
    --sign-key  \
    /home/user/mydata \
    sftp://user@remote.example.com/backups

Bu komutu her çalıştırdığınızda, Duplicity yalnızca değişen verileri yedekleyecektir. Artımlı yedeklemeler, tam yedeklemelere göre çok daha hızlı tamamlanır.

Yedekleme durumunu kontrol etmek için collection-status komutunu kullanabilirsiniz:

duplicity collection-status sftp://user@remote.example.com/backups

Bu komut, yedekleme zincirinizdeki tam ve artımlı yedeklemelerin bir özetini gösterecektir.

Yedeklenen Verileri Geri Yükleme

Yedekleme sisteminin en önemli parçası, verileri başarıyla geri yükleyebilme yeteneğidir. Duplicity, farklı senaryolar için esnek geri yükleme seçenekleri sunar.

En Son Durumu Geri Yükleme

Yedeklenen verilerin en son sürümünü belirli bir dizine geri yüklemek için:

duplicity restore \
    --encrypt-key  \
    sftp://user@remote.example.com/backups \
    /tmp/restore_directory

Bu komut, yedekleme deposundaki en son durumu /tmp/restore_directory dizinine geri yükleyecektir. Geri yükleme sırasında yine GPG özel anahtarınızın parolası sizden istenecektir.

Belirli Bir Dosyayı Geri Yükleme

Yedekleme setinden belirli bir dosyayı geri yüklemek istiyorsanız --file-to-restore seçeneğini kullanın:

duplicity restore \
    --encrypt-key  \
    --file-to-restore mydata/documents/report.docx \
    sftp://user@remote.example.com/backups \
    /tmp/restore_directory

Bu komut, mydata/documents/report.docx dosyasını (yedeklenen kök dizine göre yolu) /tmp/restore_directory/mydata/documents/report.docx konumuna geri yükleyecektir.

Belirli Bir Zamana Geri Yükleme

Verileri belirli bir tarih veya zaman noktasına geri yüklemek için --time seçeneğini kullanabilirsiniz. Zaman formatı genellikle ISO 8601’dir (örn. YYYY-MM-DDTHH:MM:SS veya YYYY-MM-DD).

duplicity restore \
    --encrypt-key  \
    --time "2023-10-26T10:00:00" \
    sftp://user@remote.example.com/backups \
    /tmp/restore_directory

Bu komut, 26 Ekim 2023 saat 10:00’daki veri durumunu geri yükleyecektir. Duplicity, belirtilen zamandan önceki en yakın yedekleme noktasını bulacaktır.

Geri Yükleme Sırasında Dikkat Edilmesi Gerekenler

* GPG Özel Anahtarı: Geri yükleme işlemi için şifrelemeyi yapan GPG özel anahtarının sistemde bulunması ve parolasının bilinmesi zorunludur.
* Hedef Dizin: Geri yüklenecek dizinin boş veya mevcut dosyaları üzerine yazmaya uygun olduğundan emin olun. Duplicity, mevcut dosyaların üzerine yazmadan önce genellikle bir uyarı verir.
* Test Etme: Yedeklemelerinizi düzenli olarak test etmek, sisteminizin felaket anında gerçekten çalışacağından emin olmanın tek yoludur.

Yedeklemeleri Cron ile Otomatikleştirme

Duplicity’nin gücünü tam olarak kullanmak için yedekleme işlemlerini otomatikleştirmeniz gerekir. Ubuntu’da bu genellikle cron zamanlayıcı kullanılarak yapılır.

Yedekleme Betiği Oluşturma (backup.sh)

Yedekleme komutlarınızı içeren bir betik dosyası oluşturmak, otomasyonu kolaylaştırır. Bu betik, Duplicity komutunu, GPG anahtar kimliğini ve diğer gerekli seçenekleri içerecektir.

Öncelikle, betiği oluşturun ve düzenlemek için bir metin düzenleyici açın:

sudo nano /usr/local/bin/backup.sh

Aşağıdaki içeriği ekleyin (kendi GPG anahtar kimliğinizi ve yedekleme yollarınızı güncellemeyi unutmayın):

#!/bin/bash

GPG anahtar kimliği

GPG_KEY_ID=""

Yedeklenecek kaynak dizin

SOURCE_DIR="/home/user/mydata"

Yedekleme hedefi (SFTP örneği)

DEST_URL="sftp://user@remote.example.com/backups"

Yedekleme günlük dosyası

LOG_FILE="/var/log/duplicity_backup.log"

GPG özel anahtar parolası (OTOMASYON İÇİN DİKKATLİ KULLANILMALI!)

Bu yöntem, parolanın betik içinde düz metin olarak saklanmasına neden olur.

Daha güvenli alternatifler için aşağıya bakın.

export GPG_PASSPHRASE=""

SSH parola veya anahtar parolası (eğer SSH anahtarı kullanmıyorsanız veya anahtar parolalıysa)

Bu da düz metin olarak saklanmasına neden olur. SSH anahtarları ve ssh-agent önerilir.

export FTP_PASSWORD="" # SFTP için FTP_PASSWORD kullanılır.

export SSH_ASKPASS_COMMAND="echo " # SSH anahtar parolası için

echo "--- Yedekleme Başladı: $(date) ---" >> "$LOG_FILE"

Duplicity komutu

duplicity \ --encrypt-key "$GPG_KEY_ID" \ --sign-key "$GPG_KEY_ID" \ --exclude '/.cache/' \ --exclude '/.thumbnails/' \ --full-if-older-than 1M \ --log-file "$LOG_FILE" \ "$SOURCE_DIR" \ "$DEST_URL" 2>&1

GPG_PASSPHRASE'i sıfırlayın

unset GPG_PASSPHRASE

unset FTP_PASSWORD

if [ $? -eq 0 ]; then echo "Yedekleme Başarılı: $(date)" >> "$LOG_FILE" else echo "Yedekleme HATASI: $(date)" >> "$LOG_FILE" # Hata durumunda bildirim gönderme mekanizması eklenebilir (örn. e-posta) fi

Eski yedeklemeleri temizle (örneğin, 3 aydan eski olanları sil)

echo "--- Eski yedeklemeler temizleniyor: $(date) ---" >> "$LOG_FILE" duplicity remove-older-than 3M --force "$DEST_URL" >> "$LOG_FILE" 2>&1 echo "--- Temizleme Tamamlandı: $(date) ---" >> "$LOG_FILE"

Betiği kaydettikten sonra, yürütülebilir hale getirin:

sudo chmod +x /usr/local/bin/backup.sh

GPG Parola Yönetimi (GPG_PASSPHRASE)

Otomatik yedeklemelerde GPG özel anahtarınızın parolasını otomatik olarak sağlamak kritik bir konudur. Yukarıdaki betikte export GPG_PASSPHRASE="" satırını kullandık. Bu yöntem, parolanın betik içinde düz metin olarak saklanmasına neden olur ve güvenlik açısından risklidir. Bu yöntemi kullanırken betik dosyasının izinlerini sıkı bir şekilde ayarladığınızdan (sadece root tarafından okunabilir/yazılabilir) ve sadece root kullanıcısı tarafından çalıştırıldığından emin olun.

Daha güvenli alternatifler şunlardır:
* gpg-agent: Bu, GPG anahtarınızın parolasını bir süre bellekte tutarak tekrar tekrar girmenizi engelleyen bir araçtır. Ancak cron işleri için genellikle gpg-agent‘ın düzgün çalışması ek yapılandırma gerektirir.
* Parolasız GPG Anahtarı (ÖNERİLMEZ): Çok özel ve izole durumlarda, yedekleme için parolasız bir GPG anahtarı oluşturulabilir. Ancak bu, özel anahtarın ele geçirilmesi durumunda yedeklerinizin tamamen savunmasız kalacağı anlamına gelir. Bu yaklaşım genellikle şiddetle önerilmez.

Basit bir ev sunucusu veya kişisel kullanım için, iyi korunmuş bir betik dosyasındaki GPG_PASSPHRASE ortam değişkeni yönetilebilir bir risk olabilir. Kurumsal ortamlarda ise daha gelişmiş parola yönetimi çözümleri (örneğin, HashiCorp Vault gibi) düşünülmelidir.

Crontab ile Zamanlama

Betiği cron’a eklemek için root kullanıcısının crontab’ını düzenleyin:

sudo crontab -e

Aşağıdaki satırı ekleyerek betiği her gün gece 03:00’te çalıştırın:

0 3   * /usr/local/bin/backup.sh

Cron sözdizimi: dakika saat ayın_günü ay haftanın_günü komut

* 0: Dakika 0 (saatin başı)
* 3: Saat 03
: Ayın her günü
: Her ay
: Haftanın her günü

Crontab’ı kaydedip kapatın. Yedekleme betiğiniz artık her gün otomatik olarak çalışacaktır.

Günlük Yönetimi

Betiğin içine LOG_FILE değişkeni ekleyerek yedekleme çıktısını bir dosyaya yönlendirdik. Bu günlük dosyasını düzenli olarak kontrol etmeniz, yedeklemelerin başarılı olup olmadığını veya herhangi bir hata oluşup oluşmadığını anlamanız için önemlidir.

tail -f /var/log/duplicity_backup.log

Bu komut, günlük dosyasının sonunu gerçek zamanlı olarak gösterir.

Gelişmiş Ayarlar ve En İyi Uygulamalar

Duplicity ile yedekleme sisteminizi daha etkili ve güvenli hale getirmek için bazı gelişmiş ayarları ve en iyi uygulamaları göz önünde bulundurmalısınız.

Eski Yedeklemeleri Temizleme

Yedekleme hedefini zamanla doldurmamak için eski yedeklemeleri düzenli olarak temizlemek önemlidir. Betiğimize remove-older-than komutunu ekledik, ancak farklı stratejiler de mevcuttur:

* remove-older-than : Belirtilen süreden (örn. 1M bir ay, 3M üç ay, 1Y bir yıl) daha eski tüm yedeklemeleri siler.
* remove-all-but-n-full : En son n adet tam yedeklemeyi ve bunlara ait artımlı yedeklemeleri tutar, diğerlerini siler.
* cleanup: Başarısız veya yarım kalmış yedekleme parçalarını temizler. Bu komutu düzenli olarak çalıştırmak iyi bir uygulamadır.

Örnek: En son iki tam yedeklemeyi ve bunlara ait artımlı yedekleri tut, diğerlerini sil:

duplicity remove-all-but-n-full 2 --force sftp://user@remote.example.com/backups

--force seçeneği, onay istemeden işlemi tamamlar; otomasyon için gereklidir.

Dosya ve Dizinleri Hariç Tutma/Dahil Etme

Yedekleme boyutunu küçültmek ve gereksiz dosyaları yedeklememek için belirli dizinleri veya dosya türlerini hariç tutabilirsiniz.

--exclude : Belirtilen dizini veya dosyayı yedekleme dışında bırakır. Glob desenleri (, ) kullanılabilir.
* --exclude /home/user/mydata/temp_files
* --exclude '/.cache/' (tüm .cache dizinlerini hariç tutar)
--exclude '/.tmp' (tüm .tmp uzantılı dosyaları hariç tutar)
* --include : Yalnızca belirtilen dizinleri veya dosyaları dahil eder. Eğer --exclude ile birlikte kullanılırsa, --include önceliklidir.

Yedekleme Sıklığı ve Stratejisi

Yedekleme sıklığınız, veri kaybına ne kadar toleranslı olduğunuza ve verilerinizin ne sıklıkla değiştiğine bağlıdır.

* Günlük artımlı yedeklemeler: Çoğu senaryo için iyi bir denge sunar.
* Haftalık veya aylık tam yedeklemeler: full-if-older-than seçeneğiyle Duplicity’nin belirli aralıklarla tam yedekleme yapmasını sağlayabilirsiniz. Örneğin, --full-if-older-than 1M bir aydan eski tam yedekleme yoksa yeni bir tam yedekleme yapar.

Bant Genişliği Kısıtlaması

Yedekleme işlemleri, ağ bant genişliğinizi tüketebilir. --max-upload-bandwidth seçeneği ile Duplicity’nin kullanacağı maksimum bant genişliğini sınırlayabilirsiniz (KB/s cinsinden).

duplicity --max-upload-bandwidth 500 ... (500 KB/s ile sınırlar)

Yedeklemeleri Doğrulama

Yedekleme verilerinizin bütünlüğünü kontrol etmek için verify komutunu kullanabilirsiniz. Bu komut, yedekleme setindeki dosyaların bozuk olup olmadığını kontrol eder.

duplicity verify --compare-data sftp://user@remote.example.com/backups /home/user/mydata

--compare-data seçeneği, yedeklenen verileri orijinal kaynakla karşılaştırır. Bu, çok zaman alıcı olabilir. Genellikle sadece manifest dosyalarını ve dosya listelerini kontrol etmek yeterlidir:

duplicity verify sftp://user@remote.example.com/backups /tmp/temp_verify_dir

Yedeklemeleri Düzenli Olarak Test Etme

Bir yedekleme planının en kritik adımı, yedeklemelerin gerçekten işe yarayıp yaramadığını test etmektir. Düzenli aralıklarla (örneğin ayda bir) küçük bir veri kümesini yedekten geri yüklemeyi deneyin. Bu, hem yedekleme sürecinizin çalıştığını hem de geri yükleme işlemini bildiğinizi doğrular.

Offsite (Uzak Konumda) Yedekleme

Yerel bir felaket (yangın, hırsızlık vb.) durumunda verilerinizi korumak için yedeklemelerinizin fiziksel olarak farklı bir konumda saklanması çok önemlidir. SSH/SFTP ile uzak bir sunucuya veya Amazon S3 gibi bulut depolama hizmetlerine yedeklemek, offsite yedekleme stratejisinin bir parçasıdır.

Sık Karşılaşılan Sorunlar ve Çözümleri

Duplicity ile çalışırken bazı yaygın sorunlarla karşılaşabilirsiniz. İşte bazıları ve olası çözümleri:

GPG Anahtarı Bulunamıyor veya Parola Sorunları

* Sorun: No GPG key supplied veya GPG passphrase incorrect.
* Çözüm:
* --encrypt-key ve --sign-key seçeneklerinde doğru GPG anahtar kimliğini kullandığınızdan emin olun. gpg --list-secret-keys --keyid-format LONG komutuyla kontrol edin.
* GPG özel anahtarınızın parolasını doğru girdiğinizden emin olun. Otomatik betiklerde GPG_PASSPHRASE ortam değişkenini doğru ayarladığınızdan emin olun.
* GPG özel anahtarınızın ~/.gnupg dizininde veya GPG’nin erişebileceği başka bir konumda olduğundan emin olun.

İzin Sorunları

* Sorun: Permission denied hataları, özellikle kaynak dizinlere veya hedef depolama alanına yazarken.
* Çözüm:
* Yedekleme betiğini çalıştıran kullanıcının (genellikle root veya sudo ile çalıştırılan kullanıcı) yedeklenecek dosyalara okuma ve hedef dizine yazma izinlerine sahip olduğundan emin olun.
* SFTP/SSH hedefleri için, uzak sunucudaki kullanıcının hedef dizine yazma izinleri olduğundan emin olun.
* SSH anahtarı kullanıyorsanız, anahtar dosyasının izinlerinin doğru olduğundan emin olun (chmod 600 ~/.ssh/id_rsa).

Ağ Bağlantısı Hataları

* Sorun: BackendException, Connection refused, Host unreachable gibi hatalar.
* Çözüm:
* Ağ bağlantınızı kontrol edin. Uzak sunucuya ping atarak veya SSH ile bağlanmayı deneyerek bağlantıyı test edin.
* Uzak sunucunun güvenlik duvarı kurallarının (firewall) Duplicity’nin kullandığı portu (örn. SSH için 22) engellemediğinden emin olun.
* Uzak sunucunun çalışır durumda olduğundan emin olun.

Depolama Alanı Dolu

* Sorun: No space left on device veya benzeri hatalar.
* Çözüm:
* Hem kaynak sistemde (geçici dosyalar için) hem de hedef depolama alanında yeterli boş alan olduğundan emin olun.
* Eski yedeklemeleri temizlemek için remove-older-than veya remove-all-but-n-full komutlarını düzenli olarak çalıştırın.

Duplicity Hataları (BackendException, vb.)

* Sorun: Duplicity, genel bir BackendException veya başka spesifik hatalar veriyor.
* Çözüm:
* Duplicity komutunuzun sözdizimini dikkatlice kontrol edin.
* --log-file seçeneğini kullanarak ayrıntılı günlük kaydı alın ve hatanın nedenini anlamaya çalışın.
* Duplicity’nin bağımlılıklarının (örneğin S3 için python3-boto3) yüklü olduğundan emin olun.

Sonuç

Veri kaybı, günümüzün en ciddi dijital tehditlerinden biridir. Duplicity ve GPG kullanarak Ubuntu üzerinde kurduğumuz bu güvenli ve otomatik yedekleme sistemi, verilerinizi çeşitli risklere karşı korumak için sağlam bir temel sunar. Duplicity’nin artımlı yedekleme yetenekleri, farklı depolama arka uçlarına desteği ve GPG’nin güçlü şifreleme özellikleri bir araya geldiğinde, hem verimli hem de güvenilir bir çözüm elde edilir.

Unutulmamalıdır ki, bir yedekleme sisteminin kurulumu sadece başlangıçtır. Yedekleme anahtarlarınızın (özellikle GPG özel anahtarınızın) güvenliğini sağlamak, yedeklemelerinizi düzenli olarak izlemek ve en önemlisi, geri yükleme işlemlerini periyodik olarak test etmek, veri güvenliği stratejinizin ayrılmaz parçalarıdır. Test edilmemiş bir yedekleme, hiç yedekleme yapmamak kadar riskli olabilir. Bu rehberdeki adımları dikkatle takip ederek, değerli verilerinizin güvende olduğundan emin olabilirsiniz.

Yorumlar
İçeriği beğendiniz mi? Bir tartışma başlatın veya görüşlerinizi paylaşın.
Yorum Yaz

Bir yanıt yazın

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

E-posta Bülteni
Yazılım Topluluğuna Katılın
En son güncellemeleri, yaratıcı ipuçlarını ve özel kaynakları doğrudan e-posta kutunuza alın. Tasarım ve inovasyonun geleceğini birlikte keşfedelim.