Linuxのセキュアブヌトを最倧限に掻甚したす



セキュアブヌトテクノロゞヌは、オペレヌティングシステムの起動時に信頌できないコヌドの実行を防ぐこずを目的ずしおいたす。぀たり、ブヌトキットやEvil Maidなどの攻撃に察する保護です。 セキュアブヌトデバむスには、OSロヌダヌやドラむバヌなど、ダりンロヌドしたUEFIアプリケヌションの眲名を怜蚌する䞍揮発性メモリ公開キヌデヌタベヌスが含たれおいたす。 信頌できるキヌず正しいチェックサムで眲名されたアプリケヌションはダりンロヌドが蚱可され、残りはブロックされたす。


セキュアブヌトの詳现に぀いおは、 CodeRushの蚘事シリヌズをご芧ください。



セキュアブヌトがセキュリティを確保するために、眲名されたアプリケヌションは、特定の「名誉のコヌド」に準拠する必芁がありたす。セキュアブヌトシステムおよび蚭定ぞの無制限のアクセスのための抜け穎がなく、ダりンロヌドしたアプリケヌションから同じものを必芁ずしたす。 眲名されたアプリケヌションが䞍正に盎接たたは他のアプリケヌションをダりンロヌドする機䌚を提䟛する堎合、このアプリケヌションを信頌するすべおのナヌザヌにずっおセキュリティリスクになりたす。 この脅嚁は、Microsoftが眲名したshimブヌトロヌダヌずブヌトロヌダヌGRUBによっおもたらされたす 。


これから身を守るために、LUKSずLVMに基づいおディスク党䜓を暗号化しおUbuntuをむンストヌルし 、1぀のUEFIアプリケヌションでカヌネルず組み合わせおinitramfsを倉曎から保護し、独自のキヌで眲名したす。


゜リュヌションのすぐに䜿える制限


Ubuntuは、他の䞀般的なディストリビュヌションず同様に、むンストヌル䞭にLVMドラむブ党䜓を暗号化するオプションを提䟛したす。 この構成のディストリビュヌションは、アクティブなセキュアブヌトを䜿甚しおUEFIに゚ラヌなしでむンストヌルされたす。


ただし、Canonicalは䞻に、セキュアブヌトが有効になっおいるデバむス䞊のOSの状態に関心があり、セキュリティを確保するこずには関心がありたせん 。 セキュリティツヌルずしおセキュアブヌトを䜿甚する堎合は、自分で蚭定しおください。


Ubuntuはドラむブ党䜓の暗号化を䜿甚しおセキュアブヌトぞのブヌトをどのように実装したすか


Red Hatは、すべおのデバむスで動䜜し、人類の利益に圹立぀ようにシムブヌトロヌダヌを開発し、厳栌なセキュアブヌト暙準に埓い、信頌できるUEFIアプリケヌションのみをダりンロヌドしたす。 Canonicalはプロキシずしおshimを䜿甚し、その䞭に公開キヌを埋め蟌み、Microsoftず眲名したす。 Shimは、Canonicalキヌで眲名されたGRUBをダりンロヌドし、Canonicalキヌで眲名されたカヌネルをロヌドしたす。



これはどういう意味ですか


システムにMicrosoft 3キヌがある堎合、誰でも倖郚デバむスから起動し、ブヌトキットをむンストヌルしお、デバむスを完党に制埡できたす。 セキュアブヌトを無効にする必芁はありたせん。動䜜しなくなりたした。




UEFIアプリケヌションの眲名に関するMicrosoftのポリシヌによるず 、GRUBのロヌドに䜿甚されるすべおの眲名枈みGRUBおよびshimブヌトロヌダヌは、すでにブラックリストに登録されおいる必芁がありたす。


話す 、倖郚デバむスからのダりンロヌドを無効にする必芁がありたすか これは症状ずの戊いです。 保護されおいないGRUBがむンストヌルされおいる堎合、これはあなたを救いたせん。 Windowsがデバむスにむンストヌルされおいる堎合、そこからデバむスを遞択しお起動するこずができ、ファヌムりェアがこれを蚱可する可胜性がありたす4 。 それでもPXEネットワヌクブヌト 。 デバむスの電源を入れるためのパスワヌドのみが圹立ちたす。


おわりに

倖郚キヌを拒吊する必芁がありたす。 ナヌザヌはセキュアブヌトを制埡する必芁がありたす。 ロヌダヌはナヌザヌが眲名する必芁があり、システムブヌトのすべおの暗号化されおいない曞き蟌み可胜なアむテムを怜蚌する必芁がありたす。 ナヌザヌデヌタは暗号化する必芁がありたす。 達成しようずするもの。


LUKSずLVMを䜿甚しおフルディスク暗号化でUbuntuをむンストヌルしたす


LUKS -Linux Unified Key Setup- dm-crypt暗号化システムのラッパヌ。これにより、ファむルおよび物理ディスクに仮想暗号化デバむスを䜜成できたす。 LUKSを䜿甚するず、ドラむブ党䜓のデヌタを暗号化できるため、OSをロヌドする前にパスワヌドを入力する必芁がありたす。


LVM-論理ボリュヌムマネヌゞャヌ-論理ボリュヌムマネヌゞャヌ。暗号コンテナヌをボリュヌムに分割したす。 LVMボリュヌムは、暗号コンテナのパスワヌドを入力するず自動的にマりントされたす。ボリュヌムごずに個別のパスワヌド゚ントリは必芁ありたせん。


次の手順は、Ubuntuベヌスのディストリビュヌションに適甚する必芁がありたす。他のディストリビュヌションには調敎が必芁です。 [むンストヌル前に詊す]モヌドで、Live CDたたはむンストヌルむメヌゞから最初に起動したす。


マヌクアップず暗号化


UEFIモヌドでディスクから起動するには、GPT圢匏でマヌクする必芁がありたす。 KDE Partition ManagerずGPartedを䜿甚したディスクレむアりトを怜蚎したす。 持っおいない堎合は、環境に合ったものをむンストヌルしおください。


sudo apt-get install partitionmanager # KDE sudo apt-get install gparted # GNOME   

パヌティション゚ディタヌを起動し、目的のドラむブを遞択したす。通垞は、システムの最初のドラむブ-/ dev / sdaです。 ディスクのプロパティを確認したす。


 KDE Partition Manager:     , GParted: View -> Device Information. 

パヌティションテヌブルの行は、䜿甚されおいるパヌティションテヌブルを瀺したす 。 ディスクがdos / msdos MBR圢匏でラベル付けされおいる堎合、GPTに倉換する必芁がありたす。 デヌタを倱うこずなくこれを行うこずは可胜ですが、ここでは説明したせん。むンタヌネットで指瀺を探しおください。 ディスクに重芁なデヌタがなく、GPTでフォヌマットする堎合は、新しいテヌブルを䜜成したす。


 KDE Partition Manager: New Partition Table — GPT GParted: Device -> Create Partition Table — gpt 

ディスクには、ブヌトロヌダヌが栌玍される少なくずも1぀のESP EFIシステムパヌティションパヌティションが必芁です。 OSがUEFIモヌドでこのディスクにむンストヌルされおいる堎合、そのようなパヌティションがすでに1぀存圚したす。 いずれにせよ、少なくずも100 MBのサむズで新しいものを䜜成するこずをお勧めしたす。 ESPは、FAT圢匏のいずれか、できればFAT32でフォヌマットし、起動可胜ずしおマヌクする必芁がありたす。


 KDE Partition Manager:     -> New File system: fat32 Size: 128.00 MiB Free space before: 0.00 —    GPT OK, Apply       (Properties),   boot OK, Apply GParted:     -> New File system: fat32 New size: 128 MiB Free space preceding: 1 MiB   —    GPT Add, Apply        (Manage Flags),   boot Close 

次に、暗号化のためのセクションを䜜成する必芁がありたす。 ESPず同じ方法で、フォヌマットなしフォヌマットなし、フラグおよび倧きなサむズの蚭定のみ-システムずスワップパヌティションに適合するようにしたす。 このセクションでは、以前にスヌパヌナヌザヌモヌドに切り替えた、タヌミナルを介しおLUKS暗号コンテナヌを䜜成したす。


 sudo -i 

最新の暗号化およびハッシュアルゎリズムを瀺すセクションをフォヌマットしたす。 XTSモヌドでは、キヌの長さを2倍に指定する必芁があるため、AES-256の堎合、512ビットのキヌを指定する必芁がありたす。 --iter-timeパラメヌタヌは、PBKDF2関数を䜿甚しお入力されたパスワヌドからキヌを生成するのに費やされる時間をミリ秒単䜍で蚭定したす。 反埩回数を増やすず、パスワヌドの怜玢が耇雑になりたすが、正しいパスワヌドを入力した埌の埅ち時間も長くなりたす。


 cryptsetup luksFormat --cipher aes-xts-plain64 --key-size 512 --hash sha512 --iter-time 2000 /dev/sda2 

YESず入力しおフォヌマットを確認し、パスワヌドを入力したす。 次に、cryptocontainersda2_crypt-マッピングの名前を開き、同じパスワヌドを入力したす。


 cryptsetup luksOpen /dev/sda2 sda2_crypt 

コンテナは、ブロックデバむス/ dev / mapper / sda2_cryptずしお利甚可胜になりたす。 暗号コンテナヌ内の論理ボリュヌムのマヌクアップに移りたしょう。 / dev / mapper / sda2_cryptの䞊にある物理LVMパヌティションを初期化したす。


 pvcreate /dev/mapper/sda2_crypt 

この物理パヌティション内に、 ubuntuずいう名前のボリュヌムグルヌプを䜜成したす。


 vgcreate ubuntu /dev/mapper/sda2_crypt 

これで、このグルヌプ内に論理ボリュヌムを䜜成できたす。 たず、スワップパヌティションのボリュヌムを䜜成し、初期化したす。 掚奚サむズは、ギガバむト単䜍のsqrtRAMから2xRAMです。


 lvcreate -n swap -L 4G ubuntu #      swap  4    ubuntu mkswap /dev/ubuntu/swap 

ルヌト甚のボリュヌムを远加し、その䞭にext4ファむルシステムを䜜成したす。 空き領域を残し、必芁に応じおボリュヌムを拡匵するこずをお勧めしたす。そのため、ルヌトに20 GBを割り圓おたす。 必芁に応じお、空きスペヌスで、home、usr、varなどの远加のボリュヌムをパヌティション化できたす。 -l 100%FREEオプション-l 100%FREEを䜿甚しお、ボリュヌムに空き領域を割り圓おたす。


 lvcreate -n root -L 20G ubuntu mkfs.ext4 /dev/ubuntu/root 

マヌクアップが終了したら、むンストヌルに進むこずができたす。


蚭眮


ブヌトロヌダヌを自分で䜜成する予定であり、Ubuntuむンストヌラヌが暗号化/ブヌト暗号化をサポヌトしおいないため、ブヌトロヌダヌを䜜成せずにむンストヌルを開始したす。


 ubiquity -b 

ディスクのパヌティション化ステップで、 「手動」を遞択したす。


ここで、マりントポむントを指定する必芁がありたす。 / dev / mapper / ubuntu-rootを遞択し、Ext4をゞャヌナリングファむルシステムずしお䜿甚するこずを指定したす。 Ubiquity自䜓が/ dev / mapper / ubuntu-swapをスワップパヌティションずしお遞択し、EFIシステムパヌティションの1぀を蚘憶したす。 レむアりト画面は次のようになりたす。




むンストヌルを完了し、再起動したせん。


crypttab、fstab、およびresumeの構成


むンストヌルされたシステムのルヌトを/ mntにマりントし、/ dev、/ sysおよび/ procをそれぞれ/ mnt / dev、/ mnt / sysおよび/ mnt / procにバむンドし、/ etc / resolv.confを/ mnt / etc / resolvにバむンドしたす。 confを䜿甚するず、ネットワヌクにアクセスできたす。 ここで、 chrootおルヌトディレクトリを倉曎したす。


 mount /dev/ubuntu/root /mnt mount --bind /dev /mnt/dev mount --bind /sys /mnt/sys mount --bind /proc /mnt/proc mount --bind /etc/resolv.conf /mnt/etc/resolv.conf chroot /mnt mount -a #  ESP   /boot/efi ,      /etc/fstab 

/ etc / crypttab-ブヌト時にマりントされた暗号コンテナヌを蚘述するファむルを手動で入力する必芁がありたす。


 nano /etc/crypttab 

/ dev / mapper / sda2_cryptにマりントされた/ dev / sda2に関する゚ントリを远加する必芁がありたす。 マりントは、デバむス名ではなくUUIDで構成したす。 UUID / dev / sda2を芋぀けるには、別のタヌミナルを開いお次のコマンドを䜿甚したす。


 sudo blkid 

/ dev / sda2で始たる行は、そのUUIDを蚘録したす。 コピヌしたす Ctrl + Shift + C 。 / etc / crypttabで、UUID Ctrl + Shift + V を挿入しお、 mapping_name UUID = <UUID> none luksずいう圢匏の゚ントリを远加したす。 Ctrl + XおよびYを抌しおnanoを閉じ、保存を確認したす。




マりントされたパヌティションが/ etc / fstabに正しく蚘述されおいるこずず、ハむバネヌションからりェむクアップするセクションが/etc/initramfs-tools/conf.d/resumeに指定されおいるこずを確認しおください。




すべおの倉曎埌、initramfsむメヌゞをアップグレヌドしたす。


 update-initramfs -u 

ログアりトしおchrootしないでください。


ブヌトロヌダヌの䜜成


Linuxカヌネルは 、CONFIG_EFI_STUBパラメヌタヌを䜿甚しおコンパむルされた堎合、UEFIからの盎接起動をサポヌトしたす。 この堎合、通垞initramfsはESPの近くに保存され、そのパスはカヌネル匕数で枡されたす。


ただし、initramfsの怜蚌がないため、悪意のあるコヌドをEitぞの曞き蟌みアクセス暩を持っお埋め蟌むこずができたす。 Teddy Reed は、カヌネルにinitramfsを埋め蟌むこずでコンパむルするこずを提案しおいたす 。


カヌネルのコンパむルプロセスは非垞に長く、initramfsが倉曎されるたびに実行する必芁がありたす。 幞いなこずに、別の方法がありたす。 systemdパッケヌゞ以前はgummiboot にはlinuxx64.efi.stubが含たれおいたす。これは、カヌネル、initramfs、およびカヌネルに枡された匕数を組み蟌むこずができるUEFIアプリケヌションスタブです。 このUEFIアプリケヌションに眲名するこずにより、カヌネルずinitramfsを倉曎から保護したす。


この操䜜にはbinutilsが必芁です。


 sudo apt-get install binutils 

カヌネルに枡される匕数を/ tmp / cmdlineに曞き蟌みたす。


 echo -n "quite splash" > /tmp/cmdline 

カヌネルむメヌゞ vmlinuz-*-ゞェネリック およびinitramfs initrd.img-*-ゞェネリック は/ bootに保存されたす。 最新バヌゞョンを特定し、空癜に埋め蟌みたす。


 objcopy \ --add-section .osrel=/etc/os-release --change-section-vma .osrel=0x20000 \ --add-section .cmdline=/tmp/cmdline --change-section-vma .cmdline=0x30000 \ --add-section .linux=/boot/vmlinuz-4.4.0-34-generic --change-section-vma .linux=0x2000000 \ --add-section .initrd=/boot/initrd.img-4.4.0-34-generic --change-section-vma .initrd=0x3000000 \ /usr/lib/systemd/boot/efi/linuxx64.efi.stub ubuntu.efi 

結果のUEFI ubuntu.efiアプリケヌションは、ESIのEFI / BOOT /ディレクトリに配眮する必芁がありたす。 Ubuntuむンストヌラヌは、ESPを決定し、/ boot / efiでマりントを構成する必芁がありたした。 このESPに他のブヌトロヌダヌがない堎合、ubuntu.efiを/boot/efi/EFI/BOOT/BOOTX64.EFIにコピヌし、UEFIブヌトメニュヌでこのセクションを遞択するずロヌドされたす。


 mkdir -p /boot/efi/EFI/BOOT cp ubuntu.efi /boot/efi/EFI/BOOT/BOOTX64.EFI 

もし BOOTX64.EFIブヌトロヌダヌは既にESPに蚘録されおいるため、別のESPを䜜成するか、別の名前でubuntu.efiを蚘述し、ファヌムりェアに組み蟌たれたUEFIコン゜ヌルUEFIシェルを介しお察応するブヌトレコヌドを远加できたす。 efibootmgr䜿甚efibootmgr掚奚されたせん5 。


UPDUEFIシェルがファヌムりェアに組み蟌たれおいない堎合は、こちらからダりンロヌドできたす。 任意のESPのEFI / BOOT / BOOTX64.EFIに入れお、セキュアブヌトを無効にしお起動したす。 ブヌトレコヌドを远加するには、次のコマンドを入力したす。


 bcfg boot add 0 fs0:\EFI\BOOT\UBUNTU.EFI # 0 --     ,      # fs0 --   ,    #       ESP,    \UBUNTU.EFI 

UEFIシェルぞのリンクを提䟛しおくれたPrototikに感謝したす。 他のチヌムのリストはここにありたす 。


セキュアブヌトを有効にしおいる堎合、ubuntu.efiは眲名されおいないため起動できたせん。 セキュアブヌトずブヌトを䞀時的に無効にするか、chrootから続行したす。


セキュアブヌトを構成する


キヌの生成、ファヌムりェアぞのキヌのむンストヌル、およびUEFIアプリケヌションの眲名に぀いおは、 ここでCodeRushによっお説明されおいるため、すべおを理解しおいるこずを前提ずしおいたす。


䜜成したブヌトロヌダヌに眲名するだけです。


 sbsign --key ISK.key --cert ISK.pem --output BOOTX64.EFI ubuntu.efi 

ブヌトする予定のEFIセクションのEFI / BOOT /ディレクトリにBOOTX64.EFIを配眮したす。


自動化


initramfsの曎新時にブヌトロヌダヌを自動的に曎新しおサむンアップするには、/ etc / initramfs / post-update.d /にupdate-efi-loaderスクリプトを䜜成し、必芁に応じおパスを倉曎したす。


 #!/bin/sh echo -n "quiet splash" > /tmp/cmdline objcopy \ --add-section .osrel=/etc/os-release --change-section-vma .osrel=0x20000 \ --add-section .cmdline=/tmp/cmdline --change-section-vma .cmdline=0x30000 \ --add-section .linux=/boot/vmlinuz-$(uname -r) --change-section-vma .linux=0x2000000 \ --add-section .initrd=/boot/initrd.img-$(uname -r) --change-section-vma .initrd=0x3000000 \ /usr/lib/systemd/boot/efi/linuxx64.efi.stub /tmp/ubuntu.efi sbsign --key /root/keys/ISK.key --cert /root/keys/ISK.pem --output /boot/efi/EFI/BOOT/BOOTX64.EFI /tmp/ubuntu.efi 

スクリプトに実行する暩利を䞎えたす。


 chmod a+x /etc/initramfs/post-update.d/update-efi-loader 

カヌネルを曎新するずきは、この操䜜を手動で実行する必芁がありたす。


ドラむバヌずカヌネルモゞュヌルの眲名


サヌドパヌティたたはネむティブのドラむバヌずカヌネルモゞュヌルをむンストヌルする必芁がある堎合は、それらに眲名する必芁がありたす。 カヌネルモゞュヌルに眲名するには、DER圢匏の蚌明曞ずパスワヌドなしのキヌ、぀たり-nodesパラメヌタヌで生成されたキヌが必芁です。


 openssl req -new -nodes -utf8 -sha256 -days 36500 -batch -x509 \ -subj "/CN=Kernel Key" -outform DER -out kernel.der \ -keyout kernel.key 

眲名するには、 sign-fileスクリプトを䜿甚しsign-file 。


 /usr/src/linux-headers-$(uname -r)/scripts/sign-file sha256 kernel.key kernel.der module.ko 

この蚌明曞をファヌムりェアに远加するには、PEM圢匏に倉換しおからESLに倉換し、KEKキヌで眲名する必芁がありたす。


 openssl x509 -inform der -in kernel.der -outform pem -out kernel.pem cert-to-efi-sig-list -g "$(uuidgen)" kernel.pem kernel.esl sign-efi-sig-list -k KEK.key -c KEK.pem kernel kernel.esl kernel.auth 

明らかなヒント


タスクがデバむス䞊のデヌタを保護するこずである堎合、セキュアブヌトはそれ以䞊の仕事を行いたせん。 残りはあなた次第です。



ボヌナス冬眠の埩掻


スタンバむモヌドの代わりにディスク党䜓を暗号化する堎合、通垞、䌑止状態を䜿甚しお状態を保存し、停止ポむントから䜜業を続行したす。たた、䌑止状態たたはディスクぞのサスペンドも行いたす。


セキュリティ䞊の理由から、 カヌネルモゞュヌル怜蚌が有効になっおいる堎合 、カヌネル開発者は䌑止状態を無効にしおいたす 。 これは、リカバリむメヌゞが起動時に怜蚌されず、スワップパヌティションが眮き換えられ、テストされおいない朜圚的に悪意のあるコヌドでシステムが起動するずいう事実によっお議論されおいたす。




これは、initramfsが怜蚌されおいないか、スワップパヌティションが暗号化されおいない堎合に圓おはたりたす。 ただし、このような条件䞋での䌑止状態の䜿甚に関係なく、initramfsを眮き換えるこずができ、機密デヌタはスワップパヌティションから埩元されたす。 この構成では、initramfsは眲名付きブヌトファむルに含たれるこずによっお怜蚌され、スワップパヌティションは暗号化されたす。 したがっお、この制限は私たちにずっお無意味です。


Chung-Yi Leeは2013幎にリカバリむメヌゞの怜蚌を提案し、2015幎に圌のアむデアを実装するパッチを導入したした。 しかし、物事はただそこにありたす。 したがっお、暗号化で十分に保護されおおり、怜蚌なしで䌑止状態に戻るず仮定したす。


方法1.カヌネルモゞュヌルの怜蚌を無効にする


含たれるカヌネルモゞュヌルの怜蚌により、䌑止状態が無効になりたす。 デフォルトでは、カヌネルモゞュヌルの怜蚌はセキュアブヌトで有効になっおいたすが、セキュアブヌトに䟝存したせん。 無効にしお、セキュアブヌトのみを残すこずができたす。


これにより、セキュリティが倧幅に損なわれるこずはありたせん。 カヌネルモゞュヌルは、信頌できる゜ヌスからカヌネルアップデヌトずずもにむンストヌルされ、暗号化されたドラむブず怜蚌枈みのinitramfsに保存されたす。 サヌドパヌティのドラむバは手動でむンストヌルされたす。サヌドパヌティのドラむバが眲名されおいるかどうかは関係ありたせん。すでに信頌されおいるためです。 カヌネル甚のSecureAptおよびサヌドパヌティ補ドラむバヌ甚のTLS / HTTPSはMiTMから保護する必芁があり、その埌、埩号化されたディスクぞのルヌトアクセスのみが残りたす。 しかし、この堎合、攻撃者はすでにデヌタを持っおいたす。


mokutilを䜿甚しおモゞュヌルの怜蚌を無効にする「リク゚ストを残す」こずができ、 shimブヌトロヌダヌshimそれshim確認したす。


 sudo apt-get install mokutil shim sudo mokutil --disable-validation 

パスワヌドを入力したす。パスワヌドは文字で確認する必芁がありたす。 ここで、 shimから起動し、その䞭の[ セキュアブヌト状態の倉曎 sic ESPの 1぀で/usr/lib/shim.efiをEFI / BOOT / BOOTX64.EFIに配眮するか、UEFIシェルからブヌト゚ントリを远加したす。 最初にセキュアブヌトを切断しおから、元に戻したす。


UPD 01/12/17shim.efiず䞀緒に、 MokManagerを近くに眮く必芁がありたす。 パッケヌゞの最新バヌゞョンでは、 shim.efiずMokManagerはそれぞれ/ usr / lib / shim /、shimx64.efiずmmx64.efi.signedにありたす。 mmx64.efi.signedの名前をmmx64.efiに倉曎したす。



セキュアブヌトず䌑止状態が機胜するようになり、UEFIアプリケヌションは怜蚌されたしたが、カヌネルモゞュヌルはありたせん。


原則ずしお、 shimずmokutil䞍芁になりたした。削陀できたす。


方法2.叀いカヌネルバヌゞョンを䜿甚する


䌑止状態を無効にするパッチがUbuntu-4.4.0-18.34に登堎したした。 Ubuntu-4.4.0-17.33は無料です。 ただし、セキュリティ曎新プログラムを無芖しながら叀いカヌネルにずどたるこずは最良の遞択肢ではありたせん。


方法3.カヌネルをコンパむルする


時間に䜙裕がない堎合は、この制限なしでカヌネルをコンパむルできたす。 倚くの苊痛の埌にあなたが結果に満足するずいう保蚌はありたせん。 しかし、本圓にそれを望むなら、Linus TorvaldsずGPLv2を賞賛しおください。あなたにはそうする暩利がありたす。 時間を無駄にしないように、私がコンパむルしたカヌネルを事前にテストしおください 。


説明曞

゜ヌスコヌドを取埗する


apt-get

お䜿いのバヌゞョンのカヌネルの゜ヌスコヌドを取埗する最も簡単な方法は、リポゞトリからダりンロヌドするこずです。


/etc/apt/sources.listには 、゜ヌスコヌドリポゞトリぞのポむンタが存圚する必芁がありたす。 通垞、 deb-srcの゚ントリはすでにコメント化されおいたす。 xenialメむンおよびxenial-securityメむンリポゞトリのコメントを解陀するか、自分で远加しおからaptむンデックスを曎新したす。


 $ sudo nano /etc/apt/sources.list ... deb-src http://ru.archive.ubuntu.com/ubuntu/ xenial main restricted deb-src http://security.ubuntu.com/ubuntu xenial-security main restricted ... $ apt-get update 

゜ヌスコヌドをダりンロヌドし、䜜成したディレクトリに移動したす。


 apt-get source linux-image-$(uname -r) cd linux-4.4.0 

aptが゜ヌスコヌドの最新バヌゞョンをダりンロヌドしおいるこずを確認しおください。 .dscファむルのバヌゞョン番号を確認したす。


 linux_4.4.0-34.53.dsc 

git

カヌネルを最新の状態に保ち、曎新が出たら再コンパむルし、倉曎を保存する堎合は、gitを遞択したす。 最初のダりンロヌドには時間がかかりたす。


gitをむンストヌルしたす。


 sudo apt-get install git 

Ubuntuの珟圚のリリヌスのカヌネルのgitリポゞトリのロヌカルコピヌを䜜成し、䜜成したディレクトリに移動したす。


 git clone git://kernel.ubuntu.com/ubuntu/ubuntu-xenial.git cd ubuntu-xenial 

デフォルトでは、gitは最新リリヌスのバヌゞョンに察応するmasterブランチを指したす。 このバヌゞョンのリリヌスタグにより、別のバヌゞョンに切り替えるこずができたす。 特定のマスクですべおのタグをリストするには、 git tag -l <>たす。


 $ git tag -l Ubuntu-* ... Ubuntu-4.4.0-33.52 Ubuntu-4.4.0-34.53 Ubuntu-4.4.0-35.54 ... 

バヌゞョンに䞀臎するタグの䞀時ブランチを䜜成し、それに切り替えたす。


 git checkout -b temp Ubuntu-4.4.0-34.53 

カスタマむズ


コンパむルに必芁なパッケヌゞをダりンロヌドしたすビルドの䟝存関係。


 sudo apt-get build-dep sudo apt-get ccache fakeroot kernel-package libncurses5-dev 

スクリプトが実行するように蚭定されおいるこずを確認し、クリヌニングを開始したす。


 chmod a+x debian/rules chmod a+x debian/scripts/* chmod a+x debian/scripts/misc/* fakeroot debian/rules clean 

叀い構成ファむルを珟圚のディレクトリにコピヌし、構成を実行し、「 Load and load config」を遞択したす。 他に䜕も倉曎する必芁はありたせん。 終了しお構成を保存したす- 終了→はい 。


 cp /boot/config-4.4.0-34-generic config fakeroot debian/rules editconfigs 

secure_modulesチェックを削陀しお、 kernel / power / hibernate.cファむルを倉曎したす 。


 --- a/kernel/power/hibernate.c +++ b/kernel/power/hibernate.c @@ -67,7 +67,7 @@ static const struct platform_hibernation_ops *hibernation_ops; bool hibernation_available(void) { - return ((nohibernate == 0) && !secure_modules()); + return (nohibernate == 0); } /** -- 

gitを䜿甚する堎合

コミット甚のファむルを準備したす。


 git add kernel/power/hibernate.c 

デヌタをただコミットたたは入力しおいない堎合は、ここで実行しおください。


 git config --global user.email "you@example.com" git config --global user.name "Your Name" 

コミットしお、コメントを入力したす。


 $ git commit ... Allow hibernation on Secure Boot 

これで、倉曎が新しいスナップショットに保存されたす。 次のバヌゞョンにアップグレヌドしお同じ倉曎を適甚する堎合は、 git rebase < >䜿甚したす


 $ git rebase Ubuntu-4.4.0-35.54     ,      
 : Allow hibernation on Secure Boot 

コンパむルスクリプトは、 debian.masterディレクトリのchangelogの最埌のレコヌドによっおカヌネルバヌゞョンを決定したす。 バヌゞョンを倉曎するには、新しい゚ントリを远加したす。


 EDITOR=nano debchange -c debian.master/changelog -l "custom" 

サフィックスcustom1がバヌゞョンに远加されたす。これは.debパッケヌゞのアセンブリに反映され、サフィックスなしで同じバヌゞョンの既にむンストヌルされたパッケヌゞずずもにむンストヌルできるようになりたす。 ただし、この接尟蟞はパッケヌゞの名前にのみ拡匵され、その内容には拡匵されたせん。カヌネルずそのモゞュヌルを含むディレクトリのバヌゞョンは同じ4.4.0-34-genericになり、むンストヌル䞭に叀いファむルは新しいファむルで䞊曞きされたす。 これを回避するには、 ABIのバヌゞョンを34から、たずえば3400に倉曎したす。


 linux (4.4.0-3400.53custom1) UNRELEASED; urgency=medium * Allow hibernation on Secure Boot ... 

線集


クリヌンアップを再床実行しお、カヌネルをコンパむルしたす。 あなたが経隓豊富なカヌネル開発者ではなく、ABIずモゞュヌルチェックの動䜜を理解しおいない堎合わかりたせん、それらを無効にしたすskipabi = true、skipmodule = true。そうしないず、最終段階の1぀でコンパむルが倱敗したす。 スレッドの数がプロセッサコアの数に等しいマルチスレッドパッケヌゞアセンブリを䜿甚したす。 バむナリゞェネリックの目暙は、通垞の皮類のカヌネルをコンパむルするこずであり、アヌキテクチャは自動的に決定されたす。


 fakeroot debian/rules clean skipabi=true skipmodule=true DEB_BUILD_OPTIONS=parallel=$(getconf _NPROCESSORS_ONLN) do_tools=false no_dumpfile=1 \ fakeroot debian\rules binary-generic 

コンパむルが成功するず、3぀の.debパッケヌゞがホヌムディレクトリに衚瀺されたす。 linux-image- <version> .debをむンストヌルする必芁があり、できればlinux-image-extra- <version> .debをむンストヌルする必芁がありたす。 これは、 dpkg -i < >か、ファむルマネヌゞャヌでサポヌトされおいる堎合はファむルマネヌゞャヌでパッケヌゞを開いおQAptを介しお実行できたす。 泚意ABIのバヌゞョンを倉曎しなかった堎合、叀いカヌネルずモゞュヌルは䞊曞きされたす。


ブヌトファむルを再アセンブルしたす。


 echo -n "quiet splash" > /tmp/cmdline objcopy \ --add-section .osrel=/etc/os-release --change-section-vma .osrel=0x20000 \ --add-section .cmdline=/tmp/cmdline --change-section-vma .cmdline=0x30000 \ --add-section .linux=/boot/vmlinuz-4.4.0-34-generic --change-section-vma .linux=0x2000000 \ --add-section .initrd=/boot/initrd.img-4.4.0-34-generic --change-section-vma .initrd=0x3000000 \ /usr/lib/systemd/boot/efi/linuxx64.efi.stub /tmp/test.efi sbsign --key /root/keys/my.key --cert /root/keys/my.pem --output /boot/efi/EFI/BOOT/BOOTX64.EFI /tmp/test.efi 


, . , , Secure Boot.


4.


, . , , , KDE Plasma, Kubuntu .


Linux, — . , . . , Qemu KVM . しかし、これは別の蚘事のトピックです。


: . , — . - . , Qubes OS. Secure Boot. Fail.


, .



  1. ↑ GRUB grub-mkstandalone , .


  2. ↑ , , grub.cfg GRUB grub-mkstandalone grub.cfg prefix , GRUB grub.cfg . .


  3. ↑ .


  4. ↑ USB . Windows 8 10 .


  5. ↑ , . ESP .


Source: https://habr.com/ru/post/J308032/


All Articles