web-dev-qa-db-fra.com

À l'aide d'un service VPS, puis-je empêcher mes données d'être accessibles par l'hôte VPS?

À l'aide d'un fournisseur tel que Digital Ocean, si je stocke des informations confidentielles/confidentielles sur le VPS, existe-t-il un moyen de protéger ces informations (en empêchant l'hôte VPS d'accéder au réseau) tout en conservant les accès SFTP et SSH?

4
David Alsh

Malheureusement, ce n'est pas possible du tout. Voici quelques brèves explications à ce sujet:

  • Même avec le cryptage, le fournisseur pouvait capturer l’état actuel de la mémoire et du disque et cloner une nouvelle instance pour obtenir le plus grand nombre d’accès possible. ( source )

  • Même si vous exécutez un VPS avec des systèmes de fichiers chiffrés, toutes les données dans la RAM ne seront pas chiffrées, ce à quoi les administrateurs système de l'hôte VPS auraient accès, y compris la phrase secrète de déchiffrement. Si vous avez réellement des exigences de sécurité strictes, il semblerait que vous deviez exécuter vos propres systèmes sécurisés physiquement ou trouver une société d’hébergement sur serveur dédié spécialisée dans ce genre de choses. ( source )

  • ... gardez à l'esprit que toute personne ayant accès à l'image VPS peut potentiellement ajouter un code à votre code pour détecter la phrase de passe que vous utilisez. ( source )

  • [Cryptage] a du sens si vous avez le contrôle du matériel; quand quelqu'un d'autre contrôle le matériel, cela ne sert à rien si vous ne croyez pas que l'hôte ne veut pas vraiment le regarder ... ( source )

  • L'accès physique est un accès root. Par conséquent, si une personne a un accès physique au serveur, que ce soit sur un VM ou un système sans ressources, elle dispose d'un accès root. Dans le cas de KVM, le propriétaire de l'hôte bare metal peut accéder à l'invité. Vous pouvez toujours chiffrer les données, mais cela peut présenter un avantage limité, car les données seront déchiffrées lorsque vous y accéderez.

    Même avec le réseau. Le propriétaire du VM peut voir votre trafic réseau. Là encore, vous pouvez chiffrer une partie du trafic (https, ssh, etc.). ( source )


Voici une solution particulière au cas où vous voudriez simplement stocker des données sensibles sur votre VPS:

Comment créer et utiliser un répertoire crypté via eCryptfs et le monter à distance

Pré-requis

Installez les packages ecryptfs-utils et sshfs et redémarrez le système:

Sudo apt update && Sudo apt -y install ecryptfs-utils sshfs
Sudo apt update && Sudo systemctl reboot

Configuration standard et utilisation

Ouvrez une fenêtre de terminal et exécutez cette commande:

ecryptfs-setup-private

Ensuite, il vous sera demandé de:

  • Enter your login passphrase [<user>]: cette phrase secrète doit correspondre au mot de passe de l'utilisateur actuel et sera utilisée pour déverrouiller (déchiffrer) vos informations chiffrées.

  • Enter your mount passphrase [leave blank ...]: cette phrase secrète sera utilisée automatiquement lorsque vos données cryptées seront en cours de montage, mais vous en aurez besoin en cas d'urgence et vous devrez récupérer vos données. Écrivez-les donc dans un endroit sûr.

La commande ci-dessus créera deux répertoires:

  • ~/.Private où vos données cryptées seront stockées.
  • ~/Private où le répertoire ~/.Private sera monté comme déchiffré.

Bien que ~/.Private ne soit pas monté dans le répertoire ~/Private contient deux fichiers avec des instructions.

Lorsque vous vous connectez au système avec le mot de passe de l'utilisateur (login passphrase), le répertoire ~/.Private est automatiquement monté sur ~/Private et vous pourrez y travailler. Lorsque vous logout ou exit, le répertoire ~/.Private sera démonté. Pour ce faire manuellement, vous pouvez utiliser les commandes: ecryptfs-mount-private et ecryptfs-umount-private. Vous trouverez plus d'informations sur ces options dans l'article eCryptfs de ArchLinux Wiki . Voir aussi: comment utiliser ecryptfs avec un répertoire aléatoire .

Si vous authentifiez votre connexion SSH/SFTP via un mot de passe, ce qui précède fonctionne. Mais si vous vous authentifiez via une paire de clés SSH, vous devez utiliser ecryptfs-mount-private pour monter ~/.Private. Dans ce cas, vous devez d’abord utiliser SSH sur le système et exécuter ecryptfs-mount-private pour pouvoir utiliser SFTP dans le répertoire ~/Private. Vous pouvez ajouter la commande ecryptfs-mount-private au bas de ~/.bashrc pour automatiser ce processus:

echo -e "\n# Mount my Private directory\necryptfs-mount-private\n" | tee -a ~/.bashrc

Monter un répertoire crypté distant et le déverrouiller (déchiffrer) localement

Sur la machine distante (VPS) et sur la machine locale, exécutez la commande suivante et entrez des données identiques pour login passphrase et pour mount passphrase sur les deux machines:

ecryptfs-setup-private --nopwcheck --noautomount

L'option --nopwcheck vous permet de choisir une phrase secrète différente de celle utilisée pour la connexion. L'option --noautomount se passe d'explication.

Sur la machine distante:

  • Exécutez la commande:

    ecryptfs-mount-private
    

    Remarque: Pendant que je testais cette approche, je devais exécuter la commande ci-dessus à deux reprises!

  • Créer du contenu simple:

    echo "Hello Word!" > ~/Private/hello.txt
    
  • Démonter ~/.Private:

    ecryptfs-umount-private
    
  • De plus, vous pouvez supprimer le répertoire ~/.ecryptfs (du VPS), où sont stockées vos données de déchiffrement.

Sur la machine locale:

  • Montez le dossier crypté distant ~/.Private dans le dossier local ~/.Private via sshfs et masquez le droit de propriété sur les fichiers (remplacez <user>@<Host_name_or_ip>):

    sshfs -o idmap=user,uid=$(id -u),gid=$(id -g) <user>@<Host_name_or_ip>:.Private ~/.Private
    

    Pour démonter, utilisez la commande: fusermount -u ~/.Private ou Sudo umount -l ~/.Private.

  • Puis montez (et décryptez) le répertoire local ~/.Private sur ~/Private

    ecryptfs-mount-private
    
  • Vérifiez si le fichier hello.txt est présent:

    $ cat ~/Private/hello.txt
    Hello Word!
    
  • Si vous rencontrez un problème avec la commande ecryptfs-umount-private (umount.ecryptfs_private), vous pouvez démonter le répertoire local ~/Private à l'aide de la commande Sudo umount -l ~/Private.

  • eCryptfs a bugs et parfois ecryptfs-mount-private et ecryptfs-umount-private ne fonctionnent pas correctement.

  • Selon ce qui précède, vous pouvez créer deux fonctions dans ~/.bashrc qui automatiseront l’ensemble du processus (montage/démontage) (remplacer <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
    

    Ensuite, source ~/.bashrc et vous pourrez utiliser ecryptfs-remote-mount et ecryptfs-remote-umount comme commandes.

Références et lectures complémentaires

7
pa4080