web-dev-qa-db-ja.com

GRUB2パスワードを簡単な方法で設定する方法は?

Ubuntu 14.04 LTS AMD64でGRUB2のパスワードを設定する必要があります。 私が到達しようとしているセットアップは、[e] ditおよび[c] onsoleオプションをパスワードで保護しますが、オペレーティングシステムエントリ(Ubuntu、Windows)のブートは保護されません。

Grub2/Passwords (これは時代遅れで、非常に混oticとしており、ほとんど読めません)を研究しましたが、スーパーユーザーのパスワードを設定し、メニューエントリに--unrestrictedオプションを追加する必要があるようです。わかりましたが、この--unrestrictedオプションを正確にどこに追加しましたか?

/boot/grub/grub.cfgにある場合、このファイルはgrub-updateが実行されるたびに上書きされるため、最も賢い考えではありません。だから、これは私にとって選択肢ではありません。なぜなら、-仮定してみましょう-GRUB背景画像を週に2回変更したいからです。さらに、/boot/grub/grub.cfg可読性は完璧にはほど遠いです。 --unrestrictedオプションをどこに配置するかはまだ明らかではありません。

The/etc/grub.d/*のメニューエントリファイルにある場合、/boot/grub/grub.cfgを編集するよりもさらにひどいです。これらのファイルは読みやすさの点で非常に混乱しているため、編集はさらに難しくなります。

説明したようにGRUB2パスワードを設定するためのクリーンで簡単な方法はありますか?この投稿でリンクしたドキュメント以外の素晴らしいドキュメントがありますか?

3
user280493

エントリの保護に関するセクション

現在、ユーザーを追加したり、保護するメニュー項目を指定したりする自動化された方法はありません。ユーザーは、GRUB 2スクリプトを手動で編集する必要があります。 GRUB 2メニューは、いくつかのスクリプトの入力をまとめたものです。 /etc/grub.d/10_linuxファイルは、デフォルトのUbuntu OSをGRUB 2メニューに追加する役割を果たします。 [...]これらのセクションの大部分は、/ etc/grub.d /フォルダーにあるデフォルトスクリプトの編集に専念しています。

そして 次のセクション

GRUB 2メニューには、/ etc/grub.d/30_os-proberスクリプトを介したデフォルトのUbuntu OS以外のオペレーティングシステムの選択が含まれています。 [...]これには、他のUbuntuおよびLinuxインストール、Windowsなどが含まれます。

30_os-proberスクリプトは、特定の種類のオペレーティングシステムを探します。ユーザーは、単一のコマンドを使用して、または以下で説明するようにOSタイプごとに個別に、すべてのOSを変更できます。

したがって、/etc/grub.d/のファイルを編集する必要があるようです。少なくともスーパーユーザーを追加する場合、これらのファイルのいずれかを編集する必要はありませんが、 新しいファイル を作成できます。

スーパーユーザー/ユーザー情報とパスワードは、/ etc/grub.d/00_headerファイルに含まれている必要はありません。情報は、そのファイルがgrub.cfgに組み込まれている限り、任意の/etc/grub.dファイルに配置できます。ユーザーは、このデータを/etc/grub.d/40_customなどのカスタムファイルに入力して、Grubパッケージが更新されても上書きされないようにすることができます。カスタムファイルに情報を配置する場合は、これらのファイルからコンテンツが自動的に追加されるため、「cat << EOF」および「EOF」行を含めないでください。

これらのパラグラフは、公式のGRUBドキュメントが別の方法で言及するまで関連性を保ちます:

Grub-mkconfigプログラムには、認証付きの構成ファイルを生成するためのサポートがまだ組み込まれていません。

(それが意味するものは何でも。)


Ubuntu 12.04まで

メニューエントリを保護するための古い手順は次のとおりです。

/etc/grub.d/10_linuxで、次の行を見つけます。

printf "menuentry '${title}' ${CLASS} {\n" "${os}" "${version}"

--users ''を追加:

printf "menuentry '${title}' ${CLASS} --users '' {\n" "${os}" "${version}"

30_os-proberのすべてのエントリ:

Sudo sed 's/--class os /--class os --users /' -i /etc/grub.d/30_os-prober

buntuパッケージ はUbuntu 12.10をリストしないため、12.10が古いメソッドを使用するか新しいメソッドを使用するかはわかりません。

Ubuntu 13.04以降

現在、10_linuxファイルはechoの代わりにprintfを使用しています。

echo "menuentry '$(echo "$title" | grub_quote)' ${CLASS} \$menuentry_id_option 'gnulinux-$version-$type-$boot_device_id' {" | sed "s/^/$submenu_indentation/"

そして30_os-proberファイルはcatとheredocsを使用します:

# The minix entry
cat << EOF
menuentry "${LONGNAME} (on ${DEVICE}, Multiboot)" {
EOF
# The hurd entry
cat << EOF
menuentry '$(echo "${LONGNAME} $onstr" | grub_quote)' --class hurd --class gnu --class os \$menuentry_id_option 'osprober-gnuhurd-/boot/gnumach.gz-false-$(grub_get_device_id "${DEVICE}")' {
EOF

したがって、メニューエントリが終了する前(ブレースが開く前)に--user ""部分を貼り付けることができます。

変更したファイルは必ずバックアップし、変更後にupdate-grubを実行してください。

3
muru

superusersを構成します。これを行うには、たとえば、次の行を/etc/grub.d/00_headerに追加します。

# Support user protection on entries
cat << EOF
set superusers="admin"
password_pbkdf2 admin grub.pbkdf2.sha512.10000.8E51188BE7DF732DDF102C918DEC152087558E04DA843B4A74C3EA8374BAB1ECA493399D62E3F2779F55C5BE2E8B65B8636113A99C09BFB892DB64626337904C.3016474FE6B420DBE6371B41D9BE8471B135CDF4BE674AC1265D3BA123CD9E459E960AEC199AB8C7C1C1A6BAF45314C64591E85E404AB54F4777E032A50CC731
EOF

grub-mkpasswd-pbkdf2コマンドの出力を使用して、暗号化されたパスワードを更新します。この例では、変更する必要があるのは次の情報です。

grub.pbkdf2.sha512.10000.8E51188BE7DF732DDF102C918DEC152087558E04DA843B4A74C3EA8374BAB1ECA493399D62E3F2779F55C5BE2E8B65B8636113A99C09BFB892DB64626337904C.3016474FE6B420DBE6371B41D9BE8471B135CDF4BE674AC1265D3BA123CD9E459E960AEC199AB8C7C1C1A6BAF45314C64591E85E404AB54F4777E032A50CC731

/etc/grub.d/10_linuxファイルを編集し、129行目を探します(Ubuntu 14.04 LTS内)。そのままの形では、次のようになります。

echo "menuentry '$(echo "$os" | grub_quote)' ${CLASS} \$menuentry_id_option 'gnulinux-simple-$boot_device_id'     {" | sed "s/^/$submenu_indentation/"

ここで、CLASS変数の後に--unrestrictedオプションを追加して、構成行を完了します。

echo "menuentry '$(echo "$os" | grub_quote)' ${CLASS} --unrestricted \$menuentry_id_option 'gnulinux-simple-$boot_device_id' {" | sed "s/^/$submenu_indentation/"

/boot/grub/grub.cfgを再構築します。これを行うには、Sudo update-grubコマンドを実行します。

システムを再起動して試してください。

これで、次の構成が必要になります。

  • メインのUbuntuオペレーティングシステムエントリは通常どおり起動しますが、superusers以外の誰もリスト内の関連エントリを編集できません。

  • リスト内の他のすべてのエントリを起動および編集できるのは、superusersのみです。


こちらもご覧ください:

https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/7/html/System_Administrators_Guide/sec-GRUB_2_Password_Protection.html