Utilizzando un provider come Digital Ocean, se memorizzo informazioni private/sensibili sul VPS, c'è un modo per proteggere tali informazioni (impedendo l'accesso all'host VPS) pur mantenendo l'accesso SFTP e SSH?
Risposta accettata:
Purtroppo non è affatto possibile. Ecco alcune brevi spiegazioni al riguardo:
Anche con la crittografia, il provider può eseguire uno snapshot dello stato corrente della memoria e del disco e clonare una nuova istanza per ottenere lo stesso livello di accesso che hai ottenuto. (fonte)
Anche se stai eseguendo un VPS con filesystem crittografati, tutti i dati in-RAM non saranno crittografati, a cui gli amministratori di sistema dell'host VPS avrebbero accesso, inclusa la passphrase di decrittazione. Se hai davvero questi severi requisiti di sicurezza, sembra che tu debba eseguire i tuoi sistemi fisicamente protetti o trovare una società di hosting di server dedicata specializzata in questo genere di cose. (fonte)
...tieni presente che chiunque abbia accesso all'immagine VPS può potenzialmente aggiungere bug al tuo codice per rilevare la passphrase che usi. (fonte)
[Crittografia] ha senso se hai il controllo sull'hardware; quando qualcun altro controlla l'hardware ha poco senso a meno che tu non ti fidi che l'host non voglia davvero guardarlo ... (fonte)
L'accesso fisico è l'accesso come root, quindi se qualcuno ha accesso fisico al server, indipendentemente dal fatto che si trovi su una macchina virtuale o bare metal, ha accesso come root. Nel caso di KVM il proprietario dell'host bare metal può accedere al guest. Puoi sempre crittografare i dati, ma ciò potrebbe essere di beneficio limitato poiché i dati verranno decrittografati quando accedi.
Lo stesso con la rete. Il proprietario della macchina virtuale può vedere il tuo traffico di rete. Anche in questo caso puoi crittografare parte del traffico (https, ssh, ecc.). (fonte)
Ecco una soluzione particolare nel caso in cui desideri archiviare solo alcuni dati sensibili sul tuo VPS:
Come creare e utilizzare una directory crittografata tramite eCryptfs e montarla in remoto
Prerequisiti
Installa i pacchetti ecryptfs-utils
e sshfs
e riavvia il sistema:
sudo apt update && sudo apt -y install ecryptfs-utils sshfs
sudo apt update && sudo systemctl reboot
Configurazione e utilizzo standard
Apri una finestra di terminale ed esegui questo comando:
ecryptfs-setup-private
Quindi ti verrà chiesto di:
-
Enter your login passphrase [<user>]:
questa passphrase deve corrispondere alla password dell'utente corrente e verrà utilizzata per sbloccare (decodificare) le tue informazioni crittografate. -
Enter your mount passphrase [leave blank ...]:
questa passphrase verrà utilizzata automaticamente quando i tuoi dati crittografati stanno montando, ma ne hai bisogno in caso di emergenza e devi recuperare i tuoi dati, quindi annotalo in un luogo sicuro.
Il comando precedente creerà due directory:
~/.Private
dove verranno archiviati i tuoi dati crittografati.~/Private
dove la directory~/.Private
verrà montato come decrittografato.
Mentre ~/.Private
non è montato nella directory ~/Private
ha due file con le istruzioni.
Quando accedi al sistema tramite la password dell'utente (login passphrase
) la directory ~/.Private
verrà automaticamente montato su ~/Private
e sarai in grado di lavorare lì. Quando effettui il logout
o exit
, la directory ~/.Private
sarà smontato. Per farlo manualmente puoi usare i comandi:ecryptfs-mount-private
e ecryptfs-umount-private
. Maggiori informazioni su queste opzioni possono essere trovate nell'articolo eCryptfs da ArchLinux Wiki. Vedi anche:come usare ecryptfs con una directory casuale.
Se autentichi la tua connessione SSH/SFTP tramite password, quanto sopra funziona. Ma se ti autentichi tramite una coppia di chiavi SSH devi usare ecryptfs-mount-private
per montare ~/.Private
. In questo caso devi prima eseguire un SSH sul sistema ed eseguire ecryptfs-mount-private
quindi sarai in grado di utilizzare SFTP nella directory ~/Private
. Puoi aggiungere il comando ecryptfs-mount-private
in fondo a ~/.bashrc
per automatizzare questo processo:
echo -e "\n# Mount my Private directory\necryptfs-mount-private\n" | tee -a ~/.bashrc
Monta una directory crittografata remota e sbloccala (decodifica) localmente
Sulla macchina remota (VPS) e sulla macchina locale eseguire il comando seguente e inserire dati identici per login passphrase
e per mount passphrase
su entrambe le macchine:
ecryptfs-setup-private --nopwcheck --noautomount
Sulla macchina remota:
-
Esegui il comando:
ecryptfs-mount-private
Nota: Durante il test di questo approccio ho dovuto eseguire il comando sopra due volte!
-
Crea dei contenuti semplici:
echo "Hello Word!" > ~/Private/hello.txt
-
Smonta
~/.Private
:ecryptfs-umount-private
-
Inoltre puoi rimuovere la directory
~/.ecryptfs
(dal VPS), dove sono archiviati i tuoi dati di decrittazione.
Sulla macchina locale:
-
Monta la cartella crittografata remota
~/.Private
nella cartella locale~/.Private
tramitesshfs
e maschera la proprietà dei file (sostituisci<user>@<host_name_or_ip>
):sshfs -o idmap=user,uid=$(id -u),gid=$(id -g) <user>@<host_name_or_ip>:.Private ~/.Private
Per smontare, usa il comando:
fusermount -u ~/.Private
osudo umount -l ~/.Private
. -
Quindi monta (e decifra) la directory locale
~/.Private
a~/Private
ecryptfs-mount-private
-
Controlla se il file
hello.txt
c'è:$ cat ~/Private/hello.txt Hello Word!
-
Se incontri un problema con il comando
ecryptfs-umount-private
(umount.ecryptfs_private
) puoi smontare il~/Private
locale directory con il comandosudo umount -l ~/Private
. -
eCryptfs contiene bug e talvolta
ecryptfs-mount-private
eecryptfs-umount-private
non funzionano correttamente. -
In base a quanto sopra puoi creare due funzioni all'interno di
~/.bashrc
che automatizzerà l'intero processo (montaggio/smontaggio) (sostituisci<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
Quindi
source ~/.bashrc
e potrai usareecryptfs-remote-mount
eecryptfs-remote-umount
come comandi.
Riferimenti e ulteriori letture
-
Crea un file di archivio crittografato (tar), dove si nascondono i tuoi dati sensibili:
- Crittografa il file tar.gz durante la creazione
- Come creare un archivio tar o zip crittografato (protetto da password) in Linux
- Come proteggere con password i file gzip sulla riga di comando?
- Come faccio a proteggere con password un file .tgz con tar in Unix?.
-
Crea una directory crittografata:
- Backup crittografato su un server SFTP (WebSpace) con ecryptfs
- Come fare per Secure Encrypted Remote Volume
- Come crittografare singole cartelle?
- Come crittografare le directory con eCryptfs su Ubuntu 16.04
- YouTube:come crittografare la cartella in Ubuntu
-
Usa la crittografia della home directory dell'utente:
- Cartella Home crittografata
- Come fare per la directory principale crittografata
- HOW-TO crittografare la tua home directory
- Accesso alla tua home directory crittografata in Ubuntu
- Migrazione a una home directory crittografata
- Messaggio SSH dopo l'accesso, quindi impedire all'utente di utilizzare l'account