Kulcsszó - fstab

A napokban egy backup szervert kellett beüzemelnem, aminek a háttértára egy ISCSI target.
Először is be kellett állítanom egy interfészt, ami belső hálózaton, az eth1-en keresztül kommunikál az ISCSI-t kiajánló szerverrel:

vi /etc/network/interfaces
auto eth0 # internet oldali láb
iface eth0 inet static
address 250.200.150.100
netmask 255.255.255.0
gateway 250.200.150.1
dns-nameservers 8.8.8.8
metric 0

auto eth1 # belső hálós láb
iface eth1 inet static
address 10.10.10.10
netmask 255.255.255.0
gateway 10.10.10.1
metric 1

service networking restart

A hálózat beállítása után teszteltem az ISCSI-t kiajánló szerver elérhetőségét:
ping 10.10.10.254

A szerver elérhető volt, így következő lépésként a szükséges csomagok telepítését végeztem el:
apt-get install open-iscsi

Ezután a storage-on beállításra került az, hogy csak a telepített szerver IQN-jével lehessen csatlakozni a targetekhez (az IQN-ünk kinyerhető a /etc/iscsi/initiatorname.iscsi fájlból).

Az engedélyezés után ellenőrizzük a storage által kiajánlott targeteket, majd bejelentkezünk abba:
iscsiadm -m discovery -t sendtargets -p 10.10.10.254
iscsiadm -m node --login --p 10.10.10.254

Bejelentkezés után a target megjelenik a /dev/mapper alatt, ezután:
parted /dev/mapper/iscsitargetneve # partíciós tábla készítése parted segítségével
(parted) mklabel gpt
(parted) unit TB
(parted) mkpart primary 0.00TB 8.00TB
(parted) quit
mkfs.ext4 /dev/mapper/iscsitargetneve1 # fájlrendszer létrehozása
mkdir -p /backup
mount /dev/mapper/iscsitargetneve1 /backup # fájlrendszer felcsatolása

A beállítás elvégzése után teszteltem az ISCSI target írhatóságát, mellyel nem volt gond.
Felmerülhet azonban a kérdés, hogy miként tudjuk perzisztenssé tenni a beállítást - azaz újraindítás után automatikusan bejelentkezni az ISCSI targetbe, és felmountolni azt. Íme:vi /etc/iscsi/iscsid.conf
node.startup = manual # ezt a sort módosítjuk az alábbira:
node.startup = automatic
echo "/dev/mapper/iscsitargetneve1 /backup ext4 _netdev 0 0" >> /etc/fstab

Fontos! Az fstab-ban a "defaults" helyett "_netdev" opciót kell beállítani. Ha nem így járunk el, és újraindítás után az operációs rendszerünk előbb próbálja majd meg felmountolni a targetet, mint ahogy a hálózati kapcsolat feláll, úgy a mount sikertelen lesz.

Az alábbi tutorialban leírom, miként lehet titkosított merevlemezt készíteni és menedzselni Linux alatt.

Figyelem! A leírás követése visszavonhatatlan adatvesztést okoz a partíción / merevlemezen.
Fontos, hogy a megadott titkosítási jelszót jegyezzük meg, különben búcsút mondhatunk adatainknak!

apt-get install cryptsetup
cryptsetup -y -v luksFormat /dev/sdb1 # a /dev/sdb1 helyett megadjuk a titkosítani kívánt partíció / merevlemez elérési útvonalát
cryptsetup luksOpen /dev/sdb1 secretdisk # a "secretdisk" helyett megadjuk a titkosított partíció / merevlemez fantázianevét, amivel később hivatkozni fogunk rá
apt-get install pv
pv -tpreb /dev/zero | dd of=/dev/mapper/secretdisk bs=128M # azért, hogy ne okozzon problémát az esetleg a diszken lévő régi adat, felülírjuk azt nullákkal
mkdir -p /mnt/secretdisk # elkészítjük a csatolási pontot
cd /etc && echo "/dev/mapper/secretdisk /mnt/secretdisk ext4 defaults,noauto 0 1" >> fstab # beállítjuk fstabba a csatolási pontot
mkfs.ext4 /dev/mapper/secretdisk # elkészítjük a fájlrendszert

A fenti leírás után teszteljük a titkosított kötet működését:
mount /dev/mapper/secretdisk
df -H && cd /mnt/secretdisk && ls -l

Ha le szeretnénk csatolni a crypt-elt kötetet, a következőt kell tennünk:
umount /mnt/secretdisk # lecsatoljuk a kötetet
cryptsetup luksClose secretdisk # bezárjuk a cryptet

Ha újra fel szeretnénk csatolni a követet, csak a következő parancsokat kell kiadnunk:
cryptsetup luksOpen /dev/sdb1 secretdisk # kinyitjuk a cryptet
mount /mnt/secretdisk # felcsatoljuk a kötetet

Hogyan tudjuk megváltoztatni, törölni a jelszavunkat, vagy épp újat hozzáadni?
Minden esetben a fentiek szerint le kell csatolnunk a cryptelt kötetet, majd:

Jelszómódosítás:
cryptsetup luksChangeKey /dev/sdb1

Új jelszó hozzadása (összesen nyolc jelszó tartozhat egy kötethez):
cryptsetup luksAddKey /dev/sdb1

Jelszó törlése (egy jelszónak legalább kell maradnia):
cryptsetup luksRemoveKey /dev/sdb1

Mit tegyünk, ha jelszó megadása nélkül akarjuk felcsatolni a kötetet? Először is gondoljuk át, hogy ez esetben egy kulcsfájlt kell létrehoznunk, ami ha illetéktelenek kezébe kerül, akkor hozzá fognak tudni férni a titkosított köteten tárolt adatainkhoz.
dd if=/dev/urandom of=/root/.secretdisk.keyfile bs=1024 count=4 # elkészítjük a kulcsfájlt
chmod 400 /root/.secretdisk.keyfile # beállítjuk rajta a jogosultságokat
cryptsetup luksAddKey /dev/sdb1 /root/.secretdisk.keyfile # hozzárendeljük azt a kötethez
cd /etc && echo "secretdisk /dev/sdb1 /root/.secretdisk.keyfile luks" >> crypttab

Az eddig megismert Linuxos környezetek legtöbbjében a beüzemelő szakemberek külön partíciót hoztak létre a swap-nak. Több esetben belefutottunk így beüzemelt szervereknél, hogy 1. a szerver vagy nem használta ki a cserehely töredékét sem; 2. a swap partíció mérete jócskán kevésnek bizonyult. Bőven vannak érvek a fájlba való swapolás mellett és ellen is (pl. itt, itt, vagy épp itt). Mindenesetre az use case adott, nézzük, hogyan lehet fájlba swapolni:

fallocate -l 32G /swapfile # létrehozunk egy 32Gb méretű fájlt
chmod 600 /swapfile # beállítjuk a jogosultságot
mkswap /swapfile # megformázzuk a cserhelyet
swapon /swapfile # felcsatoljuk a swapot
free -m # ellenőrizzük a swap működését
echo "/swapfile swap swap sw 0 0" >> /etc/fstab # hozzáadjuk az fstab fájlhoz, hogy következő indításkor is meglegyen