В поисках лучшего решения для ограничения доступа в меню GRUB2

Я только что прочитал, что в определенных ситуациях вы также должны защищать доступ к своему меню GRUB2, устанавливая пароль и, возможно, улучшая доступ, добавляя --unrestricted или --users в качестве аргументов в menuentries и подменю.

Я прочитал соответствующие страницы в Документации сообщества Ubuntu и Arch Wiki . Итак, я создал /etc/grub.d/01_security, сохранил там имена пользователей и пароли, сделал исполняемый файл и запустил update-grub. Это работает по назначению, каждое действие в меню запрашивает имя пользователя и пароль, но я также хочу изменить автоматически сгенерированные записи, чтобы либо ограничить их для определенных пользователей (через --users), либо сделать их доступными для всех, но не редактируемыми всеми (через --unrestricted).

Мне удалось найти правильные строки в 10_linux и соответственно отредактировать их, однако я бы хотел увидеть более простое решение. Возможно, вариант, подобный GRUB_DISABLE_RECOVERY="true" или GRUB_DISABLE_OS_PROBER=true в /etc/default/grub для легкой (пере) настройки (для записей, созданных в linux и os-prober).

Вот разница из моей установки 13.10:

$ diff /etc/grub.d/10_linux /etc/grub.d/10_linux_bak
123c123
<       echo "menuentry '$(echo "$title" | grub_quote)' ${CLASS} --unrestriced \$menuentry_id_option 'gnulinux-$version-$type-$boot_device_id' {" | sed "s/^$
---
>       echo "menuentry '$(echo "$title" | grub_quote)' ${CLASS} \$menuentry_id_option 'gnulinux-$version-$type-$boot_device_id' {" | sed "s/^/$submenu_inde$
125c125
<       echo "menuentry '$(echo "$os" | grub_quote)' ${CLASS} --unrestricted \$menuentry_id_option 'gnulinux-simple-$boot_device_id' {" | sed "s/^/$submenu_$
---
>       echo "menuentry '$(echo "$os" | grub_quote)' ${CLASS} \$menuentry_id_option 'gnulinux-simple-$boot_device_id' {" | sed "s/^/$submenu_indentation/"
323c323
<     echo "submenu --unrestricted '$(gettext_printf "Advanced options for %s" "${OS}" | grub_quote)' \$menuentry_id_option 'gnulinux-advanced-$boot_device_$
---
>     echo "submenu '$(gettext_printf "Advanced options for %s" "${OS}" | grub_quote)' \$menuentry_id_option 'gnulinux-advanced-$boot_device_id' {"

tl; dr: Мне бы хотелось увидеть простое решение для записей GRUB2, которое нельзя изменить без пароля или ограничены определенными пользователями. (Да, GRUB_DISABLE_RECOVERY="true" активен.)

6
задан 15.04.2020, 03:48

1 ответ

Хорошо, я обнаружил, что переменные в /etc/default/grub читаются и экспортируются в grub-mkconfig в /usr/sbin/. Следующий патч - это то, что я имел в виду и, надеюсь, соответствует требованиям качества и стандартам кодирования для измененных файлов. Патч для 30_os-prober должен быть похожим и, надеюсь, выйдет завтра.

Как объяснено выше, переменные должны быть определены в /etc/default/grub примерно так GRUB_PWRESTRICTION_LINUX="--users user1" или около того GRUB_PWRESTRICTION_LINUX="--unrestricted".

Я с нетерпением жду ваших отзывов.

--- /usr/sbin/grub-mkconfig-orig    2013-10-19 11:22:56.653129020 +0200
+++ /usr/sbin/grub-mkconfig 2013-10-19 11:49:34.961392887 +0200
@@ -230,6 +230,12 @@
   GRUB_ENABLE_CRYPTODISK \
   GRUB_BADRAM \
   GRUB_RECORDFAIL_TIMEOUT
+  GRUB_PWRESTRICTION_LINUX \
+  GRUB_PWRESTRICTION_OS_PROBER_LINUX \
+  GRUB_PWRESTRICTION_OS_PROBER_WINDOWS \
+  GRUB_PWRESTRICTION_OS_PROBER_MACOSX \
+  GRUB_PWRESTRICTION_OS_PROBER_EFI \
+  GRUB_PWRESTRICTION_OS_PROBER_HURD

 if test "x${grub_cfg}" != "x"; then
   rm -f "${grub_cfg}.new"
--- /etc/grub.d/10_linux-orig   2013-10-19 23:28:50.195071600 +0200
+++ /etc/grub.d/10_linux    2013-10-19 23:40:17.429375336 +0200
@@ -120,9 +120,17 @@
      title_correction_code="${title_correction_code}if [ \"x\$default\" = '$quoted' ]; then default='$(echo "$replacement_title" | grub_quote)'; fi;"
      grub_warn "$(gettext_printf "Please don't use old title \`%s' for GRUB_DEFAULT, use \`%s' (for versions before 2.00) or \`%s' (for 2.00 or later)" "$GRUB_ACTUAL_DEFAULT" "$replacement_title" "gnulinux-advanced-$boot_device_id>gnulinux-$version-$type-$boot_device_id")"
       fi
-      echo "menuentry '$(echo "$title" | grub_quote)' ${CLASS} \$menuentry_id_option 'gnulinux-$version-$type-$boot_device_id' {" | sed "s/^/$submenu_indentation/"
+      if [ x"${GRUB_PWRESTRICTION_LINUX}" != x ]; then
+        echo "menuentry '$(echo "$title" | grub_quote)' ${CLASS} "${GRUB_PWRESTRICTION_LINUX}" \$menuentry_id_option 'gnulinux-$version-$type-$boot_device_id' {" | sed "s/^/$submenu_indentation/"
+      else
+        echo "menuentry '$(echo "$title" | grub_quote)' ${CLASS} \$menuentry_id_option 'gnulinux-$version-$type-$boot_device_id' {" | sed "s/^/$submenu_indentation/"
+      fi
   else
-      echo "menuentry '$(echo "$os" | grub_quote)' ${CLASS} \$menuentry_id_option 'gnulinux-simple-$boot_device_id' {" | sed "s/^/$submenu_indentation/"
+      if [ x"${GRUB_PWRESTRICTION_LINUX}" != x ]; then
+        echo "menuentry '$(echo "$os" | grub_quote)' ${CLASS} "${GRUB_PWRESTRICTION_LINUX}" \$menuentry_id_option 'gnulinux-simple-$boot_device_id' {" | sed "s/^/$submenu_indentation/"
+      else
+        echo "menuentry '$(echo "$os" | grub_quote)' ${CLASS} \$menuentry_id_option 'gnulinux-simple-$boot_device_id' {" | sed "s/^/$submenu_indentation/"
+      fi
   fi      
   echo "recordfail" | sed "s/^/$submenu_indentation/"
   if [ x$type != xrecovery ] ; then
@@ -320,7 +328,11 @@
    boot_device_id="$(grub_get_device_id "${GRUB_DEVICE}")"
     fi
     # TRANSLATORS: %s is replaced with an OS name
-    echo "submenu '$(gettext_printf "Advanced options for %s" "${OS}" | grub_quote)' \$menuentry_id_option 'gnulinux-advanced-$boot_device_id' {"
+    if [ x"${GRUB_PWRESTRICTION_LINUX}" != x ]; then
+      echo "submenu '$(gettext_printf "Advanced options for %s" "${OS}" | grub_quote)' "${GRUB_PWRESTRICTION_LINUX}" \$menuentry_id_option 'gnulinux-advanced-$boot_device_id' {"
+    else
+      echo "submenu '$(gettext_printf "Advanced options for %s" "${OS}" | grub_quote)' \$menuentry_id_option 'gnulinux-advanced-$boot_device_id' {"
+    fi
   fi

   linux_entry "${OS}" "${version}" advanced \
0
ответ дан 15.04.2020, 03:48

Теги

Похожие вопросы