Setup de navegadores web 1/2 - Firefox

2018/12/24

A continuación se describen los pasos para configurar Firefox utilizando tomb para almacenar los datos de forma privada.

TL;DR: Ejecutar script setup-browsers-firefox

Creación de archivo tomb

Como se vió en el post anterior Mejorar la seguridad de archivos de Dropbox con tomb, aquí se desea también mejorar la seguridad de los archivos utilizados por el navegador Firefox (y algún otro llegado el momento), ya que en dichos archivos se encuentra el historial de navegación y las cookies de los sitios visitados, algunas de las cuales pueden ser de autenticación. O sea, en el peor de los casos si se comprometen las cookies de autenticación a varios sitios web un [adversario][eff adversary] podría impersonarnos.

Se crea un archivo tomb que contendrá los archivos utilizados por los navegadores y su clave asociada:

$ mkdir -p ~/graveyard
$ tomb dig -s 512 ~/graveyard/browsers.tomb
$ tomb forge -f ~/browsers.tomb.key
$ tomb lock -k ~/browsers.tomb.key ~/graveyard/browsers.tomb

Notas:

  1. Se elige un tamaño de 512MB basado en el tamaño de los directorios utilizados por Firefox y Chromium actualmente en el sistema*. El tamaño se obtiene utilizando:

    $ du -csh ~/.mozilla/firefox/ ~/.cache/mozilla ~/.config/chromium ~/.cache/chromium
    

    Nota: se menciona Chromium ya que en el futuro se piensa agregar también sus archivos de configuración al archivo tomb.

  2. Se utiliza la opción -f para forzar la operación, ya que no se tiene una particón swap encriptada.

Por último se abre el archivo tomb:

$ tomb open -f -k ~/browsers.tomb.key ~/graveyard/browsers.tomb /run/media/$USER/browsers

Para confirmar que fué montado correctamente se puede utilizar el comando mount:

$ mount | grep browsers
/dev/mapper/tomb.browsers.1545654982.loop0 on /run/media/jmpc/browsers type ext4 (rw,nodev,noatime)

Copiado de profile de Firefox

A continuación se deben copiar los archivos utilizados por Firefox dentro del archivo tomb. Esto se hará en el directorio firefox-private.

Nota: en esta etapa deben cerrarse Firefox para no tener problemas al mover los archivos.

Para copiar el profile utilizado por Firefox inspeccionar el archivo ~/.mozilla/firefox/profiles.ini buscando el directorio (Path) del profile activo (Default=1). Por ejemplo en:

[Profile1]
Name=default
IsRelative=1
Path=5l5xoitj.default-1518183650340
Default=1

el directorio del profile será: ~/.mozilla/firefox/5l5xoitj.default-1518183650340. Este debe moverse a la nueva ubicación en /run/media/$USER/browsers/firefox-private:

$ mv ~/.mozilla/firefox/5l5xoitj.default-1518183650340 /run/media/$USER/browsers/firefox-private

Nota: no importa el profile dejado en el archivo profiles.ini ya que cuando vuelva a usarse Firefox normalmente se creará un nuevo profile con el nombre del directorio que fué copiado.

Respecto al directorio caché utilizado por el profile anterior, este se encuentra en el directorio ~/.cache/mozilla/firefox/5l5xoitj.default-1518183650340, y será borrado para no dejar información de navegación en el disco:

$ rm -fr ~/.cache/mozilla/firefox/5l5xoitj.default-1518183650340

Nota: a pesar de mover el profile del navegador al archivo tomb y borrar el directorio caché la información puede quedar en el disco, por lo que si esta desea borrarse definitivamente deberán seguirse otros pasos no detallados aquí.

Creación de bind-hooks en archivo tomb

Para independizarse del punto de montaje del archivo tomb, se agregará un bind-hooks para montar el directorio del profile en ~/.firefox-private:

$ cat > /run/media/$USER/browsers/bind-hooks <<'END'
firefox-private     .firefox-private
END

Tambien nos aseguramos de que exista el punto de montaje:

$ mkdir -p ~/.firefox-private

Para probar que los bind-hooks funcionan correctamente cerrar y volver a abrir el archivo tomb:

$ tomb close browsers
$ tomb open -f -k ~/browsers.tomb.key ~/graveyard/browsers.tomb /run/media/$USER/browsers
$ mount | grep browsers
/dev/mapper/tomb.browsers.1545659868.loop0 on /run/media/jmpc/browsers type ext4 (rw,nodev,noatime)
/dev/mapper/tomb.browsers.1545659868.loop0 on /home/jmpc/.firefox-private type ext4 (rw,nodev,noatime)

Creación de scripts y archivos .desktop para utilizar el profile privado

En los pasos anteriores se movió el profile de Firefox al archivo tomb. Resta crear un script para utilizar dicho profile junto al archivo .desktop correspondiente para que sea agregado al menú del sistema.

Nota: en lo que sigue se almacenará el script en el directorio ~/bin (se supone que dicho directorio se encuentra en $PATH) y el archivo .desktop en el directorio ~/.local/share/applications. Como alternativa podrían utilizarse los directorios de sistema /usr/local/bin y /usr/local/share/applications para que el uso de la configuración esté disponible para todos los usuarios.

Se debe crear un script para ejecutar Firefox utilizando como profile el directorio ~/.firefox-private que es montado por tomb al abrir el archivo ~/graveyard/browsers.tomb. Al script se le llamará firefox-private.

La versión a ejecutar de Firefox será la última disponible que se encontrará en el enlace simbólico /opt/firefox-latest; ver el post [Deshabilitando updates en firefox][post disabling-updates-in-firefox]. La opción de Firefox para especificar el profile a usar es --profile. Ya que el directorio ~/.firefox-private es en realidad un punto de montaje (montado utilizando la opción bind por tomb), se desea verificar que en el directorio haya un filesystem montado para lo que se utilizará el comando mountpoint. Por último en el script se agregarán mensajes de error en los casos en que el directorio del profile no exista o no tenga un filesystem montado. Ya que el script se puede ejecutar mediante consola o utilizando un lanzador del menú, se desea utilizar la salida estandar o el programa zenity, según sea el caso, para mostrar los mensajes.

A continuación se lista el script ~/bin/firefox-private que puede descargarse aquí:

#!/bin/bash
set -e
show_error() {
    if [[ $(readlink -f /proc/$(ps -o ppid:1= -p $$)/exe) = $(readlink -f "$SHELL") ]]; then
        echo -e "$1"
    elif [ -x /usr/bin/zenity ]; then
        zenity --warning --width=500 --text "$1"
    fi
}

if [ ! -d "$HOME/.firefox-private" ]; then
    show_error "Directory $HOME/.firefox-private don't exist\nCreate it and reopen tomb file\n"
    exit 1
elif ! mountpoint -q "$HOME/.firefox-private"; then
    show_error "Directory $HOME/.firefox-private is not a mount point\nTry open tomb file\n"
    exit 1
elif [ ! -d /opt/firefox-latest ]; then
    show_error "Missing firefox installation in \`/opt/firefox-latest\`\n"
    exit 1
fi
/opt/firefox-latest/firefox --profile "$HOME/.firefox-private" "$@"

Para agregar el script al menú bajo el nombre Firefox (private) se crea el archivo ~/.local/share/applications/firefox-private.desktop que pude descargarse aquí:

[Desktop Entry]
Version=1.0
Name=Firefox private (latest)
GenericName=Web Browser
Comment=Browse the World Wide Web
Exec=bin/firefox-private %u
Terminal=false
X-MultipleArgs=false
Type=Application
Icon=/opt/firefox-latest/browser/chrome/icons/default/default128.png
Categories=Network;WebBrowser;
MimeType=text/html;text/xml;application/xhtml+xml;application/xml;application/vnd.mozilla.xul+xml;application/rss+xml;application/rdf+xml;image/gif;image/jpeg;image/png;x-scheme-handler/http;x-scheme-handler/https;
StartupWMClass=firefox-private
StartupNotify=true

Firefox como navegador web por defecto

Como se desarrolla en el post [Elegir aplicación por defecto de ~/.local/share/applications][post da from local share], debe ejecutarse:

$ for mimetype in x-scheme-handler/http x-scheme-handler/https text/html x-scheme-handler/about; do
    gio mime $mimetype firefox-private.desktop
done

Shortcuts para Firefox

En este punto se configurará el shortcut <Ctrl><Alt>+F para lanzar el navegador web por defecto del sistema, que se desea configurar a la última versión de Firefox utilizando el profile privado.

Ya que actualmente estoy utilizando los escritorios Gnome y Mate se agregarán los pasos para configurar el shortcut en ambos escritorios

Gnome

La documentación para agregar el shortcut al comando Firefox se puede encontrar en la ayuda de gnome: https://help.gnome.org/users/gnome-help/stable/keyboard-shortcuts-set.html.en.

Se debe modificar el shortcut Launch web browser.

Mate

Menú System > Preferences > Hardware > Keyboard Shortcuts y allí se ingresa el shortcut para la entrada Launch web browser.

También puede ejecutarse desde consola:

$ gsettings set org.mate.SettingsDaemon.plugins.media-keys www '<Primary><Alt>f'