diff mbox series

udev-extraconf: Allow FAT mount group to be specified

Message ID 20250110160055.3527577-1-JPEWhacker@gmail.com
State Accepted, archived
Commit c723dbc329d4cf2a75022f8dd1cfa304383bb4f5
Headers show
Series udev-extraconf: Allow FAT mount group to be specified | expand

Commit Message

Joshua Watt Jan. 10, 2025, 4 p.m. UTC
Adds a variable that allows the group given permissions to access FAT
mounted file systems to be specified, instead of being hardcoded to
'disk'.

As a note, the usage of 'disk' as the mount group is not a very secure
default, since the disk user usually has read/write access to all block
devices in /dev/, meaning that adding a user to this group for the
purpose of accessing FAT file systems effectively gives the write access
to all block devices.

Signed-off-by: Joshua Watt <JPEWhacker@gmail.com>
---
 meta/recipes-core/udev/udev-extraconf/mount.sh | 8 ++++----
 meta/recipes-core/udev/udev-extraconf_1.1.bb   | 9 ++++++---
 2 files changed, 10 insertions(+), 7 deletions(-)
diff mbox series

Patch

diff --git a/meta/recipes-core/udev/udev-extraconf/mount.sh b/meta/recipes-core/udev/udev-extraconf/mount.sh
index eb84a468be..0cbae48729 100644
--- a/meta/recipes-core/udev/udev-extraconf/mount.sh
+++ b/meta/recipes-core/udev/udev-extraconf/mount.sh
@@ -83,11 +83,11 @@  automount_systemd() {
 
     MOUNT="$MOUNT -o silent"
 
-    # If filesystemtype is vfat, change the ownership group to 'disk', and
+    # If filesystemtype is vfat, change the ownership group to mount group, and
     # grant it with  w/r/x permissions.
     case $ID_FS_TYPE in
     vfat|fat)
-        MOUNT="$MOUNT -o umask=007,gid=`awk -F':' '/^disk/{print $3}' /etc/group`"
+        MOUNT="$MOUNT -o umask=007,gid=`awk -F':' '/^@MOUNT_GROUP@:/{print $3}' /etc/group`"
         ;;
     swap)
         return ;;
@@ -138,11 +138,11 @@  automount() {
 		MOUNT="$MOUNT -o silent"
 	fi
 
-	# If filesystem type is vfat, change the ownership group to 'disk', and
+	# If filesystem type is vfat, change the ownership group to mount group, and
 	# grant it with  w/r/x permissions.
 	case $ID_FS_TYPE in
 	vfat|fat)
-		MOUNT="$MOUNT -o umask=007,gid=`awk -F':' '/^disk/{print $3}' /etc/group`"
+		MOUNT="$MOUNT -o umask=007,gid=`awk -F':' '/^@MOUNT_GROUP@:/{print $3}' /etc/group`"
 		;;
 	swap)
 		return ;;
diff --git a/meta/recipes-core/udev/udev-extraconf_1.1.bb b/meta/recipes-core/udev/udev-extraconf_1.1.bb
index 0e2abcd424..0d7e4f4f36 100644
--- a/meta/recipes-core/udev/udev-extraconf_1.1.bb
+++ b/meta/recipes-core/udev/udev-extraconf_1.1.bb
@@ -17,6 +17,7 @@  S = "${WORKDIR}/sources"
 UNPACKDIR = "${S}"
 
 MOUNT_BASE = "/run/media"
+MOUNT_GROUP ?= "disk"
 
 do_install() {
     install -d ${D}${sysconfdir}/udev/rules.d
@@ -31,9 +32,11 @@  do_install() {
     install -d ${D}${sysconfdir}/udev/scripts/
 
     install -m 0755 ${S}/mount.sh ${D}${sysconfdir}/udev/scripts/mount.sh
-    sed -i 's|@systemd_unitdir@|${systemd_unitdir}|g' ${D}${sysconfdir}/udev/scripts/mount.sh
-    sed -i 's|@base_sbindir@|${base_sbindir}|g' ${D}${sysconfdir}/udev/scripts/mount.sh
-    sed -i 's|@MOUNT_BASE@|${MOUNT_BASE}|g' ${D}${sysconfdir}/udev/scripts/mount.sh
+    sed -e 's|@systemd_unitdir@|${systemd_unitdir}|g' \
+        -e 's|@base_sbindir@|${base_sbindir}|g' \
+        -e 's|@MOUNT_BASE@|${MOUNT_BASE}|g' \
+        -e 's|@MOUNT_GROUP@|${MOUNT_GROUP}|g' \
+        -i ${D}${sysconfdir}/udev/scripts/mount.sh
 
     install -m 0755 ${S}/network.sh ${D}${sysconfdir}/udev/scripts
 }