Zum Inhalt springen

GoCryptFS: Unterschied zwischen den Versionen

Aus Foxwiki
KKeine Bearbeitungszusammenfassung
Zeile 3: Zeile 3:
= Installation =
= Installation =
<syntaxhighlight lang="bash">
<syntaxhighlight lang="bash">
sudo apt install gocryptfs
# apt install gocryptfs
</syntaxhighlight>
</syntaxhighlight>


Zeile 24: Zeile 24:


=== Verzeichnisse anlegen ===
=== Verzeichnisse anlegen ===
# mkdir ~/CODIERT ~/KLARTEXT ~/.config/gocryptfs
<syntaxhighlight lang="bash">
# mkdir ~/CODIERT ~/KLARTEXT ~/.config/gocryptfs
Soll das Verzeichnis CODIERT versteckt sein, ist dem Verzeichnisnamen ein Punkt „.“ voranzustellen.
Soll das Verzeichnis CODIERT versteckt sein, ist dem Verzeichnisnamen ein Punkt „.“ voranzustellen.


=== GocryptFS initialisieren ===
=== GocryptFS initialisieren ===
Mit der Initialisierung wird neben der Konfigurationsdatei eine Datei '''gocryptfs.diriv''' erstellt, welche die verschlüsselte Verzeichnisstruktur enthält.
Mit der Initialisierung wird neben der Konfigurationsdatei eine Datei '''gocryptfs.diriv''' erstellt, welche die verschlüsselte Verzeichnisstruktur enthält.
gocryptfs -init -config ~/.config/gocryptfs/KONFDATEI.conf ~/CODIERT  
<syntaxhighlight lang="bash">
gocryptfs -init -config ~/.config/gocryptfs/KONFDATEI.conf ~/CODIERT  


=== Verzeichnis KLARTEXT eingehängen ===
=== Verzeichnis KLARTEXT eingehängen ===
<syntaxhighlight lang="bash">
  gocryptfs -config ~/.config/gocryptfs/KONFDATEI.conf ~/CODIERT ~/KLARTEXT
  gocryptfs -config ~/.config/gocryptfs/KONFDATEI.conf ~/CODIERT ~/KLARTEXT


=== Nach Gebrauch KLARTEXT aushängen ===
=== Nach Gebrauch KLARTEXT aushängen ===
<syntaxhighlight lang="bash">
  fusermount -u ~/KLARTEXT
  fusermount -u ~/KLARTEXT


Zeile 41: Zeile 45:


=== Verzeichnis zum Speichern von GoCryptFS-Konfigurationsdateien erstellen ===
=== Verzeichnis zum Speichern von GoCryptFS-Konfigurationsdateien erstellen ===
<syntaxhighlight lang="bash">
  mkdir ~/.config/gocryptfs/  
  mkdir ~/.config/gocryptfs/  


=== Verzeichnisse CODIERT und KLARTEX anlegen ===
=== Verzeichnisse CODIERT und KLARTEX anlegen ===
<syntaxhighlight lang="bash">
  mkdir ~/CODIERT ~/KLARTEXT
  mkdir ~/CODIERT ~/KLARTEXT


=== GocryptFS initialisieren ===
=== GocryptFS initialisieren ===
Ohne die Option <tt>-config</tt> wird die Konfigurationsdatei als '''~/CODIERT/gocryptfs.conf''' gespeichert.
Ohne die Option <tt>-config</tt> wird die Konfigurationsdatei als '''~/CODIERT/gocryptfs.conf''' gespeichert.
<syntaxhighlight lang="bash">
  gocryptfs -init -config ~/.config/gocryptfs/KONFDATEI.conf -reverse ~/CODIERT  
  gocryptfs -init -config ~/.config/gocryptfs/KONFDATEI.conf -reverse ~/CODIERT  


Zeile 56: Zeile 63:


=== Datensicherung durchführen ===
=== Datensicherung durchführen ===
<syntaxhighlight lang="bash">
  cp -a ~/CODIERT ~/BACKUP  
  cp -a ~/CODIERT ~/BACKUP  


=== CODIERT aushängen ===
=== CODIERT aushängen ===
<syntaxhighlight lang="bash">
  fusermount -u ~/CODIERT
  fusermount -u ~/CODIERT


Zeile 64: Zeile 73:
== Passwort vergessen oder Konfigurationsdatei verloren ==
== Passwort vergessen oder Konfigurationsdatei verloren ==
Liegt der Masterkey aus der Initialisierung noch vor, können die verschlüsselten Daten mit dessen Eingabe im Terminal geöffnet werden, wobei eine eventuell vorhandene Konfigurationsdatei ignoriert wird.
Liegt der Masterkey aus der Initialisierung noch vor, können die verschlüsselten Daten mit dessen Eingabe im Terminal geöffnet werden, wobei eine eventuell vorhandene Konfigurationsdatei ignoriert wird.
<syntaxhighlight lang="bash">
  gocryptfs -masterkey=stdin  
  gocryptfs -masterkey=stdin  


Zeile 72: Zeile 82:
== Passwort ändern ==
== Passwort ändern ==
Mit dem Befehl
Mit dem Befehl
<syntaxhighlight lang="bash">
  gocryptfs -config ~/.config/gocryptfs/KONFDATEI.conf -passwd ~/CODIERT   
  gocryptfs -config ~/.config/gocryptfs/KONFDATEI.conf -passwd ~/CODIERT   
kann man das Kennwort der verschlüsselten Ordners ändern.
kann man das Kennwort der verschlüsselten Ordners ändern.
Zeile 91: Zeile 102:


== Installation ==
== Installation ==
# '''apt install libpam-mount'''
<syntaxhighlight lang="bash">
# '''apt install libpam-mount'''


Copy the gocryptfs binary into /usr/local/bin.
Copy the gocryptfs binary into /usr/local/bin.
# '''cp ... '''
<syntaxhighlight lang="bash">
# '''cp ... '''


Create a gocryptfs filesystem:
Create a gocryptfs filesystem:
<syntaxhighlight lang="bash">
  $ '''mkdir /home/testuser/cipher /home/testuser/plain'''
  $ '''mkdir /home/testuser/cipher /home/testuser/plain'''
  $ '''gocryptfs -init /home/testuser/cipher'''
  $ '''gocryptfs -init /home/testuser/cipher'''
Zeile 123: Zeile 137:
  auth      include      postlogin
  auth      include      postlogin
   
   
# Used with polkit to reauthorize users in remote sessions
# Used with polkit to reauthorize users in remote sessions
  -auth      optional    pam_reauthorize.so prepare
  -auth      optional    pam_reauthorize.so prepare
   
   
# vvv insert here #
# vvv insert here #
  auth optional pam_mount.so
  auth optional pam_mount.so
# ^^^ insert here #
# ^^^ insert here #
   
   
  account    required    pam_nologin.so
  account    required    pam_nologin.so
Zeile 134: Zeile 148:
  password  include      password-auth
  password  include      password-auth
    
    
# pam_selinux.so close should be the first session rule
# pam_selinux.so close should be the first session rule
  session    required    pam_selinux.so close
  session    required    pam_selinux.so close
  session    required    pam_loginuid.so
  session    required    pam_loginuid.so
   
   
# pam_selinux.so open should only be followed by sessions to be executed in the user context
# pam_selinux.so open should only be followed by sessions to be executed in the user context
  session    required    pam_selinux.so open env_params
  session    required    pam_selinux.so open env_params
  session    required    pam_namespace.so
  session    required    pam_namespace.so
Zeile 145: Zeile 159:
  session    include      postlogin
  session    include      postlogin
   
   
# Used with polkit to reauthorize users in remote sessions
# Used with polkit to reauthorize users in remote sessions
  -session  optional    pam_reauthorize.so prepare
  -session  optional    pam_reauthorize.so prepare
   
   
# vvv insert here #
# vvv insert here #
  session optional pam_mount.so
  session optional pam_mount.so
# ^^^ insert here #
# ^^^ insert here #


/etc/pam.d/sddm
/etc/pam.d/sddm
Zeile 160: Zeile 174:
  auth        include      postlogin
  auth        include      postlogin
   
   
# vvv insert here #
# vvv insert here #
  auth      optional    pam_mount.so
  auth      optional    pam_mount.so
# ^^^ insert here #
# ^^^ insert here #
   
   
  account    required      pam_nologin.so
  account    required      pam_nologin.so
Zeile 182: Zeile 196:
  session    include      postlogin
  session    include      postlogin
   
   
# vvv insert here #
# vvv insert here #
  session    optional    pam_mount.so
  session    optional    pam_mount.so
# ^^^ insert here #
# ^^^ insert here #
</syntaxhighlight>
</syntaxhighlight>



Version vom 4. Mai 2021, 11:51 Uhr

GoCryptFS ist ein FUSE Dateisystem zur Verschlüsselung auf Dateiebene und gilt als Alternative zu EncFS und XXX. Es unterstützt Linux, OS X und Windows

Installation

# apt install gocryptfs

Verwendung

Zum Entschlüsseln der Dateien ist die GoCryptFS-Konfigurationsdatei und das Passwort erforderlich.

  • Ist ein Angreifer im Besitz der GoCryptFS-Konfigurationsdatei, könnte er, z.B. durch Ausprobieren, das Passwort herausfinden und die Dateien entschlüsseln.
  • Ohne Angabe der Option -config speichert GoCryptFS die Konfigurationsdatei unter dem Namen gocryptfs.conf in das Verzeichnis mit den verschlüsselten Dateien.
  • Werden die verschlüsselten Dateien in einer Cloud oder auf Datenträgern gespeichert, die einem Angreifer in die Hände fallen können, ist es ratsam, die Konfigurationsdatei getrennt von den verschlüsselten Dateien zu speichern.

Forward und Reverse Mode

  • Im Forward Mode werden die Daten verschlüsselt gespeichert, der entschlüsselte Lese- und Schreibzugriff erfolgt über das FUSE-Dateisystem.
    • Dieser Betriebsmodus könnte beispielsweise eingesetzt werden, um die Daten in der Cloud zu speichern und auf diese von verschiedenen Geräten zuzugreifen.
  • Der Reverse Modus dient dazu Dateien, die unverschlüsselt (lokal) gespeichert sind, zur Datensicherung zu verschlüsseln.
    • Die verschlüsselten Dateien bestehen nur, solange das FUSE-Dateisystem eingehängt ist.
    • Aus dem FUSE-Dateisystem können die verschlüsselten Dateien manuell oder mit einem Datensicherungsprogramm (z.B. rsync) in einen dauerhaften Speicher kopiert werden.

Forward Mode

Die Dateien werden im Verzeichnis CODIERT verschlüsselt gespeichert.

  • Der Inhalt von CODIERT wird im Verzeichnis KLARTEXT über das FUSE Dateisystem entschlüsselt zum lesen und schreiben angezeigt, wenn KLARTEXT eingehängt ist.

Verzeichnisse anlegen

# mkdir ~/CODIERT ~/KLARTEXT ~/.config/gocryptfs
Soll das Verzeichnis CODIERT versteckt sein, ist dem Verzeichnisnamen ein Punkt „.“ voranzustellen.

=== GocryptFS initialisieren ===
Mit der Initialisierung wird neben der Konfigurationsdatei eine Datei '''gocryptfs.diriv''' erstellt, welche die verschlüsselte Verzeichnisstruktur enthält.
<syntaxhighlight lang="bash">
gocryptfs -init -config ~/.config/gocryptfs/KONFDATEI.conf ~/CODIERT 

=== Verzeichnis KLARTEXT eingehängen ===
<syntaxhighlight lang="bash">
 gocryptfs -config ~/.config/gocryptfs/KONFDATEI.conf ~/CODIERT ~/KLARTEXT

=== Nach Gebrauch KLARTEXT aushängen ===
<syntaxhighlight lang="bash">
 fusermount -u ~/KLARTEXT

== Reverse Mode ==
Im Reverse Mode wird der Inhalt von CODIERT über das FUSE-Dateisystem „read-only“ angezeigt, wenn dieses eingehängt ist.

=== Verzeichnis zum Speichern von GoCryptFS-Konfigurationsdateien erstellen ===
<syntaxhighlight lang="bash">
 mkdir ~/.config/gocryptfs/ 

=== Verzeichnisse CODIERT und KLARTEX anlegen ===
<syntaxhighlight lang="bash">
 mkdir ~/CODIERT ~/KLARTEXT

=== GocryptFS initialisieren ===
Ohne die Option <tt>-config</tt> wird die Konfigurationsdatei als '''~/CODIERT/gocryptfs.conf''' gespeichert.
<syntaxhighlight lang="bash">
 gocryptfs -init -config ~/.config/gocryptfs/KONFDATEI.conf -reverse ~/CODIERT 

=== Verzeichnis CODIERT einhängen ===
Im Reverse Mode können Dateien mit den Optionen <tt>-exclude</tt>, <tt>-exclude-wildcard</tt> und <tt>-exclude-from</tt> von der verschlüsselten Ansicht ausgeschlossen werden.
* Soll rsync für die Datensicherung verwendet werden, sollte, um Fehler und Warnmeldungen zu vermeiden, der Ausschluss beim Einhängen mit GoCryptFS erfolgen.
 gocryptfs -config ~/.config/gocryptfs/KONFDATEI.conf -reverse ~/KLARTEXT ~/CODIERT

=== Datensicherung durchführen ===
<syntaxhighlight lang="bash">
 cp -a ~/CODIERT ~/BACKUP 

=== CODIERT aushängen ===
<syntaxhighlight lang="bash">
 fusermount -u ~/CODIERT

= Problembehebung =
== Passwort vergessen oder Konfigurationsdatei verloren ==
Liegt der Masterkey aus der Initialisierung noch vor, können die verschlüsselten Daten mit dessen Eingabe im Terminal geöffnet werden, wobei eine eventuell vorhandene Konfigurationsdatei ignoriert wird.
<syntaxhighlight lang="bash">
 gocryptfs -masterkey=stdin 

Mit der Option&nbsp;<tt>-masterkey <Masterkey></tt>&nbsp;können die verschlüsselten Daten, z.B. über ein Skript, ohne Konfigurationsdatei geöffnet werden.
* Hierbei ist zu berücksichtigen, dass dann der Masterkey mit&nbsp;<tt>ps -auxwww</tt>&nbsp;aus dem Hauptspeicher ausgelesen werden kann.
* Dieses Risiko liegt bei der Option&nbsp;<tt>-masterkey=stdin</tt>&nbsp;nicht vor.

== Passwort ändern ==
Mit dem Befehl
<syntaxhighlight lang="bash">
 gocryptfs -config ~/.config/gocryptfs/KONFDATEI.conf -passwd ~/CODIERT  
kann man das Kennwort der verschlüsselten Ordners ändern.
* Gemeinsam mit der Option&nbsp;<tt>-masterkey</tt>&nbsp;kann ein neues Passwort vergeben werden, wenn man das Passwort vergessen hat, aber der Masterkey vorliegt.
* Weitere Informationen enthält die&nbsp;[https://wiki.ubuntuusers.de/Manpage/ Manpage]&nbsp;zu GoCryptFS.

= Hintergründe =
Die Verschlüsselung des Dateiinhalts erfolgt im Forward Mode mit AES-GCM und im Reverse Mode mit AES-SIV-512. 
* Der hierfür benötigte Schlüssel wird mit dem Scrypt Algorithmus aus dem Masterkey abgeleitet.
* Die Dateinamen werden im Encrypt-Mix-Encrypt  Verfahren verschlüsselt.
* Jede Verschlüsselung bietet mögliche Angriffswege.
* Daher wird die Sicherheit der Verschlüsselung grundsätzlich erhöht, wenn man Daten mit verschiedenen Programmen geschichtet [https://wiki.ubuntuusers.de/Daten_verschlüsseln/ verschlüsselt]. 
* Aus den von GoCryptfs verschlüsselten Dateien kann ein Angreifer erkennen, wie viele Dateien man hat, und welche Größe diese haben.
* Daraus könnten Rückschlüsse auf den Inhalt der Dateien möglich sein.
* Dem kann man entgegenwirken, indem man die Dateien vor der Verschlüsselung [https://wiki.ubuntuusers.de/split/ zerlegt] oder in Container zusammenfasst.

= Beim Login mounten =
Diese Aufgabe kann das PAM-Modul ''pam_mount'' übernehmen

== Installation ==
<syntaxhighlight lang="bash">
# '''apt install libpam-mount'''

Copy the gocryptfs binary into /usr/local/bin.
<syntaxhighlight lang="bash">
# '''cp ... '''

Create a gocryptfs filesystem:
<syntaxhighlight lang="bash">
 $ '''mkdir /home/testuser/cipher /home/testuser/plain'''
 $ '''gocryptfs -init /home/testuser/cipher'''

== pam_mount config ==
Put the following into /etc/security/pam_mount.conf.xml, just before the closing </pam_mount> tag at the bottom:
<syntaxhighlight lang="xml">
 <volume user="testuser" fstype="fuse" options="nodev,nosuid,quiet"
 path="/usr/local/bin/gocryptfs#/home/%(USER)/cipher" mountpoint="/home/%(USER)/plain" />

Replace testuser with your user name.

PAM config

An example /etc/pam.d/sshd on Fedora 24 and an example /etc/pam.d/sddm on Fedora 31 Workstation is shown below.

Basically, pam_mount must be called two times:

  1. As the last element in "auth" so it gets the password.
  2. As the last element in "session", where it performs the actual mount.
/etc/pam.d/sshd
 #%PAM-1.0
 auth	    required	 pam_sepermit.so
 auth       substack     password-auth
 auth       include      postlogin
 
# Used with polkit to reauthorize users in remote sessions
 -auth      optional     pam_reauthorize.so prepare
 
# vvv insert here #
 auth optional pam_mount.so
# ^^^ insert here #
 
 account    required     pam_nologin.so
 account    include      password-auth
 password   include      password-auth
  
# pam_selinux.so close should be the first session rule
 session    required     pam_selinux.so close
 session    required     pam_loginuid.so
 
# pam_selinux.so open should only be followed by sessions to be executed in the user context
 session    required     pam_selinux.so open env_params
 session    required     pam_namespace.so
 session    optional     pam_keyinit.so force revoke
 session    include      password-auth
 session    include      postlogin
 
# Used with polkit to reauthorize users in remote sessions
 -session   optional     pam_reauthorize.so prepare
 
# vvv insert here #
 session optional pam_mount.so
# ^^^ insert here #

/etc/pam.d/sddm
 auth        [success=done ignore=ignore default=bad] pam_selinux_permit.so
 auth        substack      password-auth
 -auth       optional      pam_gnome_keyring.so
 -auth       optional      pam_kwallet5.so
 -auth       optional      pam_kwallet.so
 auth        include       postlogin
 
# vvv insert here #
 auth       optional     pam_mount.so
# ^^^ insert here #
 
 account     required      pam_nologin.so
 account     include       password-auth
 
 password    include       password-auth
 
 session     required      pam_selinux.so close
 session     required      pam_loginuid.so
 session     optional      pam_console.so
 -session    optional      pam_ck_connector.so
 session     required      pam_selinux.so open
 session     optional      pam_keyinit.so force revoke
 session     required      pam_namespace.so
 session     include       password-auth
 -session    optional      pam_gnome_keyring.so auto_start
 -session    optional      pam_kwallet5.so auto_start
 -session    optional      pam_kwallet.so auto_start
 session     include       postlogin
 
# vvv insert here #
 session    optional     pam_mount.so
# ^^^ insert here #

Encrypting the whole home directory

Use this volume definition in /etc/security/pam_mount.conf.xml

 <volume user="testuser" fstype="fuse" options="nodev,nosuid,quiet,nonempty,allow_other"
 path="/usr/local/bin/gocryptfs#/home/%(USER).cipher" mountpoint="/home/%(USER)" />

Links

Intern

TODO

Weblinks

  1. Projektseite: https://nuetzlich.net/gocryptfs/
  2. Quellcode und Dokumentation: https://github.com/rfjakob/gocryptfs
  3. AES-GCM: https://eprint.iacr.org/2004/193.pdf
  4. AES-SIV-512: https://tools.ietf.org/html/rfc5297
  5. Scrypt Schlüsselableitung: https://tools.ietf.org/html/rfc7914
  6. Encrypt-Mix-Encrypt : https://github.com/rfjakob/eme
  7. Sicherheitsgutachten: https://defuse.ca/audits/gocryptfs.htm
  8. Version für Windows: https://github.com/bailey27/cppcryptfs