Portál AbcLinuxu, 30. dubna 2025 12:31
Rozhodl jsem zakoupit do Venice nový disk, protože ten starý zdá se dosluhuje. Řekl jsem si tedy, že když už vyměním disk, vyřeším pár věcí, na které jsem při předchozí instalaci nemyslel, a sice šifrování. Člověk je tak trochu paranoidní poslední dobou...
Nakonec jsem zvolil šifrování celého disku pomocí LUKS, kromě /boot
. Případný útočník nemusí vědět, které všechny programy jsou na stroji nainstalované. Jedná se o víceuživatelský systém, jednotlivé domovské adresáře jsou na vlastních LVM logických oddílech, což by mělo usnadnit jejich případné zvětšování či zmenšování. V rámci minimalizace zadávání hesel při startu systému se oddíly pro /var
a /tmp
odemykají pomocí klíčového souboru uloženého na šifrovaném rootu. Oddíl pro SWAP se šifruje při každém spuštění systému náhodným klíčem. Domovské a další adresáře uživatelů se pak odemykají a připojují až při přihlášení příslušného uživatele pomocí pam_mount.
Vzhledem k financím, požadavkům na místo a nepříznivému ohlasu WD Green Power v Linuxu, jsem sáhl po "500 GB" Seagate Barracuda 7200.12 s 16 MB cache. Následuje stručný postup zprovozňování stroje Hikari.
Zdroj: Arch wiki: LUKS.
Pro kontrolu disku a přepsání použít badblocks, jinak stačí /dev/zero
.
badblocks -c 10240 -s -w -t random -v /dev/sda
Zdroj: Arch wiki: LVM.
Vzhledem k použití aktuálního Grubu 2.0 stačí vytvořit jedinou fyzickou partici. Pro operace s LVM je potřeba načíst modul dm_mod
.
Inicializování fyzického oddílu LVM:
pvcreate /dev/sda1
Vytvoření skupiny oddílů LVM:
vgcreate lvm_storage /dev/sda1
Vytvoření jednotlivých logických oddílů:
lvcreate -L 100M lvm_storage -n lvm_boot # Pro kontinuální oddíl lvcreate -C y -L 2G lvm_storage -n lvm_swap lvcreate -C y -L 10G lvm_storage -n lvm_tmp lvcreate -L 20G lvm_storage -n lvm_root lvcreate -L 10G lvm_storage -n lvm_var lvcreate -L 100G lvm_storage -n lvm_backup lvcreate -L 100G lvm_storage -n lvm_wine lvcreate -L 5G lvm_storage -n lvm_home_lenka lvcreate -L 5G lvm_storage -n lvm_home_pavel lvcreate -L 10G lvm_storage -n lvm_home_lucka # Pro oddíl využívající zbytek volného místa v lvm_storage lvcreate -l +100%FREE lvm_storage -n lvm_home_nik
Užitečný příkaz pro aktivování logických lvm oddílů:
vgchange -ay
Zdroj: Arch wiki: LUKS a jednotlivé díly seriálu o LUKS na rootu.
Nejprve načteme moduly pro dm-crypt a AES: dm-crypt
a aes-x86_64
.
Oddíly odemykané uživatelem zadávaným heslem (root, oddíly v home, backup a wine):
cryptsetup -c aes-xts-plain -s 512 -y luksFormat /dev/lvm_storage/lvm_root
Oddíly (var a tmp) odemykané pomocí klíčového souboru (keyfile) a jeho vytvoření:
touch /etc/keys/var.key dd if=/dev/random of=/etc/keys/var.key bs=1 count=256 cryptsetup -c aes-xts-plain -s 512 -v luksFormat /dev/lvm_storage/lvm_var /etc/keys/var.key
Nejzáludnější úkol:
... if you realy want this, type uppercase yes:
Odemčení vytvořených oddílů, aby k nim mohl instalátor:
cryptsetup luksOpen /dev/lvm_storage/lvm_root luks_root cryptsetup -d /etc/keys/var.key luksOpen /dev/lvm_storage/lvm_var luks_var
Zdroj: Arch wiki: Beginners guide.
Jako oddíly pro připojení volíme: /dev/mapper/luks_root
atd. Nemá cenu instalovat grub.
Finální /etc/rc.conf
:
# # /etc/rc.conf - Main Configuration for Arch Linux # # ----------------------------------------------------------------------- # LOCALIZATION # ----------------------------------------------------------------------- # # LOCALE: available languages can be listed with the 'locale -a' command # HARDWARECLOCK: set to "UTC" or "localtime" # USEDIRECTISA: use direct I/O requests instead of /dev/rtc for hwclock # TIMEZONE: timezones are found in /usr/share/zoneinfo # KEYMAP: keymaps are found in /usr/share/kbd/keymaps # CONSOLEFONT: found in /usr/share/kbd/consolefonts (only needed for non-US) # CONSOLEMAP: found in /usr/share/kbd/consoletrans # USECOLOR: use ANSI color sequences in startup messages # #LOCALE="en_US.utf8" LOCALE="cs_CZ.utf8" HARDWARECLOCK="UTC" USEDIRECTISA="no" TIMEZONE="Europe/Prague" KEYMAP="cz" CONSOLEFONT="ter-g16b" CONSOLEMAP="cz" #CONSOLEMAP="8859-2" USECOLOR="yes" # ----------------------------------------------------------------------- # HARDWARE # ----------------------------------------------------------------------- # # MOD_AUTOLOAD: Allow autoloading of modules at boot and when needed # MOD_BLACKLIST: Prevent udev from loading these modules # MODULES: Modules to load at boot-up. Prefix with a ! to blacklist. # # NOTE: Use of 'MOD_BLACKLIST' is deprecated. Please use ! in the MODULES array. # MOD_AUTOLOAD="yes" #MOD_BLACKLIST=() #deprecated MODULES=(dm_mod dm-crypt aes-x86_64 powernow-k8 cpufreq_ondemand !pcspkr !snd_pcsp) # Scan for LVM volume groups at startup, required if you use LVM USELVM="yes" # ----------------------------------------------------------------------- # NETWORKING # ----------------------------------------------------------------------- # # HOSTNAME: Hostname of machine. Should also be put in /etc/hosts # HOSTNAME="hikari" # Use 'ifconfig -a' or 'ls /sys/class/net/' to see all available interfaces. # # Interfaces to start at boot-up (in this order) # Declare each interface then list in INTERFACES # - prefix an entry in INTERFACES with a ! to disable it # - no hyphens in your interface names - Bash doesn't like it # # DHCP: Set your interface to "dhcp" (eth0="dhcp") # Wireless: See network profiles below # lo="lo 127.0.0.1" eth0="dhcp" INTERFACES=(lo eth0) # Routes to start at boot-up (in this order) # Declare each route then list in ROUTES # - prefix an entry in ROUTES with a ! to disable it # gateway="default gw 192.168.0.1" ROUTES=(!gateway) # Enable these network profiles at boot-up. These are only useful # if you happen to need multiple network configurations (ie, laptop users) # - set to 'menu' to present a menu during boot-up (dialog package required) # - prefix an entry with a ! to disable it # # Network profiles are found in /etc/network.d # # This now requires the netcfg package # #NETWORKS=(main) # ----------------------------------------------------------------------- # DAEMONS # ----------------------------------------------------------------------- # # Daemons to start at boot-up (in this order) # - prefix a daemon with a ! to disable it # - prefix a daemon with a @ to start it up in the background # DAEMONS=(syslog-ng @hal @network @cpufreq !netfs @crond @smartd @sshd @alsa @kdm)
Finální /etc/fstab
:
# # /etc/fstab: static file system information # none /dev/pts devpts defaults 0 0 none /dev/shm tmpfs defaults 0 0 #/dev/cdrom /media/cd auto ro,user,noauto,unhide 0 0 #/dev/dvd /media/dvd auto ro,user,noauto,unhide 0 0 #/dev/fd0 /media/fl auto user,noauto 0 0 /dev/mapper/luks_root / ext4 defaults 0 1 /dev/mapper/luks_var /var ext4 defaults 0 1 /dev/lvm_storage/lvm_boot /boot ext2 defaults 0 1 /dev/mapper/luks_swap swap swap defaults 0 0 /dev/mapper/luks_tmp /tmp ext4 defaults 0 1
Finální /etc/crypttab
pro automatické připojování šifrovaných oddílů za bootu:
# crypttab: Mappings for encrypted partitions # # Each mapped device will be created in /dev/mapper, so your /etc/fstab # should use the /dev/mapper/{NAME} paths for encrypted devices. # # Each PASSWORD field can be an absolute pathname to a key file (starting # with a slash, recommended) or a literal string that will be used as # a passphrase. To use special characters in the passphrase, surround it # by quotes, the usual bash quoting rules apply. # There are two special keywords that cannot be used as passphrases: # - ASK ask for a passphrase on boot # - SWAP use a random key and create a swapspace afterwards # WARNING: use the SWAP keyword carefully, as it overwrites the data # on the specified partition # # To create a key file: # hashalot -n 32 ripemd160 >/etc/crytfs.key # or # dd if=/dev/urandom of=/etc/cryptfs.key bs=256 count=1 # # To pass additional options to cryptsetup for non-LUKS partitions, use the # fourth column. # # NOTE: Do not list your root (/) partition here, it must be set up # beforehand by the initramfs (/etc/mkinitcpio.conf). # NAME SOURCE DEVICE PASSWORD OPTIONS #home /dev/hda4 mypassword #data1 /dev/hda3 "my \"password\"" #data2 /dev/hda5 /etc/cryptfs.key #swap /dev/hdx4 SWAP -c aes-cbc-essiv:sha256 -s 256 #vol /dev/hdb7 ASK luks_var /dev/lvm_storage/lvm_var /etc/keys/var.key luks_swap /dev/lvm_storage/lvm_swap SWAP -c aes-xts-plain -h whirlpool -s 512 luks_tmp /dev/lvm_storage/lvm_tmp /etc/keys/tmp.key
Háčky z /etc/mkinitcpio.conf:
HOOKS="base udev autodetect keymap pata scsi sata lvm2 encrypt filesystems"
Zdroj: Arch wiki: GRUB2.
Před chrootováním odemknout a připojit potřebné oddíly a hlavně:
mount --bind /dev /media/arch/dev
Instalace balíčku:
pacman -S grub2
Nastavení pro GRUB2 /boot/grub/grub.cfg
:
# Config gil for GRUB2 - The GNU GRand Unified Bootloader # /boot/grub/grub.cfg # Timeout for menu set timeout=0 # Default boot entry set deafult=0 insmod lvm # (0) Arch Linux menuentry "Arch Linux" { set root=(lvm_storage-lvm_boot) #/dev/sda1 linux /vmlinuz26 cryptdevice=/dev/lvm_storage/lvm_root:luks_root root=/dev/mapper/luks_root ro initrd /kernel26.img }
Novější verze GRUB 2, než je v Archu, by měla mít konfigurační soubor už generovaný.
Instalace GRUB 2:
grub-install /dev/sda
Zdroj: Ecrypted home with LUKS, pam_mount and LVM.
Záznamy oddílů z /etc/security/pam_mount.conf.xml
:
<volume pgrp="users" fstype="crypt" path="/dev/lvm_storage/lvm_home_%(USER)" mountpoint="~" cypher="aes-xts-plain" /> <volume user="nik" fstype="crypt" path="/dev/lvm_storage/lvm_backup" mountpoint="/backup" cypher="aes-xts-plain" /> <volume sgrp="wine" fstype="crypt" path="/dev/lvm_storage/lvm_wine" mountpoint="/wine" cypher="aes-xts-plain" />
Autentizace z virtuální konzole /etc/pam.d/login
:
#%PAM-1.0 auth required pam_securetty.so auth requisite pam_nologin.so auth required pam_unix.so nullok auth required pam_tally.so onerr=succeed file=/var/log/faillog auth optional pam_mount.so # use this to lockout accounts for 10 minutes after 3 failed attempts #auth required pam_tally.so deny=2 unlock_time=600 onerr=succeed file=/var/log/faillog account required pam_access.so account required pam_time.so account required pam_unix.so #password required pam_cracklib.so difok=2 minlen=8 dcredit=2 ocredit=2 retry=3 #password required pam_unix.so md5 shadow use_authtok session required pam_unix.so session required pam_env.so session required pam_motd.so session required pam_limits.so session optional pam_mount.so session optional pam_mail.so dir=/var/spool/mail standard session optional pam_lastlog.so
Autentizace pomocí kdm /etc/pam.d/kde
:
#%PAM-1.0 auth required pam_unix.so auth required pam_nologin.so auth optional pam_mount.so account required pam_unix.so password required pam_unix.so session required pam_unix.so session required pam_limits.so session optional pam_mount.so
Drobnosti podle poinstalačních tipů a KDEmod 4.3 RC2.
A příkaz, který nikdy ale opravdu nikdy nezkoušejte a už vůbec ne pod rootem:
chown -R lucka:wine /wine/lucka/*
Tiskni
Sdílej:
/boot
mohl být šifrovaný (ideálně by měl být šifrovaný i zavaděč, ale to už bychom se museli vrtat v BIOSu).
Díky, snad se to bude někomu hodit.
Určitě, takových návodů není nikdy dost.
Ještě mi tedy zbývá zazálohovat hlavičky oddílů s klíči LUKSu.
Doufám, že zálohovat budete nějakým způsobem i vlastní data, ne jenom LUKS hlavičky. Vlastní zálohy (dat) by pak měly být také šifrovány, nebo alespoň bezpečně uloženy. Tady mohu doporučit třeba projekt Duplicity, který umí šifrovat zálohy (a umožňuje i rozdílové zálohování).
GRUB 2 dal celkem zabrat, nedařilo se mi najít návod na tu verzi co je v Archu a na wiki nebyly kroky potřebné pro LVM. Nakonec jsem to splácal ještě z nějakých návodů na Ubuntu (kde zas mají novější verzi a generované konfiguráky). Jednu chvíli jsem si celkem nadával, že jsem nenechal ten /boot na normální partici.
On se /boot
obvykle dává jako samostatný oddíl... ale tohle alespoň s GRUBem 2 jde. Horší by bylo, kdybyste LVM i s /boot
postavil nad šifrovaným oddílem.
scp
), takže to lze použít i pro _bezpečné_ vzdálené zálohování. Samozřejmě je možné zálohovat na localhost (protokol file://
) a je možné šifrování vypnout (volba --no-encryption
).
Podobným nástrojem je rdiff-backup
, ale ten neumí šifrovat (AFAIK ani komprimovat). Funguje nicméně poměrně zajímavě - k aktuálním datům se dostanete přímo (ta jsou zrcadlena), rozdíly si zapisuje do vlastní adresářové struktury. K datům se tedy dostanete snadno přímo (tj. k aktuálním) a k dřívějším pomocí příslušného nástroje.
Tyto nástroje je vhodné použít pro zálohování. Pro šifrování dat, ke kterým častěji přistupujete, lze použít Truecrypt pokud chcete multiplatformní přístup (ještě by šel použít LUKS+FreeOTFE, ale ten u LUKS kontejnerů AFAIK neumí LRW/XTS, to byste musel kontejner šifrovat starším módem cbc-essiv
), jinak lze uvažovat kromě LUKS o EncFS, šifrovacím souborovém systému (FUSE).
Jinak v souvislosti se šifrováním nemohu nepřipomenout Rubberhose cryptoanalysis (komiks).
Ad komix: to se bohužel v některých západních „vyspělých“ zemích můžeš stát, tam ti neuvěří, že jsi zapomněl heslo.
Špatný ohlas na WD Green Power v Linuxu?
BTW: já jsem to pojal trochu jinak – zašifroval jsem celý disk (kromě /boot) a až nad tím, jsem vytvořil LVM a logické svazky.
Rozhodl jsem se, že radši nebudu riskovat
A dobře jste udělal (viz níže).
hdparm -B 255
vypnu power management, a parkovat se nebude. Jenomže ono to nejde... jde to jedině nástrojem od výrobce, přičemž maximální nastavitelná doba nečinnosti je nějakých 25,5s nebo kolik.
WD na protesty reagoval tak, že podporuje jenom Windows, čímž přilil olej do ohně. Nakonec snad pod tlakem nějakých firem, co prodávaly linuxové NAS s WD Green disky, vydal nějaký nový firmware, který ovšem dle některých způsobuje jen to, že vypíná _počítání_ load/unload cyklů ve SMART, ale disk vesele zběsile parkuje dál.
Bohužel jsem na tohle přišel pozdě (protože jsem dlouho řešil defektní řadič), takže jsem disk vrátil se známkami používání, takže jsem platil 4 stovky, aby si ho ode mne vzali, a já si mohl koupit nějaký jiný. Tím jsem s WD na dost dlouhou dobu skončil.
Narazil jsem na chybu, která se asi dlouho neprojevila, že když mám šifrovaný swap přes cryptoloop a zaberu fyzickou paměť přes mmap, tak v lepším případě mi jádro zabije daný proces, v horším případě upadne správa virtuální paměti a nezbývá než sysrq-boot. Není to ale stroprocentě reprodukovatelný, i když s vysokou pravděpodobností.
Nesetkal jste se s tím někdo? Nevíte, jestli to je vlastnost, nebo chyba cryptoloopu?
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.