Migració de directoris a particions diferents
En aquest laboratori assumirem que volem reorganitzar els directoris del nostre sistema de fitxers per a millorar el rendiment i la seguretat del sistema. Crearem 3 noves particions en el disc dur i migrarem els directoris /var, /tmp i /opt en aquestes noves particions.
-
Utilitzarem el mateix disc dur que en l'escenari anterior.
Com que ja tenim dades el que farem serà destruir totes les dades per a començar de nou. Per fer-ho, una forma senzilla és sobreescriure les dades amb zeros. Podem sobreescriure els 10GB del disc dur amb zeros amb la comanda
dd.dd if=/dev/zero of=/dev/nvme0n2 bs=1M count=10000💡 Nota:
La comanda
ddens permet copiar dades d'un lloc a un altre. En aquest cas, estem copiant zeros (/dev/zero) al disc dur (/dev/nvme0n2) amb un tamany de 1MB (bs=1M) i tantes vegades com indiquem (count=10000). Això sobreescriurà les dades del disc dur amb zeros i eliminarà totes les dades existents. -
Utilitzarem la comanda
fdiskper a crear tres noves particions en el disc dur.- La primera partició serà per a
/varamb el sistema de fitxersext4, etiquetavarmida 4GB. - La segona partició serà per a
/tmpamb el sistema de fitxersxfs, sense etiqueta i mida 2GB. - La tercera partició serà per a
/optamb el sistema de fitxersext4, etiquetaoptmida 3GB.
-
Crearem les noves particions en el disc dur. Podeu utilzar una pipeline per a automatitzar la creació de les particions.
echo -e "n\np\n\n\n+4G\nn\np\n\n\n+2G\nn\np\n\n\n+3G\nw" | fdisk /dev/nvme0n2
-
Formateja les particions amb els sistemes de fitxers corresponents i assigna les etiquetes.
mkfs.ext4 /dev/nvme0n2p1 tune2fs -L "var" /dev/nvme0n2p1 mkfs.xfs /dev/nvme0n2p2 mkfs.ext4 /dev/nvme0n2p3 tune2fs -L "opt" /dev/nvme0n2p3💡 Nota:
El sistema de fitxers xfs no esta instal·lat per defecte a debian, per tant, haurem d'instal·lar-lo abans de poder utilitzar-lo (
apt install xfsprogs).
- La primera partició serà per a
-
Monta les particions en directoris del sistema de fitxers. Montarem les particions a
/mntper a poder migrar els directoris.mkdir /mnt/var mount /dev/nvme0n2p1 /mnt/var mkdir /mnt/opt mount /dev/nvme0n2p3 /mnt/opt
💡 Nota: Com que la partició
/tmpés temporal, no la muntarem ja que no necessitem migrar cap dada. -
Migrarem els directoris
/var,/tmpi/opta les noves particions. Per fer-ho podem utilitzar la comandacporsync. En aquest cas utilitzarem rsync per a poder mostrar el progrés de la còpia. Normalment, la einarsyncno ve instal·lada per defecte en la majoria de distribucions, per tant, haurem d'instal·lar-la abans de poder utilitzar-la (apt install rsync).rsync -av /var /mnt cp -ax /opt /mnt🚀 Suggeriment:
Us recomano utilitzar la comanda
rsyncper a migrar els directoris ja que ens permet mostrar el progrés de la còpia i també ens permet reprendre la còpia en cas que es talli la connexió o hi hagi un error. A més, també ens permet excloure directoris o fitxers que no volem migrar i ens permet fer còpies incrementals. Podeu consultar la documentació de la comanda per a veure totes les opcions disponibles (man rsync). -
Comprovem que les dades s'han migrat correctament.
diff -r /var /mnt/var diff -r /opt /mnt/opt -
Montarem les particions en els directoris corresponents del sistema de fitxers.
umount /mnt/var mount /dev/nvme0n2p1 /var umount /mnt/opt mount /dev/nvme0n2p3 /opt mount /dev/nvme0n2p2 /tmpAra ja teniu els directoris
/var,/tmpi/optmuntats en les noves particions. Podem fer servir la comandadfper a comprovar que les particions s'han muntat correctament.
-
Ara reinicieu el sistema:
reboot💡 Nota:
Un cop reinicieu el sistema, els directoris
/var,/tmpi/optno estaran muntats en les noves particions. Podeu comprovar-ho amb la comandadf. Això és normal ja que hem muntat les particions manualment i no hem el fitxer/etc/fstabper a que es muntin automàticament en l'arrencada del sistema. -
Modifica el fitxer
/etc/fstabper a que les particions es muntin automàticament en l'arrencada del sistema.echo "/dev/nvme0n2p1 /var ext4 defaults 0 0" >> /etc/fstab echo "/dev/nvme0n2p2 /tmp xfs defaults 0 0" >> /etc/fstab echo "/dev/nvme0n2p3 /opt ext4 defaults 0 0" >> /etc/fstab💡 Nota:
El fitxer
/etc/fstabconté la informació de les particions que es muntaran automàticament en l'arrencada del sistema. Cada línia del fitxer conté la informació d'una partició. Els camps de cada línia són: dispositiu, punt de muntatge, sistema de fitxers, opcions, freqüència de comprovació i ordre de comprovació. Podeu consultar la documentació del fitxer per a més informació (man fstab). -
Comprova que les particions es muntin automàticament en l'arrencada del sistema.
rebootUn cop reinicieu el sistema, les particions
/var,/tmpi/opts'hauran muntat automàticament en els directoris corresponents. Podeu comprovar-ho amb la comandadf.
En aquest punt podriam optimitzar la configuració particions per a millorar el rendiment del sistema.
-
Utiltizarem els UUIDs en lloc dels dispositius per a muntar les particions. Això ens permetrà identificar les particions de forma unívoca i evitar problemes en cas que els dispositius canviïn d'identificador. Per fer-ho podem utilitzar la comanda
sedper actualitzar el fitxer/etc/fstab.sed -i "s|/dev/nvme0n2p1|UUID=$(blkid -s UUID -o value /dev/nvme0n2p1)|" /etc/fstab sed -i "s|/dev/nvme0n2p2|UUID=$(blkid -s UUID -o value /dev/nvme0n2p2)|" /etc/fstab sed -i "s|/dev/nvme0n2p3|UUID=$(blkid -s UUID -o value /dev/nvme0n2p3)|" /etc/fstab🔍 Pregunta: En quins casos poden canviar els dispositius o tenir duplicats?
Els dispositius poden canviar d'identificador en cas que es connectin més dispositius al sistema o es canvii l'ordre de connexió dels dispositius. Això pot provocar que les particions es muntin en llocs diferents dels esperats. Per a evitar aquest problema, és recomanable utilitzar els UUIDs en lloc dels dispositius per a muntar les particions.
-
Utilitzarem opcions més específiques per protegir la partició
/tmpper a evitar que s’executin programes des de la partició. Utilitzant les opcions nodev, nosuid, i noexec:-
Edita el fitxer
/etc/fstabi afegeix les opcionsnodev,nosuid, inoexeca la partició/tmp.ℹ️ Què fan les opcions
nodev,nosuid, inoexec?La opció nodev evita que es puguin executar dispositius en la partició. La opció nosuid evita que es puguin executar programes amb permisos de superusuari en la partició. La opció noexec evita que es puguin executar fitxers binaris des de la partició.
-
Comprova les opcions després d'editar el fitxer
/etc/fstab.mount | grep /tmp
-
Per aplicar les opcions de muntatge a la partició
/tmp, farem unrebootdel sistema.
-
Testem les opcions de muntatge de la partició
/tmp:-
Prova d'executar un programa des de la partició
/tmpcom a usuari no privilegiat.echo "echo 'Hello, World'" > /tmp/hello.sh chmod +x /tmp/hello.sh /tmp/hello.sh bash /tmp/hello.sh
-
Prova de fer el mateix com a usuari privilegiat.
su - /tmp/hello.sh bash /tmp/hello.sh
👁️ Observació:
Observeu que la opció
noexecimpedeix la execució dels binaris però no ens protegeix contra l'execució de scripts de bash. -
Prova d'accedir a un dispositiu creat a
/tmp:-
Inicialitza un dispositiu a
/tmputilitzant la comandamknod.mknod /tmp/dispositiu c 1 3⚠️ Compte:
La comanda
mknodúnica i exclusivament la poden fer els usuaris amb permisos de superusuari. Per tant, feu servir la comandasuper a canviar a l'usuarirootabans de fer servir la comandamknod. -
Per accedir al dispositiu, utilitza la comanda
cat.cat /tmp/dispositiu
👁️ Observació:
Fixeu-vos que quan intento accedir a un dispositiu al directori actual, no hi ha cap problema. Però quan intento accedir al dispositiu creat a
/tmp, rebre un missatge d'error indicant que no es pot accedir al dispositiu. Això és degut a la opciónodevque impedeix l'accés a dispositius en la partició. -
-
Per veure, les implicacions de la opció
nosuid, podem realitzar el següent experiment:Per fer-ho, crearem un executable amb c que ens indicarà l'identificador de l'usuari real i l'identificador de l'usuari efectiu. On l'usuari real és l'usuari que ha iniciat la sessió i l'usuari efectiu és l'usuari que executa el programa. Si un programa té el bit
suidactivat, l'usuari efectiu serà l'usuari propietari del programa i no l'usuari que l'ha executat.#include <stdio.h> #include <sys/types.h> #include <unistd.h> int main() { printf("Effective user ID: %d\n", geteuid()); printf("Real user ID: %d\n", getuid()); return 0; }Compilem el programa amb la comanda
gcc.gcc -o /tmp/suid /tmp/suid.c💡 Nota:
El paquet
gccno ve instal·lat per defecte en una instal·lació mínima de Debian, per tant, haurem d'instal·lar-lo abans de poder utilitzar-lo (apt install build-essential).-
Desactiva la opció
nosuidi també la opciónoexecper a la partició/tmp. Per fer-ho, utilitza l'usuarirootper a editar el fitxer/etc/fstab. -
Remunta la partició
/tmp. -
Prova d'executar el programa com a usuari no privilegiat.
/tmp/suid -
Activa la opció
nosuidi torna a provar d'executar el programa./tmp/suid
La següent imatge representa la seqüència de comandes per a provar la opció
nosuid:
👁️ Observació:
Fixeu-vos que quan la opció
nosuidestà activada, no es pot executar el programa amb permisos de superusuari. Això és important per a evitar que els usuaris no privilegiats puguin executar programes amb permisos de superusuari. Aquesta opció pot permetre escalar privilegis i comprometre la seguretat del sistema. -
-
-
🔍 Pregunta: Per què és important tenir els directoris
/var,/tmpi/opten particions diferents?La raó principal per a tenir els directoris
/var,/tmpi/opten particions diferents és per a millorar el rendiment i la seguretat del sistema. El directori/varconté dades variables com ara logs, bases de dades, correu electrònic, etc. Si aquest directori es queda sense espai, el sistema podria fallar. El mateix raonament s'aplica al directori/tmpi/opt. Per això, és important tenir-los en particions separades per a evitar que el sistema falli. A més, tenir els directoris/var,/tmpi/opten particions separades també millora la seguretat del sistema ja que si una partició falla, les altres particions seguiran funcionant.
Anem a fer una simulació de com respon el sistema en cas de no tenir els directoris /var, /tmp i /opt en particions separades. Per a això, simularem que el directori /opt es va omplint fins a ocupar tot l'espai disponible en la partició principal del sistema.
-
Desmuntem la partició
/optper a poder continuar amb l'exercici.umount /opt -
Creeu un fitxer de 20GB al directori
/opt:dd if=/dev/urandom of=/opt/fitxer bs=1M count=20480 -
Comprova l'estat del sistema.
df -h
-
Intenta instal·lar un paquet amb
apti comprova que el sistema falla.apt install htop
Com podeu veure, el sistema fallarà ja que no té espai suficient per a instal·lar el paquet. Això és un problema greu ja que el sistema no podrà funcionar correctament fins que no alliberem espai en la partició principal.
-
Elimina el fitxer que has creat per a poder continuar amb la resta de l'exercici.
rm /opt/fitxer -
Munteu la partició
/opti torneu a crear el fitxer per a omplir el directori.mount /dev/nvme0n2p3 /opt dd if=/dev/urandom of=/opt/fitxer bs=1M count=20480
-
Ara únicament teniu la partició
/optplena; però el sistema pot continuar fent tasques:apt install htop