Usando un proveedor como Digital Ocean, si almaceno información privada/sensible en el VPS, ¿hay alguna forma de proteger esa información (evitando que el host del VPS obtenga acceso) mientras retengo el acceso SFTP y SSH?
Respuesta aceptada:
Desafortunadamente no es posible en absoluto. Aquí hay algunas breves explicaciones sobre esto:
Incluso con el cifrado, el proveedor podría tomar una instantánea del estado actual de la memoria y el disco y clonar una nueva instancia para obtener tanto acceso como usted. (fuente)
Incluso si está ejecutando un VPS con sistemas de archivos encriptados, todos los datos en la RAM no estarán encriptados, a los que los administradores de sistemas del host VPS tendrían acceso, incluida la frase de contraseña de descifrado. Si realmente tiene requisitos de seguridad tan estrictos, parece que necesita ejecutar sus propios sistemas físicamente seguros o encontrar una empresa de alojamiento de servidores dedicada que se especialice en este tipo de cosas. (fuente)
… tenga en cuenta que cualquier persona con acceso a la imagen del VPS puede potencialmente agregar errores a su código para detectar la frase de contraseña que usa. (fuente)
[Cifrado] tiene sentido si tiene control sobre el hardware; cuando alguien más controla el hardware, no tiene mucho sentido a menos que confíes en que el anfitrión realmente no quiere mirarlo... (fuente)
El acceso físico es acceso raíz, por lo que si alguien tiene acceso físico al servidor, independientemente de si se trata de una máquina virtual o de un servidor completo, tiene acceso raíz. En el caso de KVM, el propietario del host bare metal puede acceder al invitado. Siempre puede cifrar los datos, pero eso puede tener un beneficio limitado ya que los datos se descifrarán cuando acceda a ellos.
Lo mismo con la red. El propietario de la VM puede ver el tráfico de su red. Nuevamente, puede cifrar parte del tráfico (https, ssh, etc.). (fuente)
Aquí hay una solución particular en caso de que solo desee almacenar algunos datos confidenciales en su VPS:
Cómo crear y usar un directorio encriptado a través de eCryptfs y montarlo de forma remota
Requisitos previos
Instale los paquetes ecryptfs-utils
y sshfs
y reinicie el sistema:
sudo apt update && sudo apt -y install ecryptfs-utils sshfs
sudo apt update && sudo systemctl reboot
Configuración y uso estándar
Abra una ventana de terminal y ejecute este comando:
ecryptfs-setup-private
Luego se le pedirá que:
-
Enter your login passphrase [<user>]:
esta frase de contraseña debe coincidir con la contraseña del usuario actual y se utilizará para desbloquear (descifrar) su información cifrada. -
Enter your mount passphrase [leave blank ...]:
esta frase de contraseña se usará automáticamente cuando sus datos cifrados se estén acumulando, pero la necesitará en caso de que haya una situación de emergencia y deba recuperar sus datos, así que escríbala en un lugar seguro.
El comando anterior creará dos directorios:
~/.Private
donde se almacenarán sus datos cifrados.~/Private
donde el directorio~/.Private
se montará como descifrado.
Mientras que ~/.Private
no está montado dentro del directorio ~/Private
tiene dos archivos con instrucciones.
Cuando inicia sesión en el sistema a través de la contraseña de usuario (login passphrase
) el directorio ~/.Private
se montará automáticamente en ~/Private
y podrás trabajar allí. Cuando logout
o exit
, el directorio ~/.Private
será desmontado. Para lograr esto manualmente puedes usar los comandos:ecryptfs-mount-private
y ecryptfs-umount-private
. Puede encontrar más información sobre estas opciones en el artículo eCryptfs de ArchLinux Wiki. Ver también:cómo usar ecryptfs con un directorio aleatorio.
Si autentica su conexión SSH/SFTP a través de una contraseña, lo anterior funcionará. Pero si se autentica mediante un par de claves SSH, debe usar ecryptfs-mount-private
para montar ~/.Private
. En este caso, primero debe acceder al sistema mediante SSH y ejecutar ecryptfs-mount-private
entonces podrá usar SFTP en el directorio ~/Private
. Puede agregar el comando ecryptfs-mount-private
al final de ~/.bashrc
para automatizar este proceso:
echo -e "\n# Mount my Private directory\necryptfs-mount-private\n" | tee -a ~/.bashrc
Montar un directorio cifrado remoto y desbloquearlo (descifrarlo) localmente
En la máquina remota (VPS) y en la máquina local, ejecute el siguiente comando e ingrese datos idénticos para login passphrase
y para mount passphrase
en ambas máquinas:
ecryptfs-setup-private --nopwcheck --noautomount
En la máquina remota:
-
Ejecute el comando:
ecryptfs-mount-private
Nota: ¡Mientras probaba este enfoque, tuve que ejecutar el comando anterior dos veces! -
Crea contenido simple:
echo "Hello Word!" > ~/Private/hello.txt
-
Desmontar
~/.Private
:ecryptfs-umount-private
-
Además, puede eliminar el directorio
~/.ecryptfs
(desde el VPS), donde se almacenan sus datos de descifrado.
En la máquina local:
-
Monte la carpeta cifrada remota
~/.Private
a la carpeta local~/.Private
a través desshfs
y enmascare la propiedad de los archivos (reemplace<user>@<host_name_or_ip>
):sshfs -o idmap=user,uid=$(id -u),gid=$(id -g) <user>@<host_name_or_ip>:.Private ~/.Private
Para desmontar, use el comando:
fusermount -u ~/.Private
osudo umount -l ~/.Private
. -
Luego monte (y descifre) el directorio local
~/.Private
a~/Private
ecryptfs-mount-private
-
Compruebe si el archivo
hello.txt
está ahí:$ cat ~/Private/hello.txt Hello Word!
-
Si tiene problemas con el comando
ecryptfs-umount-private
(umount.ecryptfs_private
) puede desmontar el~/Private
local directorio mediante el comandosudo umount -l ~/Private
. -
eCryptfs tiene errores y, a veces,
ecryptfs-mount-private
yecryptfs-umount-private
no funcionan correctamente. -
De acuerdo con lo anterior, puede crear dos funciones dentro de
~/.bashrc
que automatizará todo el proceso (montar/desmontar) (reemplace<user>@<host_name_or_ip>
):function ecryptfs-remote-mount { sshfs -o idmap=user,uid=$(id -u),gid=$(id -g) <user>@<host_name_or_ip>:.Private ~/.Private > /dev/null 2>&1 sudo keyctl clear @u sudo ecryptfs-insert-wrapped-passphrase-into-keyring $HOME/.ecryptfs/wrapped-passphrase # Attempt to mount, and loop the function unless it is true - due to CLI usage bug ecryptfs-mount-private && echo "Done!" || ecryptfs-remote-mount } function ecryptfs-remote-umount { ecryptfs-umount-private > /dev/null 2>&1 || sudo umount -l $HOME/Private fusermount -u $HOME/.Private > /dev/null 2>&1 || sudo umount -l $HOME/.Private echo "Done!" } export -f ecryptfs-remote-mount ecryptfs-remote-umount
Luego
source ~/.bashrc
y podrá usarecryptfs-remote-mount
yecryptfs-remote-umount
como comandos.
Referencias y lecturas adicionales
-
Cree un archivo de almacenamiento encriptado (tar), donde se esconden sus datos confidenciales:
- Cifrar archivo tar.gz al crear
- Cómo crear un archivo Tar o Zip cifrado (protegido con contraseña) en Linux
- ¿Cómo proteger con contraseña los archivos gzip en la línea de comandos?
- ¿Cómo protejo con contraseña un archivo .tgz con tar en Unix?
-
Cree un directorio encriptado:
- Copia de seguridad cifrada en un servidor SFTP (WebSpace) con ecryptfs
- Cómo hacer un volumen remoto cifrado y seguro
- ¿Cómo encriptar carpetas individuales?
- Cómo cifrar directorios con eCryptfs en Ubuntu 16.04
- YouTube:Cómo cifrar una carpeta en Ubuntu
-
Usar encriptación del directorio de inicio del usuario:
- Carpeta de inicio cifrada
- Directorio de inicio cifrado:instrucciones
- CÓMO cifrar su directorio de inicio
- Acceso a su directorio de inicio cifrado en Ubuntu
- Migración a un directorio de inicio cifrado
- Mensaje SSH después de iniciar sesión, luego restrinja el uso de la cuenta por parte del usuario