私はsedを使用するのは初めてですが、自動化におけるその一般的な柔軟性のためにそれを愛することをすぐに学びます。新しいシステムを展開するたびに、さまざまなセキュリティコントロールを備えたスクリプトを実行したいと考えています。その一部として、GRUBをロックダウンする必要があります。 GRUB)メニューから一般的なUbuntuオプションのロックを解除して、他のすべてのパスワードを保護しながら、誰もがパスワードなしでそれを使用できるようにしています。
そうは言っても、/ boot/grub/grub.cfgファイルで特定の行を検索し、そのオプションに--unrestrictedを追加しようとしています。 (16.04.03のみを使用しているため、理論的にはすべてのシステムでインストール時に同じファイルが使用されます)
ファイルの行は次のとおりです。
menuentry 'Ubuntu' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-simple-2aa7ed2c-67a7-42d5-84fb-0ddab74c5dd0' {
そして、私はそれを次のように見せたいです:
menuentry 'Ubuntu' --class ubuntu --class gnu-linux --class gnu --class os --unrestricted $menuentry_id_option 'gnulinux-simple-2aa7ed2c-67a7-42d5-84fb-0ddab74c5dd0' {
Sed -iはその場で編集するためのものであり、s /は検索する必要があります。しかし、それを超えて、私がここで必要なことを実際に実行できるようにするための構文がわかりません。私が知る限り、--unrestrictedの位置付けが必要です。これほど長い検索を行う必要がなかった方が簡単だと思いますが、ここでもsedは不慣れです。誰かがこのsed挿入を手伝ってくれませんか?できれば、異なる構文がどこにあるのかを説明してください。そうすれば、将来について知っています。
これがコマンドです。
sed -i "s/--class os/--class os --unrestricted/" filename
これは、-iオプションにより、一時ファイルを必要とせずにファイルの行を置き換えます。
「--unrestricted Gos」の行のどこが問題ではない場合、これはより簡単かもしれません。
sed -i "s/'Ubuntu'/'Ubuntu' --unrestricted/" filename
私の答えはRaidPinataのそれに似ています:
Sudo sed -i s'/--class os \$menu/--class os --unrestricted \$menu/' /etc/default/grub
"\ $"は "$"記号をエスケープして、誤って準備されないようにします。コマンドを2回実行しても挿入が2回取得されないように、長い文字列を指定しています。
@oldfredがコメントで言及したとおり。私の答えは、これを行わないでください。
私はプロではありませんが、カーネルが更新されるたびに、あなたのgrubが更新され、/boot/grub/grub.cfg
は上書きされます。
カスタムのGrubエントリを作成する可能性があり、セキュリティが懸念される場合は、この記事は読みやすく、より良いオプションがあるようです。
https://help.ubuntu.com/community/Grub2/Passwords
https://help.ubuntu.com/community/Grub2/Passwords#Protecting_Menuentries
注:「別のオプションは、カスタムメニューを作成し、必要なメニュー項目(保護するものを含む)を追加し、標準スクリプトを無効にすることです。ユーザーとパスワードは、00_headerファイルではなく、このファイルに含めることができます。これは、特に一部のメニュー項目のみが保護される場合に、パスワード保護を割り当てるより簡単な方法である可能性があります。」
これは、カスタムメニューエントリをGrub2に追加する方法ですが、既存のOSにカスタムエントリを作成したことがないので、調査することはお任せします。
Sudo nano /etc/grub.d/40_custom && Sudo update-grub2
menuentry "Ubuntu ISO" {
set isofile="/home/isos/ubuntu.iso"
loopback loop $isofile
linux (loop)/casper/vmlinuz.efi boot=casper iso-scan/filename=$isofile noprompt noeject toram
initrd (loop)/casper/initrd.lz
}