[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: Tutorial encriptar tu /home



Javier escribió:
> Quiero compartir este pequeño tutorial. Si alguien lo quiere subir a un
> web, simplemente que ponga mi nombre y email.
> 
> Veamos como podemos encriptar el /home en un sistema Debian (en realidad
> se aplicaría casi igual a cualquier sistema Linux):
> 
> Mucha gente piensa que encriptar es una cosa que no necesitan. Si
> piensan eso, es porque no se les ha dado una de estas situaciones:
> 
> 1.- No le han robado nunca el ordenador (especialmente si es portátil)
> 2.- No tiene ningún dato sensible en su directorio, por ejemplo,
> imágenes comprometidas, passwords, documentos de word, paranoias que dan
> por escribir, o cosas que en manos de según quien caigan, puedan
> resultar vergonzosas para uno o para otros, recibos del banco, tarjetas
> de crédito...
> 3.- No trabaja en algún sitio donde es importante la confidencialidad de
> su trabajo. Por ejemplo, de programador para una compañia que valora la
> seguridad.
> 
> Si no se te dan ninguna de esas circunstancias... enhorabuena, eres de
> los pocos. :) La mayoría de la gente tiene como poco algo importante que
> no es conveniente dejar al descubierto. Incluso en la caché del
> navegador o en el lector de correo se puede encontrar algo sensitivo.
> Por ejemplo si normalemente entras al correo con la opción de recordar
> la contraseña, si entras en la cuenta del banco de la misma manera, en
> los foros, páginas web, etc, el posible ladron de tu ordenador ¡¡¡la
> puede liar bien gorda!!!
> 
> No obstante, si el ordenador no es portátil y no está expuesto al
> público, es tontería y quizá un poco paranoico. Cada uno debe valorar si
> le merece la pena o no.
> 
> ¿Como puede protegerse?
> Hay dos formas, una más fácil que cubre solo aquello que es
> verdaderamente importante, dejando al descubierto el resto, y otra que
> es un poco más dificil, que es encriptar el home entero.
> 
> Modo gráfico sencillo
> ---------------------
> 
> La primera forma se hace instalando los programa Cryptkeeper y encfs.
> Ambos se encuentran en los repositorios de Debian.
> 
> Arrancando Cryptkeeper, que aparece en el menú
> Aplicaciones->Herramientas del sistema, aparece un icono con unas llaves
> en la barra.
> Tan solo hay que pulsar en ese icono y en New encripted folder, y seguir
> todos los pasos, y así creas una carpeta encriptada.
> El siguiente paso es igualmente fácil. Por ejemplo, imagina que quieres
> proteger la configuración del navegador, y el correo del Thunderbird,
> tan solo tienes que mover esos ficheros _dentro_ de la carpeta
> encriptada, y crear un enlace en _tu_ directorio. Puedes hacerlo en el
> Nautilus, o en la consola de la siguiente manera:
> 
> $ mv .mozilla* carpeta_encriptada/
> $ ln -s carpeta_encriptada/.mozilla .
> $ ln -s carpeta_encriptada/.mozilla-thunderbird .
> 
> Tienes que tener especial cuidado de montar la carpeta encriptada cada
> vez que vas a usar esos programas. Es muy fácil, solo tienes que pulsar
> el icono, y seleccionar la carpeta, y te preguntará por el password.
> Por supuesto, puedes hacer lo mismo con cualquier carpeta problemática.
> Por ejemplo, con Documentos, Imágenes, etc.
> 
> 
> Modo completo
> -------------
> 
> Si quieres encriptar tu home completo, es un poco más complicado, pero
> más seguro.
> Lo primero es crear la carpeta encriptada. De momento usamos nombres
> temporales. Siendo root, imagina que el usuario se llama javi:
> 
> # mkdir /home/.javi
> # mkdir /home/javi-temp
> # encfs /home/.javi /home/javi-temp
> 
> Con eso saldrá un asistente, que describe bastante bien los pasos, pero
> si aún quieres más información, en otra consola puedes abrir el clásico
> "man encfs", o bien instalar el paquete dwww, y apuntar a
> http://localhost/cgi-bin/dwww?search=encfs con el navegador (muy
> recomendable)
> 
> Asegúrate de usar un password laaaaargo que puedas recordar, pero que no
> sea especialmente fácil. Yo uso uno de 40 caracteres que es casi
> aleatorio. Me cuesta unos segundos meterlo, pero no importa tanto porque
> sirve para todo el dia y es realmente seguro.
> Si metes un password de 5 caracteres es casi como si no metieras nada.
> Por fuerza bruta hasta un ordenador corriente lo rompería.
> 
> A continuación hay que salir de la cuenta, y quedarse en una consola:
> 
> # /etc/init.d/gdm stop
> 
> Y movemos todos los ficheros:
> 
> # mv /home/javi/.??* /home/javi-temp
> # mv /home/javi/* /home/javi-temp
> 
> El motivo del primer comando tiene truco. En Linux, ten cuidado de hacer
> algo como "mv .* donde_sea" porque entre los .* se incluye el directorio
> superior. Es decir, que intentas mover el /home dentro de un
> subdirectorio de /home, algo imposible, y devolverá error. Si alguna vez
> usas "rm -rf .*" espera meterte en un gran lio (borraras todo lo que
> contiene el directorio madre).
> 
> Puede llegar a tardar horas si tienes 200 gb.
> 
> Después solo hay que eliminar el directorio y cambiar de nombre el otro:
> 
> # fuserumount -u /home/javi-temp
> # rm -r /home/javi
> # mv /home/javi-temp /home/javi
> 
> y ya está, tu directorio encriptado.
> No obstante... aun hay un paso importante: es conveniente que pida la
> password al iniciar. Este password no es el mismo que el de tu usuario,
> normalmente será mucho más largo y por lo tanto es conveniente que lo
> pida una vez nada más cada vez que arrancas el ordenador. Por lo tanto
> creamos un servicio:
> 
> # gedit /etc/init.d/encfs
> 
> y pegamos esto (modificado a tu usuario) (nota:cuidado que algunas
> lineas pueden estar cortadas debido al lector de correos y puede darte
> errores, corrígelas):
> 
> -------8<--------8<---------8<--------
> #! /bin/sh
> 
> # PATH should only include /usr/* if it runs after the mountnfs.sh script
> PATH=/sbin:/usr/sbin:/bin:/usr/bin
> DESC="Description of the service"
> NAME=encfs
> DAEMON=/usr/bin/$NAME
> DAEMON_ARGS="--public /home/.javi /home/javi"
> PIDFILE=/var/run/$NAME.pid
> SCRIPTNAME=/etc/init.d/$NAME
> 
> # Exit if the package is not installed
> [ -x "$DAEMON" ] || exit 0
> 
> # Read configuration variable file if it is present
> [ -r /etc/default/$NAME ] && . /etc/default/$NAME
> 
> # Load the VERBOSE setting and other rcS variables
> . /lib/init/vars.sh
> 
> # Define LSB log_* functions.
> # Depend on lsb-base (>= 3.0-6) to ensure that this file is present.
> . /lib/lsb/init-functions
> 
> #
> # Function that starts the daemon/service
> #
> do_start()
> {
> 	# Return
> 	#   0 if daemon has been started
> 	#   1 if daemon was already running
> 	#   2 if daemon could not be started
> 	start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $DAEMON
> --test > /dev/null \
> 		|| return 1
> 	start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $DAEMON -- \
> 		$DAEMON_ARGS \
> 		|| return 2
> 	# Add code here, if necessary, that waits for the process to be ready
> 	# to handle requests from services started subsequently which depend
> 	# on this one.  As a last resort, sleep for some time.
> }
> 
> #
> # Function that stops the daemon/service
> #
> do_stop()
> {
> 	fusermount -u /home/javi
> 	# Return
> 	#   0 if daemon has been stopped
> 	#   1 if daemon was already stopped
> 	#   2 if daemon could not be stopped
> 	#   other if a failure occurred
> 	#start-stop-daemon --stop --quiet --retry=TERM/30/KILL/5 --pidfile
> $PIDFILE --name $NAME
> 	RETVAL="$?"
> 	[ "$RETVAL" = 2 ] && return 2
> 	# Many daemons don't delete their pidfiles when they exit.
> 	rm -f $PIDFILE
> 	return "$RETVAL"
> }
> 
> #
> # Function that sends a SIGHUP to the daemon/service
> #
> do_reload() {
> 	#
> 	# If the daemon can reload its configuration without
> 	# restarting (for example, when it is sent a SIGHUP),
> 	# then implement that here.
> 	#
> 	start-stop-daemon --stop --signal 1 --quiet --pidfile $PIDFILE --name $NAME
> 	return 0
> }
> 
> case "$1" in
>   start)
> 	[ "$VERBOSE" != no ] && log_daemon_msg "Starting $DESC" "$NAME"
> 	do_start
> 	case "$?" in
> 		0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
> 		2)
> 			do_start # repite hasta que vaya bien
> 			[ "$VERBOSE" != no ] && log_end_msg 1 ;;
> 	esac
> 	;;
>   stop)
> 	[ "$VERBOSE" != no ] && log_daemon_msg "Stopping $DESC" "$NAME"
> 	do_stop
> 	case "$?" in
> 		0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
> 		2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
> 	esac
> 	;;
>   #reload|force-reload)
> 	#
> 	# If do_reload() is not implemented then leave this commented out
> 	# and leave 'force-reload' as an alias for 'restart'.
> 	#
> 	#log_daemon_msg "Reloading $DESC" "$NAME"
> 	#do_reload
> 	#log_end_msg $?
> 	#;;
>   restart|force-reload)
> 	#
> 	# If the "reload" option is implemented then remove the
> 	# 'force-reload' alias
> 	#
> 	log_daemon_msg "Restarting $DESC" "$NAME"
> 	do_stop
> 	case "$?" in
> 	  0|1)
> 		do_start
> 		case "$?" in
> 			0) log_end_msg 0 ;;
> 			1) log_end_msg 1 ;; # Old process is still running
> 			*) log_end_msg 1 ;; # Failed to start
> 		esac
> 		;;
> 	  *)
> 	  	# Failed to stop
> 		log_end_msg 1
> 		;;
> 	esac
> 	;;
>   *)
> 	#echo "Usage: $SCRIPTNAME {start|stop|restart|reload|force-reload}" >&2
> 	echo "Usage: $SCRIPTNAME {start|stop|restart|force-reload}" >&2
> 	exit 3
> 	;;
> esac
> 
> :
> 
> ---------8<------------8<------------8<---------------
> 
> 
> podemos probar el servicio de la siguiente manera:
> 
> # /etc/init.d/encfs start
> 
> y probar que desmonta de la siguiente manera:
> 
> # /etc/init.d/encfs stop
> 
> Una vez comprobado que funciona ok, ya puedes reiniciar, o simplemente
> rearrancar el Gnome:
> 
> # /etc/init.d/gdm start
> 
> Y listo. Espero que os haya servidor, y si detectais un error o una
> mejora, dejar comentarios.
> 
> Saludos.
> 
> 
Hola a todos.
Bueno, pues lo hice. Cuento cómo me ha ido y pregunto algunas cosas:
- Fue todo bien siguiendo las instrucciones de Javier (incluida una
contraseña muuuy larga; he tenido que crearme una regla mnemotécnica).
Pero he tenido que cambiar un par de cosas por mi cuenta:
	+ update-rc.d encfs defaults (le da prioridad 20) para poder
arrancar/parar el servicio. Supongo que he hecho bien.
	+ en el script he quitado --public y he puesto en su lugar
--no-defaults-flags -o allow-other porque si no era imposible arrancar
el gdm y el entorno X. De todas maneras, gdm, antes de dejarme entrar,
me advierte que el .dmrc no tiene los permisos 644. Si podéis ayudarme a
quitar ese mensajito, agradecido.

Una vez en el escritorio, todo va estupendo. Si acaso, un poco más lento
el iceweasel... ¡Da una tranquilidad que no veas saber que cuando
acabes, tus cosas quedan metidas en una alcancía! ;)

Me gustaría poder cambiar una cosa, a ver si me podéis ayudar: encfs
pide la contrseña sin problemas y para el arranque si -y aquí está mi
pega- no se tiene el splashy con la opción --quiet. Veo una opción que
permite que la pregunta de la contraseña la haga un programa externo a
encfs. ¿Cómo podría hacerlo para que la pregunta del passwd no
interferiera con el splash?

Gracias de nuevo por esta maravilla, y a ver si me podéis ayudar a
redondearlo todo.
Manuel

Attachment: smime.p7s
Description: S/MIME Cryptographic Signature


Reply to: