À 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?
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:
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
Créez un fichier archive crypté (tar), dans lequel vos données sensibles se cachent:
Créez un répertoire crypté:
Utilisez le chiffrement du répertoire de base de l'utilisateur: