Restic yedeklerini cron ile ilk kez otomatikleştirdiğimde, klasik bir hatayı yaptım: depolama şifresini bir ortam değişkenine koydum. Kolay geliyordu—iş çalışmadan önce sadece RESTIC_PASSWORD değişkenini dışarı aktarmak yeterliydi. Ancak daha sonra ortam değişkenlerinin nasıl kolayca sızdığını hatırladım: ps çıktısı üzerinden, hata ayıklama günlükleri üzerinden veya otomasyon betiklerinin dikkatsizce paylaşılmasıyla. İşte bu noktada --password-file kullanmaya geçtim ve bu, yedekleme güvenliğini yönetme şeklimde anlamlı bir fark yarattı.
--password-file kullanmak, şifreyi ortam değişkenlerinden ve süreç tablosundan dışarı tutmanızı sağlar. RESTIC_PASSWORD yerine, şifreyi içeren bir dosyaya Restic'i yönlendirirsiniz—ideal olarak bu dosyanın izinleri kısıtlı olmalıdır. Bu, özellikle çok kullanıcılı sistemlerde veya günlüklerin merkezi olarak toplandığı ortamlarda saldırı yüzeyini önemli ölçüde azaltır.
Pratikte nasıl kurduğumu şöyle anlatayım. İlk olarak, özel bir şifre dosyası oluşturuyorum:
sudo touch /etc/restic/passwords/my-backup-repo
sudo chmod 600 /etc/restic/passwords/my-backup-repo
sudo chown root:root /etc/restic/passwords/my-backup-repo
Sadece root’un okuyabilmesini sağlıyorum—daha geniş erişime gerek yok. Daha sonra bu dosyaya şifreyi (veya daha iyi, yüksek entropili bir parolayı) tek satır olarak ekliyorum, fazladan boşluk bırakmadan.
Cron işinde bu dosyaya doğrudan referans veriyorum:
0 2 * * * /usr/bin/restic backup /srv/data \
--repo s3:s3.amazonaws.com/my-bucket/backups \
--password-file /etc/restic/passwords/my-backup-repo \
--verbose
Burada RESTIC_PASSWORD dışa aktarılmıyor. Şifre asla ortam değişkenine dokunmuyor. Yedekleme sırasında ps aux çalıştıran biri bile kimliği görüntüleyemez.
Bu yöntemi, özellikle systemd zamanlayıcıları veya Prometheus node-exporter gibi izleme araçlarıyla kullanılırken, günlük ve çıkış kodlarını temiz bir şekilde yönetmek için küçük bir betik içinde sarıyorum. Ancak hatta raw cron içinde bile bu yaklaşım daha güvenli.
Dikkat etmeniz gereken bir şey: depolama başlatma veya unutma işlemleri yapıyorsanız, aynı --password-file bayrağını orada da kullanmanız gerekiyor. Unutursanız, otomasyonu kıran istemlerle karşılaşırsınız. Bu yüzden admin notlarımda bir yardımcı fonksiyon tutuyorum:
restic_init() {
local repo="$1"
local pwfile="/etc/restic/passwords/$2"
restic init --repo "$repo" --password-file "$pwfile"
}
Bu sayede her seferinde bayrağı hatırlamak zorunda kalmıyorum—tutarlılık insan hatasını azaltır.
Önceki yazımda otomasyonda gizli bilgilerin güvenliğini sağlamak hakkında bahsettiğim gibi, hedef mükemmellik değil, operasyonel sürtünmeyi arturmadan riski azaltmaktır. --password-file kullanmak, bu tür düşük çaba, yüksek getiri uygulamalardan biridir. Restic'te yerleşik olduğu için ekstra araç gerektirmez ve S3, SFTP veya yerel bir sürücüye yedek alıp almadığınızı fark etmez.
Eğer hâlâ cron içinde Restic şifreleri için ortam değişkenleri kullanıyorsanız, geçiş yapmayı düşünün. Şifreyi döndürün, dosyayı güncelleyin ve dışa aktarma satırını kaldırın. Gelecekteki kendiniz—özellikle bir güvenlik denetimi sırasında—size teşekkür edecektir.
Kapak görseli: Unknown · CC0 (Openverse / kamu malı) · https://www.rawpixel.com/image/3295250/free-photo-image-creative-commons-cc0-computer
