[[Vorlage(Getestet, jammy, focal)]] {{{#!vorlage Wissen [:Pakete installieren: Installation von Programmen] [:Editor: Einen Editor öffnen] [:Terminal: Ein Terminal öffnen] }}} [[Inhaltsverzeichnis(2)]] Mit [https://packages.ubuntu.com/jammy/overlayroot] {en} ist es möglich das Root-[:Dateisystem:] mit einem temporären Schreibschutz zu versehen indem dieses als [:mount/#Optionen:"read-only"] [:mount:einhängt]. Alle Schreibzugriffe werden temporär z.B. in den Arbeitsspeicher ([wikipedia:Random-Access_Memory:RAM]) auf eine [:RAM-Disk_erstellen:Ramdisk] geschrieben werden. Dies war auch schon vor overlayroot möglich, jedoch vereinfacht dieses den gewünschten Prozess im Vergleich zu z.B. [:Archiv/Nur-Lesen_Root-Dateisystem_mit_aufs:AUFS]. Overlayroot macht sich das Meta-Dateisystem [https://en.wikipedia.org/wiki/OverlayFS overlayfs] {en} zu Nutze um die Schreibzugriffe umzuleiten. Der Vorteil von overlayroot im Vergleich zu folgenden Alternativen liegt darin, dass overlayroot auch Änderungen durch einen Benutzer mit [:mit_Root-Rechten_arbeiten:Root-Rechten] wieder "rückgängig" macht. Mögliche Alternativen sind: * [:Zugriff_auf_PC_einschränken/#Ofris:Ofris] * [:Zugriff_auf_PC_einschränken/#Lethe:Lethe] * [:Computer_nach_dem_Neustart_zurücksetzen:] * [:Gastsitzung:] Mit overlayroot erschließen sich z.B. folgende Möglichkeiten: * "sicheres" und hardware-nahes testen von Software ohne eine Virtuelle Maschine oder ein Testsystem zu nutzen * Schulungsrechner welche nach einem Neustart wieder im Ausgangszustand vorliegen * Präsentationsrechner welche nach einem Neustart wieder im Ausgangszustand vorliegen = Installation = overlayroot ist unter [:Jammy_Jellyfish:] teil des Paketes [https://launchpad.net/ubuntu/jammy/+source/cloud-initramfs-tools cloud-initramfs-tools] und kann direkt aus den Quellen installiert werden [1] {{{#!vorlage Paketinstallation overlayroot, universe }}} {{{#!vorlage Warnung Nach Änderung der Datei '''overlayroot.conf''' und Neustart des Systems kann es sein das die Datei '''overlayroot.conf''' zwar editiert und gespeichert werden kann, jedoch erfolgt die Speicherung im Arbeitsspeicher ([wikipedia:Random-Access_Memory:RAM]) und wäre somit nach einem Neustart nicht mehr vorhanden. Die Gefahr ist gegeben, dass man mit dem eigenen System die Datei nicht mehr dauerhaft abändern kann. Hier helfen folgende Ansätze: * die gewünschten Parameter werden nicht in der Datei '''overlayroot.conf''' gesetzt sondern als Parameter/Option beim Bootvorgang übergeben * die Datei '''overlayroot.conf''' verweist mittels Parameter `overlayroot_cfgdisk` auf eine Dateisystem, welches nicht im "read-only" Modus ist und welches somit für die Konfiguration verwendet werden kann * Zugriff auf '''overlayroot.conf''' mittels Live-DVD wie z.B. die Ubuntu [:Downloads:Desktop-CD], [http://www.knopper.net/knoppix/ Knoppix] {de} o.ä. }}} = Bedienung bzw. Aufbau der Datei overlayroot.conf = Die Konfigurationsdatei '''overlayroot.conf''' liegt im Verzeichnis '''/etc''' und kann mit einem Editor geöffnet, editiert bzw. konfiguriert werden.[2] Nach erfolgreicher Konfiguration muss das System neu gestartet werden, damit die Änderungen wirksam werden. {{{#!vorlage Hinweis Kommentare in der '''/etc/overlayroot.conf''' sind Zeilen, welche mit `#` oder `;` beginnen. Was hinter diesem Zeichen steht, wird von overlayroot ignoriert. Standardmäßig ist alles auskommentiert bzw. auf `disabled` geschaltet. }}} == eine Auswahl der Parameter aus der Datei /etc/overlayroot.conf == ===overlayroot=tmpfs oder overlayroot=tmpfs:PARAMETERS=== {{{#!code ini overlayroot=tmpfs }}} oder {{{#!code ini overlayroot=tmpfs:PARAMETERS }}} Diese Einstellung schreibt alle Schreibzugriffe temporär in den Arbeitsspeicher. Ein tmpfs Dateisystem wird nun dort erstellt und [:mount:eingebunden]. Dieses Dateisystem kann bis zu 1/2 des verfügbaren Speichers anwachsen. Im Bereich `Parameters` kann z.B. der Wert `swap=1` eingetragen werden. Dies bedeutet, dass [:Swap:]-Partitionen erlaubt sind. Standard mäßig ist der Wert auf 0 gesetzt und somit werden alle swap Einträge aus der [:fstab:/etc/fstab] entfernt (temporär für die Laufzeit von overlayroot ) und Swap Partitionen und somit ausgeschaltet. Swap-Dateien sind grundsätzlich nicht möglich. Mögliche Werte für swap sind 0 oder 1 wobei 0 der Standardwert ist. ===overlayroot=DEVICE oder overlayroot=device:PARAMETERS=== {{{#!code ini overlayroot=DEVICE }}} oder {{{#!code ini overlayroot=device:PARAMETERS }}} [:mount:Bindet] ein Gerät als [https://en.wikipedia.org/wiki/OverlayFS overlayfs] {en} Dateisystem ein, auf welches somit alle Änderungen geschrieben werden. Das Gerät muss bereits ein Dateisystem besitzen, welches [:mount:eingebunden] werden kann (z.B. [:ext/#ext4:ext4]) {{{#!vorlage Hinweis Dies stellt nur eine Auswahl von Parametern dar. Weitere Parameter und Hinweise sind in der Datei '''/etc/overlayroot.conf''', wie folgt abgebildet, beschrieben {en}. }}} {{{#!code ini # This is the overlayroot config file # By default, overlayroot is not enabled. # To enable overlayroot: # 1) edit the 'overlayroot' definition below # 2) reboot # # Supported values: # * overlayroot=tmpfs or overlayroot=tmpfs:PARAMETERS # write all changes to a temporary (ram only) backing device # A tmpfs mount will be created, and usable filesystem can # grow to 1/2 available memory. # # available parameters: # * see COMMON PARAMETERS # # examples: # overlayroot=tmpfs # overlayroot=tmpfs:swap=1 # # * overlayroot=DEVICE or overlayroot=device:PARAMETERS # mount DEVICE as overlayfs and write changes there # device must already have kernel mountalbe filesystem on it. # # available parameters are: # * dev: default: "" [REQUIRED] # use given device for backing filesystem. # Note, 'overlayroot=/dev/vdb' is translated to # 'overlayrooot=device:dev=/dev/vdb' # * timeout: default: 0 # if 'dev' provided does not exist, wait up to many seconds for # it to appear. # * see COMMON PARAMETERS # # examples: # overlayroot=/dev/xvdb # overlayroot=/dev/vdb # overlayroot=device:dev=/dev/sdb,timeout=180 # overlayroot=device:dev=LABEL=my-flashdrive,timeout=180 # # * overlayroot=crypt:PARAMETERS # use an encrypted [dmcrypt] device as the backing device. Parameters # are comma delimited key=value pairs. # # available parameters are: # * dev: default: "" [REQUIRED] # use given device for backing filesystem. # * mapname: default: "secure" # the name of the map device to be created in /dev/mapper # * pass: default: "" # if not provided or empty, password is randomly generated # the generated password will be stored for recovery in # /run/initramfs/overlayroot.passwd # * fstype: default: "ext4" # mapname=mapper,pass=foo,fstype=ext4,mkfs=1 # * mkfs: default: 1 # 0: never create filesystem # 1: if pass is given and mount fails, create a new one # if no pass given, create new # 2: if pass is given and mount fails, fail # if no pass given, create new # * timeout: default: 0 # if 'dev' provided does not exist, wait up to many seconds for # it to appear. # * see COMMON PARAMETERS # # examples: # crypt:mapname=mapper,pass=foo,fstype=ext4,mkfs=1,dev=vdb # crypt:mapname=mapper,pass=foo,fstype=ext3,mkfs=1,dev=/dev/disk/by-label/my-jumpdrive,timeout=120 # crypt:dev=xvdb # # * overlayroot=disabled # if set explicitly to 'disabled', or an empty string, then # overlayroot will do nothing. # # # COMMON PARAMETERS: # The following parameters are supported for each of overlayroot= # values above. # * swap: default: 0 # allowed values: 0, 1 # indicate if swap partitions should be allowed. By default swap entries # are removed from /etc/fstab to disable swap. # Swap *files* are always disabled, independent of this setting. # # * recurse: default: 1 # allowed values: 0, 1 # indicate if all mounts should be made read-only, or just /. # if set to 1, then all filesystems will be mounted read-only. # if set to 0, only root will be set to read-only, and changes # to other filesystems will be permenant. For example, if # /home is on a separate partition from / and recurse set to 0 # then changes to /home will go through to the original device. # # * debug: default: 0 # allowed values: 0, 1 # enable debug output if set to 1 # # * dir: default: "/overlay" # the directory under the filesystem to use for writes # default is to use top level directory. For example, use # 'dir=my-tests/run1' and later 'dir=my-tests/run2' # # * driver: default: "auto" # This can be 'overlay' or 'overlayfs'. It will affect which filesystem # is used to provide the overlay and the entries in fstab. # The default value is almost certainly correct. # # overlayroot_cfgdisk: # * default: 'disabled' # If this variable is set, it references a disk/filesystem that # may exist, and include a 'overlayroot.conf' file in it's root directory # If a such a device exists, then it's overlayroot.conf file can # set overlayroot as above. # # examples: # * overlayroot_cfgdisk="LABEL=OROOTCFG" # * overlayroot_cfgdisk="/dev/vdb" # # Note: if you enable this setting, then you must be careful to be sure # that no filesystems are created that match this without your # knowledge. This is because code on that filesystem is executed # as root in the initramfs environment. # # Notes: # * This file is managed by dpkg as a conffile, so changes to it # will force dpkg config file prompts on package updates that contain a # change. Instead of putting changes here, put them in # /etc/overlayroot.local.conf # * you can pass the same 'overlayroot=' parameters on the kernel # command line, and they will override any values set here. # This includes 'overlayroot=' or 'overlayroot=disabled' to disable # a value set in this file. # * if you specify crypt:dev=/dev/vdb, then DATA WILL BE LOST # on /dev/vdb. A safer value would be to use # crypt:dev=/dev/vdb,pass=somepassword,mkfs=0 # However, you would then have to have previously set up the luks device. # Do that like the following: # $ MAPNAME="secure"; DEV="/dev/vdg"; PASSWORD="foobar" # $ sudo wipefs -a $DEV # $ printf "%s" "$PASSWORD" | # sudo cryptsetup luksFormat "${$DEV}" --key-file - # $ printf "%s" "$PASSWORD" | # sudo cryptsetup luksOpen "${DEV}" "${MAPNAME}" --key-file - # $ sudo mke2fs -t "ext4" "/dev/mapper/${MAPNAME}" # # Security Note: # IT IS INSECURE TO SET THIS PASSWORD HERE IN THIS CLEARTEXT CONFIGURATION # FILE OR ON THE KERNEL COMMAND LINE. # Randomly generated passwords are more secure, but you won't be able to # read your encrypted disk on reboot. # Randomly generated passwords are generated by calculating the sha512sum # of a concatenation of: # - stat -L /dev/* /proc/* /sys/* # + some unpredictability of access/modify times of a number of kernel # files, directories, and block devices # - /proc/sys/kernel/random/boot_id # + 16-bytes uuid, consider this a 'salt' # - /proc/sys/kernel/random/uuid # + 16-bytes uuid, consider this psuedo randomness # - /dev/urandom # + 4096-bytes of psuedo randomness # - $DEV # + 4096-bytes from the head of the disk # + security-paranoid users can write 4096-bytes of randomness to # this device and specify mkfs=1 before rebooting into an # crypt+overlayroot setup # The result is stored in r-------- /dev/.initramfs/overlayroot.XXXXXXX, # which is a tmpfs in memory. overlayroot_cfgdisk="disabled" overlayroot="" }}} = Beispiel = == overlayroot wärend des Bootvorgangs aktivieren == Beim Starten des Computer kann man wie [:GRUB_2/Shell/#Auswahlmenue-Modus:hier] beschrieben Startparameter/Bootoptionen hinzufügen. Im folgenden wird wie zuvor beschrieben mittels `overlayroot=tmpfs` der Schreibschutz __einmalig__ aktiviert. Nach einem Neustart des Systems befindet sich overlayroot wieder in dem Status, welcher in der Datei '''/etc/overlayroot.conf''' festgelegt wurde. In unserem Beispiel ist dies `disabled`. {{{ . . linux /boot/vmlinuz-5.15.0-48-generic root=UUID=ae875d31-cc84-4349-95d7-01a82ad76d61 ro quiet splash $vt_handoff overlayroot=tmpfs . . }}} = Ist overlayroot aktiviert oder deaktiviert? = == aktiviert == Wenn overlayroot aktiviert ist dann gibt der folgende ''grep''-Suchbefehl, in der Ausgabe von ''mount'', ein Ergebnis zurück. Z. B.: {{{ $ mount | grep "overlayroot" overlayroot on / type overlay (rw,relatime,lowerdir=/media/root-ro,upperdir=/media/root-rw/overlay,workdir=/media/root-rw/overlay-workdir/_) $ }}} Die Ausgabe kann je nach System und der Art und Weise wie overlayroot aktiviert wurde variieren. == deaktiviert == Wenn overlayroot deaktiviert ist dann gibt der folgende ''grep''-Suchbefehl, in der Ausgabe von ''mount'', kein Ergebnis zurück: {{{ $ mount | grep "overlayroot" $ }}} = Problembehebung = == overlayroot.conf lässt sich nicht mehr ändern == Wenn in der Datei '''/etc/overlayroot.conf''' die Einstellung `overlayroot=tmpfs` vorgenommen wurde und diese Datei auf der zu schützenden Partition liegt, so kann diese nach erfolgreichem Neustart nicht mehr dauerhaft editiert werden. Hier hilft ein Neustart des Systems und das Setzten der Bootoption `overlayroot=disabled`. Startparameter/Bootoptionen können wie [:GRUB_2/Shell/#Auswahlmenue-Modus:hier] beschrieben hinzugefügt werden. {{{ . . linux /boot/vmlinuz-5.15.0-48-generic root=UUID=ae875d31-cc84-4349-95d7-01a82ad76d61 ro quiet splash $vt_handoff overlayroot=disabled . . }}} Nachdem der Startprozess abgeschlossen wurde kann die Datei '''/etc/overlayroot.conf''' wieder editiert und mittels ''overlayroot=disabled'' der Schreibschutz dauerhaft deaktiviert werden. = Links = * [https://launchpad.net/cloud-initramfs-tools Overlayroot auf Launchpad] {en} * [https://spin.atomicobject.com/2015/03/10/protecting-ubuntu-root-filesystem/ Beispiel] {en} * [http://blog.dustinkirkland.com/2012/08/introducing-overlayroot-overlayfs.html Die Idee und Einführung in overlayroot] {en} #tag: Sicherheit, System