changeset 204:ef397b84b047

Implement a "-A" flat for dataset creation: set canmount=noauto
author Franz Glasner <fzglas.hg@dom66.de>
date Sun, 21 Aug 2022 13:23:10 +0200
parents eb95c986cc59
children fcfa674c8444
files sbin/fjail
diffstat 1 files changed, 28 insertions(+), 19 deletions(-) [+]
line wrap: on
line diff
--- a/sbin/fjail	Sun Aug 21 12:18:15 2022 +0200
+++ b/sbin/fjail	Sun Aug 21 13:23:10 2022 +0200
@@ -34,6 +34,7 @@
 
     PARENT must exist already and CHILD must not exist.
 
+    -A        Set "canmount=auto" for datasets
     -s        Also create a dataset for freebsd-update data files
     -t        Create a more tiny set of datasets
     -T        Create only an extra tiny set of datasets
@@ -139,13 +140,21 @@
     # full name of the dataset
     local _ds
     # dynamic ZFS options  -- create cache for freebsd-update  -- use a more tiny layout
-    local _zfsopts _fbsdupdate _tiny
+    local _zfsopts _fbsdupdate _tiny _zfsnoauto
 
     _zfsopts=""
     _fbsdupdate=""
     _tiny="no"
-    while getopts "ustT" _opt ; do
+    _zfsnoauto=""
+    while getopts "ustAT" _opt ; do
         case ${_opt} in
+            A)
+                #
+                # set canmount=noauto where otherwise canmount=on would have been set
+                # or inherited
+                #
+                _zfsnoauto="-o canmount=noauto"
+                ;;
             t)
                 # use a more tiny layout
                 _tiny="yes"
@@ -213,41 +222,41 @@
     #   /var/mail
     #   /var/tmp
     #
-    zfs create ${_zfsopts} -o atime=off                                                                      "${_ds}"
-    zfs create ${_zfsopts} -o sync=disabled -o setuid=off                                                    "${_ds}/tmp"
+    zfs create ${_zfsopts} ${_zfsnoauto} -o atime=off                                                        "${_ds}"
+    zfs create ${_zfsopts} ${_zfsnoauto} -o sync=disabled -o setuid=off                                      "${_ds}/tmp"
     if [ "${_tiny}" != "extra" ]; then
         if [ "${_tiny}" = "yes" ]; then
             zfs create ${_zfsopts} -o canmount=off                                                           "${_ds}/usr"
         else
-            zfs create ${_zfsopts}                                                                           "${_ds}/usr"
+            zfs create ${_zfsopts} ${_zfsnoauto}                                                             "${_ds}/usr"
         fi
-        zfs create ${_zfsopts} -o setuid=off                                                                 "${_ds}/usr/home"
-        zfs create ${_zfsopts}                                                                               "${_ds}/usr/local"
+        zfs create ${_zfsopts} ${_zfsnoauto} -o setuid=off                                                   "${_ds}/usr/home"
+        zfs create ${_zfsopts} ${_zfsnoauto}                                                                 "${_ds}/usr/local"
     fi
     if [ \( "${_tiny}" = "yes" \) -o \( "${_tiny}" = "extra" \) ]; then
         zfs create ${_zfsopts} -o canmount=off                                                               "${_ds}/var"
     else
-        zfs create ${_zfsopts}                                                                               "${_ds}/var"
+        zfs create ${_zfsopts} ${_zfsnoauto}                                                                 "${_ds}/var"
     fi
     if [ "${_tiny}" != "extra" ]; then
-        zfs create ${_zfsopts} -o exec=off -o setuid=off                                                     "${_ds}/var/audit"
-        zfs create ${_zfsopts} -o exec=off -o setuid=off                                                     "${_ds}/var/cache"
-        zfs create ${_zfsopts} -o exec=off -o setuid=off -o primarycache=metadata -o compression=off         "${_ds}/var/cache/pkg"
-        zfs create ${_zfsopts} -o exec=off -o setuid=off -o compression=off                                  "${_ds}/var/crash"
+        zfs create ${_zfsopts} ${_zfsnoauto} -o exec=off -o setuid=off                                                      "${_ds}/var/audit"
+        zfs create ${_zfsopts} ${_zfsnoauto} -o exec=off -o setuid=off                                                      "${_ds}/var/cache"
+        zfs create ${_zfsopts} ${_zfsnoauto} -o exec=off -o setuid=off -o primarycache=metadata -o compression=off          "${_ds}/var/cache/pkg"
+        zfs create ${_zfsopts} ${_zfsnoauto} -o exec=off -o setuid=off -o compression=off                                   "${_ds}/var/crash"
     fi
     if [ "$_fbsdupdate" = "yes" ]; then
         if [ \( "${_tiny}" = "yes" \) -o \( "${_tiny}" = "extra" \) ]; then
             zfs create ${_zfsopts} -o canmount=off -o exec=off -o setuid=off                                 "${_ds}/var/db"
         else
-            zfs create ${_zfsopts} -o exec=off -o setuid=off                                                 "${_ds}/var/db"
+            zfs create ${_zfsopts} ${_zfsnoauto} -o exec=off -o setuid=off                                   "${_ds}/var/db"
         fi
-        zfs create ${_zfsopts} -o exec=off -o setuid=off -o primarycache=metadata -o compression=off         "${_ds}/var/db/freebsd-update"
+        zfs create ${_zfsopts} ${_zfsnoauto} -o exec=off -o setuid=off -o primarycache=metadata -o compression=off          "${_ds}/var/db/freebsd-update"
     fi
-    zfs create ${_zfsopts} -o readonly=on -o exec=off -o setuid=off                                          "${_ds}/var/empty"
-    zfs create ${_zfsopts} -o exec=off -o setuid=off -o primarycache=metadata                                "${_ds}/var/log"
-    zfs create ${_zfsopts} -o exec=off -o setuid=off -o atime=on                                             "${_ds}/var/mail"
-    zfs create ${_zfsopts} -o sync=disabled -o exec=off -o setuid=off -o compression=off -o primarycache=all "${_ds}/var/run"
-    zfs create ${_zfsopts} -o sync=disabled -o setuid=off                                                    "${_ds}/var/tmp"
+    zfs create ${_zfsopts} ${_zfsnoauto} -o readonly=on -o exec=off -o setuid=off                                           "${_ds}/var/empty"
+    zfs create ${_zfsopts} ${_zfsnoauto} -o exec=off -o setuid=off -o primarycache=metadata                                 "${_ds}/var/log"
+    zfs create ${_zfsopts} ${_zfsnoauto} -o exec=off -o setuid=off -o atime=on                                              "${_ds}/var/mail"
+    zfs create ${_zfsopts} ${_zfsnoauto} -o sync=disabled -o exec=off -o setuid=off -o compression=off -o primarycache=all  "${_ds}/var/run"
+    zfs create ${_zfsopts} ${_zfsnoauto} -o sync=disabled -o setuid=off                                                     "${_ds}/var/tmp"
 }