Arch Linux’u BTRFS, LUKS ve Otomatik TPM2 Kilit Açma ile Kurulum Rehberi
Günümüz dijital dünyasında veri güvenliği ve sistem bütünlüğü her zamankinden daha önemli hale gelmiştir. Arch Linux, kullanıcısına sunduğu esneklik ve kontrol ile bu ihtiyaçları karşılamak için mükemmel bir temel sağlar. Bu rehberde, Arch Linux’u BTRFS dosya sistemi, LUKS tam disk şifrelemesi ve TPM2 (Trusted Platform Module 2.0) kullanarak otomatik kilit açma özelliği ile nasıl kuracağınızı adım adım açıklayacağız. Bu kombinasyon, verilerinizi güçlü bir şekilde şifrelerken, her önyüklemede manuel şifre girişi zahmetinden sizi kurtararak güvenlik ve kullanım kolaylığını bir araya getirir.
1. Giriş ve Ön Hazırlıklar
Arch Linux’un BTRFS, LUKS ve TPM2 ile kurulumu, hem güvenlik hem de modern dosya sistemi özelliklerini bir araya getiren güçlü bir kombinasyondur. Bu kurulum sayesinde verileriniz şifreli kalırken, TPM2 çipi sistem bütünlüğünü doğrulayarak otomatik olarak LUKS bölümünüzün kilidini açar. Bu bölüm, kurulum için gerekli ön hazırlıkları ve temel gereksinimleri ele alacaktır.
Neden BTRFS, LUKS ve TPM2?
BTRFS, anlık görüntüler (snapshots), veri bütünlüğü sağlama (checksums), sıkıştırma ve kolay disk yönetimi gibi modern özellikler sunan bir dosya sistemidir. Bu özellikler sayesinde sisteminizi kolayca önceki bir duruma döndürebilir, disk alanından tasarruf edebilir ve veri bozulmalarına karşı korunabilirsiniz. LUKS (Linux Unified Key Setup), disk bölümlerini şifrelemek için endüstri standardı bir yöntemdir. Tam disk şifrelemesi sayesinde, cihazınız fiziksel olarak ele geçirilse bile verileriniz yetkisiz erişime karşı korunur. TPM2 (Trusted Platform Module 2.0), anakart üzerinde bulunan bir donanım güvenlik çipidir. Sistem önyükleme zincirini ölçerek (PCR’ler – Platform Configuration Registers) sistem bütünlüğünü doğrular ve bu ölçümleri kullanarak LUKS bölümünüzün kilidini otomatik olarak açabilir. Bu sayede, sisteminiz güvenli bir şekilde başlatıldığı sürece manuel şifre girişi yapmanıza gerek kalmaz.
Gereksinimler ve Başlangıç
- UEFI destekli bir sistem ve BIOS/UEFI ayarlarında TPM2’nin etkinleştirilmiş olması.
- Arch Linux ISO’sunu içeren önyüklenebilir bir USB sürücü.
- Stabil bir internet bağlantısı.
- Temel Linux komut satırı bilgisi.
- En az 50 GB boş disk alanı (önerilen 100 GB+).
Kuruluma başlamadan önce, BIOS/UEFI ayarlarınızda TPM2’nin etkinleştirildiğinden ve sisteminizin UEFI modunda önyüklendiğinden emin olun. Genellikle “Security” veya “Trusted Computing” başlığı altında TPM ayarlarını bulabilirsiniz.
Canlı Ortama Önyükleme
Hazırladığınız Arch Linux önyüklenebilir USB sürücüsü ile sisteminizi başlatın. Önyükleme işlemi tamamlandığında bir komut istemi ile karşılaşacaksınız. İlk olarak, internet bağlantınızı kontrol edin. Kablolu bağlantı genellikle otomatik olarak kurulur. Kablosuz bağlantı için iwctl komutunu kullanabilirsiniz:
iwctl
device list
station scan
station get-networks
station connect
exit
Ardından, sistem saatini senkronize edin:
timedatectl set-ntp true
Diskinizin adını belirlemek için lsblk komutunu kullanın. Genellikle /dev/nvme0n1 veya /dev/sda gibi bir çıktı alırsınız. Bu rehberde /dev/nvme0n1 kullanacağız.
2. Disk Bölümlendirme ve LUKS Şifreleme
Bu adımda, diskimizi UEFI, önyükleme ve şifrelenecek kök bölümü için bölümlendirecek ve LUKS ile şifreleme işlemini gerçekleştireceğiz.
Disk Yapısının Belirlenmesi
fdisk veya gdisk gibi bir araç kullanarak diskimizi bölümlendireceğiz. GPT (GUID Partition Table) kullanmak, modern UEFI sistemler için standarttır.
gdisk /dev/nvme0n1
Komutu çalıştırdıktan sonra aşağıdaki bölümleri oluşturun:
- EFI Sistem Bölümü (ESP):
/dev/nvme0n1p1- 512MB, tip koduEF00(EFI System). - Boot Bölümü:
/dev/nvme0n1p2- 1GB, tip kodu8300(Linux filesystem). Bu bölüm şifresiz kalacak ve çekirdek ile initramfs'i içerecektir. - Kök Bölümü:
/dev/nvme0n1p3- Geri kalan tüm alan, tip kodu8300(Linux filesystem). Bu bölüm LUKS ile şifrelenecektir.
Değişiklikleri kaydetmek için w komutunu kullanın.
EFI ve Boot Bölümlerini Biçimlendirme
EFI sistem bölümünü FAT32 olarak biçimlendirin:
mkfs.fat -F 32 /dev/nvme0n1p1
Boot bölümünü EXT4 olarak biçimlendirin:
mkfs.ext4 /dev/nvme0n1p2
LUKS ile Kök Bölümü Şifreleme
Kök bölümünü (/dev/nvme0n1p3) LUKS ile şifreleyeceğiz. Güçlü bir şifre belirlediğinizden emin olun ve bu şifreyi unutmayın; TPM2 kilit açma başarısız olursa manuel olarak girmeniz gerekecektir.
cryptsetup luksFormat /dev/nvme0n1p3
Şifreleme tamamlandıktan sonra, LUKS bölümünü açın ve cryptroot adını verin:
cryptsetup open /dev/nvme0n1p3 cryptroot
Artık şifrelenmiş bölüm /dev/mapper/cryptroot olarak erişilebilir durumda.
3. BTRFS Dosya Sistemi Kurulumu
Şifrelenmiş LUKS bölümümüzü BTRFS olarak biçimlendirecek ve gerekli alt birimleri (subvolumes) oluşturacağız. BTRFS'nin esnekliği sayesinde, farklı dizinler için ayrı alt birimler oluşturarak anlık görüntü yönetimini kolaylaştırabiliriz.
Şifrelenmiş Bölümü Biçimlendirme
/dev/mapper/cryptroot bölümünü BTRFS olarak biçimlendirin:
mkfs.btrfs -L ArchRoot /dev/mapper/cryptroot
Ardından, bu bölümü geçici olarak bağlayın:
mount /dev/mapper/cryptroot /mnt
BTRFS Alt Birimlerinin Oluşturulması
BTRFS'nin en güçlü özelliklerinden biri alt birimlerdir. Sistemimizin farklı bölümlerini ayrı alt birimlerde tutarak anlık görüntü almayı ve yönetmeyi kolaylaştırırız. Aşağıdaki alt birimleri oluşturalım:
@: Kök dosya sistemi (/) için.@home: Kullanıcı ev dizinleri (/home) için.@snapshots: Anlık görüntüler için.@var_log: Log dosyaları (/var/log) için (isteğe bağlı, ancak sık sık değişen veriler için faydalı).@tmp: Geçici dosyalar (/tmp) için (isteğe bağlı).
btrfs subvolume create /mnt/@
btrfs subvolume create /mnt/@home
btrfs subvolume create /mnt/@snapshots
btrfs subvolume create /mnt/@var_log
btrfs subvolume create /mnt/@tmp
Alt Birimleri Bağlama
Geçici olarak bağladığımız /mnt dizinini ayırın ve alt birimleri doğru şekilde bağlayın. noatime ve compress=zstd (veya compress=lzo) gibi bağlama seçenekleri performansı artırabilir.
umount /mnt
mount -o noatime,compress=zstd,subvol=@ /dev/mapper/cryptroot /mnt
mkdir -p /mnt/{boot,home,.snapshots,var/log,tmp}
mount -o noatime,compress=zstd,subvol=@home /dev/mapper/cryptroot /mnt/home
mount -o noatime,compress=zstd,subvol=@snapshots /dev/mapper/cryptroot /mnt/.snapshots
mount -o noatime,compress=zstd,subvol=@var_log /dev/mapper/cryptroot /mnt/var/log
mount -o noatime,compress=zstd,subvol=@tmp /dev/mapper/cryptroot /mnt/tmp
mount /dev/nvme0n1p2 /mnt/boot
mount /dev/nvme0n1p1 /mnt/boot/efi
Tüm bağlama işlemlerinin doğru yapıldığını kontrol etmek için lsblk veya findmnt komutunu kullanabilirsiniz.
4. Temel Arch Linux Kurulumu
Artık disklerimiz hazır olduğuna göre, Arch Linux'un temel sistemini kurabiliriz. Bu adımda gerekli paketleri kuracak, fstab dosyasını oluşturacak ve chroot ortamına geçiş yapacağız.
Sistem Paketlerinin Kurulumu (pacstrap)
pacstrap komutunu kullanarak temel sistem paketlerini kurun. LUKS ve BTRFS için gerekli araçları ve TPM2 desteği için tpm2-tools ile tpm2-tss paketlerini eklemeyi unutmayın.
pacstrap /mnt base linux linux-firmware btrfs-progs cryptsetup tpm2-tools tpm2-tss vim grub efibootmgr networkmanager
vim, grub, efibootmgr ve networkmanager gibi paketler de genellikle ihtiyaç duyulan araçlardır.
Fstab Dosyasının Oluşturulması
genfstab komutu ile bağladığınız tüm bölümler için /etc/fstab dosyasını otomatik olarak oluşturun. -U seçeneği UUID'leri kullanır, bu da daha sağlam bir yapı sağlar.
genfstab -U /mnt >> /mnt/etc/fstab
Oluşturulan fstab dosyasını kontrol edin ve gerekirse düzenleyin. BTRFS alt birimleri için subvolid yerine subvol parametresi kullanıldığından emin olun.
Chroot Ortamına Geçiş
Yeni kurulan sisteme chroot ile geçiş yapın. Bu, artık canlı ortam yerine kurulu sistem üzerinden işlem yapacağınız anlamına gelir.
arch-chroot /mnt
Chroot ortamına girdikten sonra, sistem saatini ayarlayın, yerel ayarları yapılandırın ve root şifresini belirleyin.
ln -sf /usr/share/zoneinfo/Europe/Istanbul /etc/localtime
hwclock --systohc
echo "en_US.UTF-8 UTF-8" >> /etc/locale.gen
echo "tr_TR.UTF-8 UTF-8" >> /etc/locale.gen
locale-gen
echo "LANG=en_US.UTF-8" > /etc/locale.conf
echo "HOSTNAME" > /etc/hostname # HOSTNAME yerine istediğiniz ana bilgisayar adını yazın
passwd # Root şifresini belirleyin
5. TPM2 ile Otomatik Kilit Açma Yapılandırması
Bu bölüm, kurulumun en kritik ve benzersiz kısmıdır: TPM2 çipini kullanarak LUKS bölümünüzün otomatik olarak kilidini açmasını sağlamak. systemd-cryptenroll aracı ve initramfs yapılandırması bu süreçte anahtar rol oynar.
TPM2 Modülünün Kontrolü ve Hazırlığı
İlk olarak, TPM2 çipinizin doğru çalıştığından ve erişilebilir olduğundan emin olun. tpm2-tools paketini kurduğunuz için bu araçları kullanabiliriz.
tpm2_pcrread # PCR değerlerini kontrol edin
tpm2_clear # TPM'yi temizleyin (isteğe bağlı, ancak tavsiye edilir)
TPM'yi temizlemek, eski anahtarları veya yapılandırmaları siler ve yeni bir başlangıç yapmanızı sağlar. Bu işlem geri alınamaz, bu yüzden dikkatli olun.
systemd-cryptenroll Kullanımı
systemd-cryptenroll, LUKS bölümüne TPM2 anahtarını kaydetmek için kullanılan araçtır. Bu komut, belirtilen PCR'lerin (Platform Configuration Registers) mevcut değerlerini kullanarak bir anahtar oluşturur ve LUKS başlığına ekler. PCR'ler, sistem önyükleme sırasında çeşitli bileşenlerin (BIOS/UEFI, MBR/GPT, çekirdek vb.) ölçümlerini tutar. Eğer bu ölçümler değişirse (örneğin, kötü amaçlı bir yazılım BIOS'u değiştirirse), TPM2 anahtarı geçersiz olur ve sistem otomatik olarak kilitlenmez, bu da güvenliği artırır.
LUKS bölümünüze TPM2 anahtarını kaydedin:
systemd-cryptenroll --tpm2-device=auto --tpm2-pcrs=0+2+4+7 /dev/nvme0n1p3
Burada --tpm2-device=auto, sistemdeki ilk TPM2 cihazını kullanır. --tpm2-pcrs=0+2+4+7 ise 0, 2, 4 ve 7 numaralı PCR'lerin ölçümlerini kullanır. Bu PCR'ler genellikle BIOS/UEFI, bootloader ve çekirdek ile ilgili önemli bileşenleri kapsar. Kendi sisteminiz için hangi PCR'lerin uygun olduğunu kontrol etmek isteyebilirsiniz, ancak bu değerler çoğu sistem için iyi bir başlangıç noktasıdır.
Başarılı olursa, komut bir çıktı vermeli ve LUKS bölümüne yeni bir anahtar yuvası eklemelidir.
Initramfs Oluşturma ve mkinitcpio Ayarları
TPM2 ile otomatik kilit açmanın çalışması için, initramfs'in LUKS bölümünü açmak için gerekli modülleri ve komut dosyalarını içermesi gerekir. Arch Linux'ta varsayılan olarak mkinitcpio kullanılır. /etc/mkinitcpio.conf dosyasını düzenlememiz gerekiyor.
vim /etc/mkinitcpio.conf
HOOKS dizisine systemd ve sd-encrypt hook'larını ekleyin. Bu hook'lar, systemd-cryptenroll tarafından oluşturulan anahtarı kullanarak LUKS bölümünü açmak için gerekli mantığı sağlar. udev'den sonra ve autodetect'ten önce yerleştirilmesi önemlidir.
Örnek HOOKS satırı:
HOOKS=(base udev systemd autodetect keyboard keymap consolefont modconf block sd-encrypt filesystems fsck)
Değişiklikleri kaydettikten sonra, yeni initramfs görüntüsünü oluşturun:
mkinitcpio -P
Bu komut, tüm kurulu çekirdekler için yeni initramfs görüntülerini oluşturacaktır.
6. Önyükleyici Kurulumu ve Son Ayarlar
Sistemimizin önyüklenebilir hale gelmesi için GRUB önyükleyicisini kurmalı ve gerekli yapılandırmaları yapmalıyız. Ayrıca, temel sistem ayarlarını tamamlayacağız.
GRUB Kurulumu ve Yapılandırması
GRUB'u EFI sistem bölümüne kurun:
grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=ArchLinux --recheck
Şimdi GRUB yapılandırma dosyasını oluşturun:
grub-mkconfig -o /boot/grub/grub.cfg
GRUB Kernel Parametreleri
GRUB'un LUKS bölümünü doğru şekilde tanıması ve otomatik kilit açma işlemini başlatması için çekirdek parametrelerini düzenlememiz gerekir. /etc/default/grub dosyasını açın:
vim /etc/default/grub
GRUB_CMDLINE_LINUX_DEFAULT satırını bulun ve aşağıdaki parametreleri ekleyin. /dev/nvme0n1p3 bölümünün UUID'sini lsblk -f komutuyla öğrenip yerine yazın.
GRUB_CMDLINE_LINUX_DEFAULT="loglevel=3 quiet cryptdevice=UUID=:cryptroot root=/dev/mapper/cryptroot rw"
Örnek:
GRUB_CMDLINE_LINUX_DEFAULT="loglevel=3 quiet cryptdevice=UUID=a1b2c3d4-e5f6-7890-1234-567890abcdef:cryptroot root=/dev/mapper/cryptroot rw"
Değişiklikleri kaydettikten sonra, GRUB yapılandırmasını tekrar oluşturun:
grub-mkconfig -o /boot/grub/grub.cfg
Kullanıcı Oluşturma ve Temel Sistem Ayarları
Root kullanıcısı dışında normal bir kullanıcı oluşturun ve ona sudo yetkileri verin:
useradd -m -g users -G wheel,storage,power -s /bin/bash
passwd
wheel grubuna sudo yetkisi vermek için /etc/sudoers dosyasını düzenleyin (visudo komutunu kullanın):
visudo
# %wheel ALL=(ALL:ALL) ALL satırının başındaki # işaretini kaldırın.
NetworkManager servisini etkinleştirin:
systemctl enable NetworkManager
Sisteminizin otomatik olarak TRIM yapmasını sağlamak için fstrim.timer'ı etkinleştirin (BTRFS için faydalıdır):
systemctl enable fstrim.timer
7. Sonuç ve Ek İpuçları
Kurulumun sonuna geldik. Tüm adımları doğru bir şekilde takip ettiyseniz, sisteminiz artık güvenli bir şekilde şifrelenmiş ve TPM2 sayesinde otomatik olarak açılmaya hazır olmalıdır.
Kurulumun Tamamlanması
Chroot ortamından çıkın, tüm bölümleri ayırın ve sistemi yeniden başlatın:
exit
umount -R /mnt
reboot
Sistem yeniden başlatıldığında, GRUB menüsü görünecek ve ardından Arch Linux otomatik olarak LUKS bölümünün kilidini TPM2 kullanarak açmalıdır. Herhangi bir şifre girmeden giriş ekranına ulaşmanız beklenir.
Ek Güvenlik ve Performans İpuçları
- BTRFS Anlık Görüntüleri:
snapperveyatimeshiftgibi araçlar kullanarak BTRFS anlık görüntülerini yönetebilir ve sisteminizi kolayca önceki bir duruma döndürebilirsiniz. - Yedekleme: LUKS başlığını yedeklemek her zaman iyi bir fikirdir:
cryptsetup luksHeaderBackup /dev/nvme0n1p3 --header-backup-file /path/to/backup.img - Güvenli Önyükleme (Secure Boot): TPM2 ile birlikte Secure Boot'u etkinleştirmek, önyükleme zincirinin daha da güvenli olmasını sağlar. Ancak, Arch Linux'ta Secure Boot'u yapılandırmak ek çaba gerektirebilir.
Sorun Giderme
- TPM2 kilit açma başarısız olursa: Sistem sizden LUKS şifresini isteyecektir. Şifreyi girerek manuel olarak açabilirsiniz. Bu durumda,
journalctl -bkomutuyla önyükleme günlüklerini kontrol ederek sorunun nedenini araştırın. Genellikle PCR'lerin değişmesi veya initramfs'in eksik yapılandırılması neden olur. - GRUB önyükleme hatası: Arch Linux ISO'su ile canlı ortama önyükleyerek chroot yapın ve GRUB kurulum adımlarını tekrarlayın.
- Ağ bağlantısı yok:
NetworkManagerservisinin etkin olduğundan ve doğru yapılandırıldığından emin olun.
8. Sıkça Sorulan Sorular (SSS)
Bu bölümde, Arch Linux'u BTRFS, LUKS ve TPM2 ile kurarken sıkça karşılaşılan sorulara yanıtlar bulacaksınız.
Neden TPM2 kullanmalıyım?
TPM2, sisteminizin önyükleme bütünlüğünü donanım düzeyinde doğrular. Bu sayede, kötü amaçlı bir yazılımın veya yetkisiz bir kişinin önyükleme zincirini değiştirmesi durumunda LUKS bölümünüz otomatik olarak açılmaz, ek bir güvenlik katmanı sağlar. Ayrıca, her önyüklemede manuel şifre girmek zorunda kalmamanız büyük bir kullanım kolaylığı sunar.
LUKS şifresini kaybetsem ne olur?
LUKS şifrenizi kaybetmeniz durumunda, eğer TPM2 kilit açma mekanizması da çalışmazsa (örneğin TPM2 temizlenmişse veya PCR'ler çok fazla değişmişse), verilerinize erişiminiz imkansız hale gelebilir. Bu nedenle, LUKS şifrenizi güvenli bir yerde saklamak veya yedek bir anahtar oluşturmak son derece önemlidir.
BTRFS anlık görüntüleri nasıl alınır?
BTRFS'nin yerleşik btrfs subvolume snapshot komutu ile anlık görüntüler alabilirsiniz. Örneğin, btrfs subvolume snapshot /mnt/@ /mnt/.snapshots/root_ komutuyla kök bölümünüzün bir anlık görüntüsünü alabilirsiniz. Daha kolay yönetim için snapper veya timeshift gibi araçları kullanmanız önerilir.
TPM2 kilit açma başarısız olursa ne yapmalıyım?
TPM2 kilit açma başarısız olduğunda sistem sizden manuel olarak LUKS şifresini girmenizi isteyecektir. Şifreyi girerek sistemi başlatabilirsiniz. Ardından, sorunun nedenini araştırmak için journalctl -b komutuyla önyükleme günlüklerini kontrol edin. PCR değerlerinin değişmesi (örneğin bir BIOS güncellemesi sonrası) veya initramfs'in yanlış yapılandırılması yaygın nedenlerdir. Gerekirse systemd-cryptenroll komutunu tekrar çalıştırarak yeni PCR değerleriyle anahtarı güncelleyebilirsiniz.
BTRFS için hangi sıkıştırma algoritmasını kullanmalıyım?
zstd (Zstandard) genellikle iyi bir denge sunar: hem iyi sıkıştırma oranları hem de hızlı performans. lzo daha hızlıdır ancak daha düşük sıkıştırma oranına sahiptir. zlib ise daha yavaştır ancak daha iyi sıkıştırma sağlar. Çoğu kullanıcı için compress=zstd iyi bir seçimdir.