Los permisos estándar del sistema de ficheros de Linux permiten protegerse de accesos no deseados. Sin embargo, en ocasiones, esta protección no es suficiente, dado que pueden existir ciertas situaciones que permitan a otros usuarios acceder a nuestros datos. Algunas de estas situaciones pueden ser:
- En la utilización de un sistema de almacenamiento en una infraestructura externa, cualquier usuario con privilegios de superusuario puede acceder sin restricciones a cualquier información.
- Cualquier tipo de acceso directo al disco duro desde un sistema operativo externo, montando el disco duro en otro ordenador.
- La utilización de un live-cd en el arranque de un equipo, nos permite acceder a los datos cortocirtuitando todos los permisos de los ficheros.
La solución que proponemos en este articulo, es la encriptación de los datos como medida protección.
A continuación, detallamos como utilizar esta técnica en los diferentes niveles del sistema de ficheros:
1. Protección a nivel de fichero
La solución más simple y flexible para proteger un fichero sensible, es encriptarlo directamente, utilizando el comando bcrypt. Para realizar el encriptado realizamos los siguiente pasos:
Disponemos de un fichero no encriptado (public):
[root@linux ~]# cat public Fichero con contenido publico. CETA-CIEMAT
Se encripta el contenido del fichero public enviando el resultado a un nuevo fichero public.bfe, eliminando el fichero original public:
[root@linux ~]# bcrypt public Encryption key: Again: [root@linux ~]# ls public.bfe
Verificamos el contenido del nuevo fichero encriptado:
[root@linux ~]# cat public.bfe T³òQr>.Íÿ«4ax_z¼ÃrzÈÝyì¦@ï'O>Sl`»º(âüQÉÊ´0ÅÁjÕ!XN0x¶ãR§zÆ0ǬG~}ù{ðSÑ´}ÚwòÜRä·Qææ,
Para visualizar el contenido de public.bfe sin desencriptarlo:
[root@linux ~]# bcrypt -r -o public.bfe Encryption key: Fichero con contenido publico. CETA-CIEMAT
Para desencriptar el contenido del fichero public.bfe:
[root@linux ~]# bcrypt public.bfe Encryption key: [root@linux ~]# ls public [root@linux ~]# cat public Fichero con contenido publico. CETA-CIEMAT
El inconveniente de este método, es que el usuario está obligado desencriptar manualmente cada fichero que desee consultar, además de tener que volver a encriptar el fichero si realiza alguna modificación.
NOTA: La utilidad bcrypt se encuentra en el paquete bcrypt de los repositorios EPEL o RepoForge (antiguo RPMForge).
2.Protección a nivel de disco o partición
Otra solución es gestionar el encriptado directamente a nivel de bloques o de discos. En este sistema el acceso es transparente por parte del usuario, ya que es el sistema el que se encarga de encriptar los bloques en el momento de su escritura y desencriptarlos cuando se realiza la lectura.
Utilizaremos la utilidad cryptsetup para realizar la encriptación a nivel de disco.
yum install cryptsetup-luks
Inicializamos la partición /dev/sdb1 y establecemos la passphrase (a modo de contraseña):
[root@linux ~]# cryptsetup -y -v luksFormat /dev/sdb1 WARNING! ======== This will overwrite data on /dev/sdb1 irrevocably. Are you sure? (Type uppercase yes): YES Enter LUKS passphrase: Verify passphrase: Command successful.
La partición /dev/sdb1 no puede ser montada por los medios convencionales:
[root@linux ~]# mount /dev/sdb1 /mnt/data/ mount: unknown filesystem type 'crypto_LUKS'
Creamos un fichero especial de tipo bloque a partir de una partición encriptada. Para ello, es importante introducir la clave de encriptación:
[root@linux ~]# cryptsetup luksOpen /dev/sdb1 securedev Enter passphrase for /dev/sdb1:
Damos formato ext4 al fichero de bloques:
[root@linux ~]# mkfs.ext4 /dev/mapper/securedev mke2fs 1.41.12 (17-May-2010) Filesystem label= OS type: Linux Block size=4096 (log=2) Fragment size=4096 (log=2) Stride=0 blocks, Stripe width=0 blocks 524288 inodes, 2095962 blocks 104798 blocks (5.00%) reserved for the super user First data block=0 Maximum filesystem blocks=2147483648 64 block groups 32768 blocks per group, 32768 fragments per group 8192 inodes per group Superblock backups stored on blocks: 32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632 Writing inode tables: done Creating journal (32768 blocks): done Writing superblocks and filesystem accounting information: done This filesystem will be automatically checked every 28 mounts or 180 days, whichever comes first. Use tune2fs -c or -i to override.
El fichero de bloques creado nos permite acceder a los datos desencriptados:
[root@linux ~]# mount /dev/mapper/securedev /mnt/data [root@linux ~]# ls /mnt/data/ lost+found
El sistema de ficheros montado no permite saber que se trata de un soporte físico encriptado:
[root@linux ~]# mount /dev/mapper/VolGroup00-LogVol00 on / type ext4 (rw) proc on /proc type proc (rw) sysfs on /sys type sysfs (rw) devpts on /dev/pts type devpts (rw,gid=5,mode=620) tmpfs on /dev/shm type tmpfs (rw) /dev/sda3 on /boot type ext4 (rw) /dev/mapper/VolGroup00-LogVol01 on /var/log type ext4 (rw) none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw) /dev/mapper/securedev on /mnt/data type ext4 (rw)
Por último, podemos conocer el estado con el siguiente comando:
[root@linux ~]# cryptsetup -v status securedev /dev/mapper/securedev is active and is in use. type: LUKS1 cipher: aes-cbc-essiv:sha256 keysize: 256 bits device: /dev/sdb1 offset: 4096 sectors size: 16767701 sectors mode: read/write Command successful.
3. Protección a nivel de sistema de ficheros
El mejor compromiso entre la flexibilidad y la eficiencia lo aporta la encriptación a nivel del sistema de ficheros. La solución mas extendida para realizar este tipo de encriptación es ecryptfs.
La idea es utilizar un directorio, generalmente oculto, para almacenar en él los datos encriptados. Este directorio podrá montarse como un sistema de ficheros ecryptfs. Cualquier operación de montaje debe validarse mediante una contraseña (passphrase).
La utilidad ecrytfs podemos encontrarla en el paquete ecryptfs-utils:
[root@linux ~]# yum install ecryptfs-utils
Creamos el directorio .data:
[root@linux ~]# mkdir .data
Realizamos el encriptado del directorio .data utilizando el punto de montaje /data:
[root@linux ~]# mount -t ecryptfs .data /data Select key type to use for newly created files: 1) tspi 2) passphrase 3) openssl Selection: 2 Passphrase: Select cipher: 1) aes: blocksize = 16; min keysize = 16; max keysize = 32 (not loaded) 2) blowfish: blocksize = 16; min keysize = 16; max keysize = 56 (not loaded) 3) des3_ede: blocksize = 8; min keysize = 24; max keysize = 24 (not loaded) 4) cast6: blocksize = 16; min keysize = 16; max keysize = 32 (not loaded) 5) cast5: blocksize = 8; min keysize = 5; max keysize = 16 (not loaded) Selection [aes]: Select key bytes: 1) 16 2) 32 3) 24 Selection [16]: Enable plaintext passthrough (y/n) [n]: Enable filename encryption (y/n) [n]: Attempting to mount with the following options: ecryptfs_unlink_sigs ecryptfs_key_bytes=16 ecryptfs_cipher=aes ecryptfs_sig=c8e1036f4a06f430 WARNING: Based on the contents of [/root/.ecryptfs/sig-cache.txt], it looks like you have never mounted with this key before. This could mean that you have typed your passphrase wrong. Would you like to proceed with the mount (yes/no)? : yes Would you like to append sig [c8e1036f4a06f430] to [/root/.ecryptfs/sig-cache.txt] in order to avoid this warning in the future (yes/no)? : yes Successfully appended new sig to user sig cache file Mounted eCryptfs
Comprobamos que el montaje se ha realizado correctamente:
[root@linux /]# mount /dev/mapper/VolGroup00-LogVol00 on / type ext4 (rw) proc on /proc type proc (rw) sysfs on /sys type sysfs (rw) devpts on /dev/pts type devpts (rw,gid=5,mode=620) tmpfs on /dev/shm type tmpfs (rw) /dev/sda3 on /boot type ext4 (rw) /dev/mapper/VolGroup00-LogVol01 on /var/log type ext4 (rw) none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw) /root/.data on /data type ecryptfs (rw,ecryptfs_sig=c8e1036f4a06f430,ecryptfs_cipher=aes,ecryptfs_key_bytes=16,ecryptfs_unlink_sigs)
Creamos un fichero en el sistema de ficheros montado:
[root@linux ~]# cd /data [root@linux data]# echo "Mensaje de prueba" > file.txt [root@linux data]# cat file.txt Mensaje de prueba
Si desmontamos e intentamos visualizar el fichero creado:
[root@linux /]# cd [root@linux ~]# umount /data [root@linux ~]# cd .data [root@linux .data]# ls file.txt [root@linux .data]# cat file.txt éRÕ §"3DUfw`ùY0aé©Å6Á8|Ií_CONSOLEÈáoJô0|#^~&`½!þcgÿäõ×ïïN].z¼ZÄsìsÛ õ.é#!ÉÍøfÜVÏß©2x6ôK)æ²ãF´æ!`×tú"ÓË+GBä 7©¯àüegò¡Xg)NñX&ÛaLÃoôSj83Ñ[\ä©?i`W<&ùC·«#´~³¯0\VéܱtYªö7m°qTÝÕÁva.-JѶ>U )köæ°T¯Þºx×í_wS<Zl$B9êöD¿ÇØK¯zmY=Ϥã»ö©dÕW ¿j ùYÓ0pút¡"&@_ìÂVÙ·÷Sýæcscbyt5]ß`¯t`qux½ÿÿÈi÷ð«ú9Ã+<µø=9pqv ú'*÷,¼SpoA-ûĽÏ>!`[wÜZü4×}4ö½ ±ÎdZVoâØ´âY'wsoÖGNôÓe0÷niÏl|Ѥl*"Qªíd\ÜÌýòиWu·)¼E{ ,¾3añ2+lÀ+41þ(á#ÿtu(!îÁ´K+úÛòerÃj¥Ú{ î¨ÁùeÇ^R±Ø=Úät±s|Ó1µEg 2Åd Ò~à"¾ío×EcyÛÝ[kïÓ;ÅÜÉïÒã>2o|gÒH:æfSÄ{f×Y"û}*¤´]Sûw!¹_º ñO4±o¶7#ȧ +ìÈ=qÚòí·ô<ß°¡³J¾3ÙÅýÂy _¦#¸®°ÐÎÝþLñX/Vö7Õ)ÈûRqcÿsé´]iàÇZ'·âÔA©.B'þfªøTvµU÷!®Áä)à mxà¬Å;U9Äy_ÿaj¸úéµ;¥T |Ékûù¢ mSTxýô Ií_ôîëx¡µg§¥n÷äYîü3p®d.SH '0Ñì§x6VÁùâ&¤ÐÒH4Ó+l[7ð<ü±ö .#`,H¬Î¡C¹íßJÚ¼X«î)¨×#©ç¡'ìt&éoÜZGákÆè+ðs]wAxe_cÊ[óx*ß× 1R/HÖ` ©(sd\g\MÁpÀ¼Ú ¬&!Úù²*Ä¢½£IÇ{=c¾PO©0Àýý÷¨q ÐlPtB\ÅHT×Ë^o<Öòè+ï"M7¢f%IC«OrªH²VIù7]ÅÑ_]àÙ¶ápµ#v8t:jÿ0pOX/hùÃû+Z8u[]-coieQ¯§ÀÑÃ;ó°ñÀ¢«é[rÌáGÔòî¾WôC¬®ÚÐÞùpíEEâOQr7ɹ¾ácÂÜô5¬3w°ëÉÍ/á,°Üq1q!®Q ë¥SÈjþê»":í¸þwå>Há¶:âÐûL_dÈêàlPqäZ¸39È`hØuPHʨWo!Äc¾[¼ìSöÒZ2hk¶h«Sú ² Æ¥:©¬ì¬¿é(ç|(uÐx¬R¥TqØ¡ÕôRq{¦h¡Ù½çP+`ñ¡Z÷¢µ?Éá6oT¯Jسæ' Z˧icßC¤\>:aæÕbgðÈCOØгÁ}Êg§½çåõ/knÒåã_ðÅ4ñ$xHu3ÌøMÕwPÌuW¼ÝÁ t^6Å(ÂÛ´ V¬5ÿ#Í3R*³,¦~E±Úf·1µù9òa<.ù] Jô.YZìpce2&Ïï\´áµÿeýBëò½mX!¼Îûw/%xü¯Õî] cuOÏ +1çêçÆÒ~à_Í ]õÊP2r>§a5[ú¾±æ5¸ÄO A4ïCÏßÍn¹°f jKØ!+!¶söv¶·ª© Ì2ªVÇô°¢EUx ýyÑJï x£¶ù Ré?Ä×:oon2y=väÁ§ù¼?`:á>J¹TJCÎÝër$wó\]±Ï &5Ù4ßnFKáw:E7]M%ì}>Ñ,?ªdU¶©ëàÄ¢éqLÊãÖ-¦Ï ×.ɯJ æÑ BfâW¹~ê¤Vf w®Ù4_ºø¬°ºgݦ\ÔtÜp=é3(H»Çϲ«NãÉð%Õ|Z³Ã¦OÝbb[U8ç>-{Ü2º¿\±pƼ¼TÛDé!¤ÓË)¡GÊeB4²(Î$M} 6÷Á Øg¨Ü ]"wÍ¡UKÝT]©©Áý+ UÚÉ(ýiÇ¥ _áb³caÿΰ¿ `ªgÞgÃ2>vIöݨ"1 ÷gÎÉPblÅfâd5×)°á×X %6-cS Õ_SühþaÔ¨©p¨¤>fåsÙ(ßNõÐj0ßc¯QHÖ(þÇ&Í`&fßQiH£îÚúù!áÒÝfTÕA»ËÑqÃcª®¼[ÓA|À;Ü2¸VIY7¸ØcêÖM]å<) »÷:0ràxµlEÎÃ÷äðK'Ä´?öË6 Kÿ»!oýÍþû¨1î .: °ÜÙîÙ'rØøQr~6[ºSRÆy7`8õ ä°Û_xËX {" þCT+!Üvþ]¦ÍZ%aâæ¿Cáðâ7fò.a4³üIí#4¦ÁÓâ&ô²Kä3}É°g@æâFbäâ0ôB/K¡f'Õ`Agq8O}ôÞ«.QÞñl¦ÅÀ·|ø2»( ø)Ôê_ÕÚìÂqÌk»âuÑ bRÈ^M|ÂbTÊÆipôÓÅ1xRhz§_ûæR%ùõÎÖ+zBð 'ßÍf¸/÷þ\~±§«ù¾õ Wð@6Üà}¨O÷ÚiøT¢°æó¡¹Ä½ÓÞk%ãôÎyÏt+Hï8Ù¾àjÊ}áã¯øçÄ^nxèar^þ®©_ê®dÒæÐ~Mëª%øשû;ÊäÛå36©·¼ùRµwÁ¹ø5% ©VhPT[ðñ6^ú¸ì¼¢àÏ*@Fv5óĹSPVS9_o_ª~u÷x.±÷)Ð]ÂÙ4γoËÝq~I4f¿pa¤@°Õ õ0OæG¶xxpxºûxl+½KÜFà4ÜU%y^ÎòÑab@tibJS =Ì.iAÀÑ2m¾~RG`Î&B&I&W_Oá{Î~.ÇàvÑߧZÇó±_ïÚ-¾É:%é±>ÐX6HÃ2ͽ¾ëÌDÍÍfߦÍ|@ýÁ7Ø5ݺrä0ÖEò~@-ãHLk_SÜ \vZ··#&Ò:{ÕåR8¦_ÍO»HàÕqK"b Åâ»Ãí¨<ÖÍZ×%ó2hZØ¡ a8<ŬóΤ_º¯ùêmv·Êö: 6%lmGѧ£¿ÈÄ|£Åv»õzD[ªnJ©a&®P÷ËÞÒÞ«EÉ>±V>Ï6c8Тk0:ÊdÌSÊ 50,ö³Ø½úâñÞÐ5^ù.ãó9HqSTSB#, ÏvXlkGáOG}º/t%8Ѻ=7QS®ZVE²r4½å°ÿ2w]4ÛبÒXrêeTÕ¸. ¶eKLmlÁhHÛwM¸çä<åÙBbÎx1âû´,ö{WÿyZàiùq´IÒ| éb«#ó$H¶9R!) <þúÄ-àRRVÖhKÒ-:Çï©=eÈ}Ô|£þc9Î~t,í®ýmUªúð^C³^ÒóµùA6|"k\&ÛI¤?aáØDsvqSë&Òxß´§ù¸lïZ»µqîÒO(äFÜËRj|ð ÎÕ,¹ÛN/Ëc_Ä rnÏþµf®³åΰ£Ø® Ê\ñÛmh+ýÆKÎEx ®rmÔXÒE/Ý|yóyà]´À6öØUÏ(®àÉ° ·º IÙUB¾a¡´'ø¨ ¢<'DqâaÔöY M8¹yíRëÜëJ¿7¯o¥ÉÉ}7Uæ3äö.+Ë)îZ° ¨dZ`o-ûèKWaMýäìéûxéæ¦Ké8m,&ìô"7À,¸þ|ì(Ï»cÎÞ yTSfÐ?²Ãn+1àù×ÛImfñnÉÕTåþrpPÆIæPvÊÛ# ñÆÞº¢æ²=*ÎÞõÊ>