ubuntuusers.de

overlayroot

Dieser Artikel wurde für die folgenden Ubuntu-Versionen getestet:


Du möchtest den Artikel für eine weitere Ubuntu-Version testen? Mitarbeit im Wiki ist immer willkommen! Dazu sind die Hinweise zum Testen von Artikeln zu beachten.

Zum Verständnis dieses Artikels sind folgende Seiten hilfreich:

Mit https://packages.ubuntu.com/jammy/overlayroot 🇬🇧 ist es möglich das Root-Dateisystem mit einem temporären Schreibschutz zu versehen indem dieses als "read-only" einhängt. Alle Schreibzugriffe werden temporär z.B. in den Arbeitsspeicher (RAM) auf eine Ramdisk geschrieben werden. Dies war auch schon vor overlayroot möglich, jedoch vereinfacht dieses den gewünschten Prozess im Vergleich zu z.B. AUFS. Overlayroot macht sich das Meta-Dateisystem overlayfs 🇬🇧 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 Root-Rechten wieder "rückgängig" macht.

Mögliche Alternativen sind:

Mit overlayroot erschließen sich z.B. folgende Möglichkeiten:

Installation

overlayroot ist unter Jammy Jellyfish teil des Paketes cloud-initramfs-tools und kann direkt aus den Quellen installiert werden [1]

  • overlayroot (universe)

Befehl zum Installieren der Pakete:

sudo apt-get install overlayroot 

Oder mit apturl installieren, Link: apt://overlayroot

Achtung!

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 (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 Desktop-CD, Knoppix 🇩🇪 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.

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

1
overlayroot=tmpfs

oder

1
overlayroot=tmpfs:PARAMETERS

Diese Einstellung schreibt alle Schreibzugriffe temporär in den Arbeitsspeicher. Ein tmpfs Dateisystem wird nun dort erstellt und 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 /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

1
overlayroot=DEVICE

oder

1
overlayroot=device:PARAMETERS

Bindet ein Gerät als overlayfs 🇬🇧 Dateisystem ein, auf welches somit alle Änderungen geschrieben werden. Das Gerät muss bereits ein Dateisystem besitzen, welches eingebunden werden kann (z.B. ext4)

Hinweis:

Dies stellt nur eine Auswahl von Parametern dar. Weitere Parameter und Hinweise sind in der Datei /etc/overlayroot.conf, wie folgt abgebildet, beschrieben 🇬🇧.

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
# 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 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 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.

Diese Revision wurde am 28. September 2022 18:32 von sh4711 erstellt.
Die folgenden Schlagworte wurden dem Artikel zugewiesen: Sicherheit, System