<rss
      xmlns:atom="http://www.w3.org/2005/Atom"
      xmlns:media="http://search.yahoo.com/mrss/"
      xmlns:content="http://purl.org/rss/1.0/modules/content/"
      xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd"
      xmlns:dc="http://purl.org/dc/elements/1.1/"
      version="2.0"
    >
      <channel>
        <title><![CDATA[Block of Vaz]]></title>
        <description><![CDATA[Random thought of a System Engineer]]></description>
        <link>https://blog.siamstr.com/tag/linux/</link>
        <atom:link href="https://blog.siamstr.com/tag/linux/rss/" rel="self" type="application/rss+xml"/>
        <itunes:new-feed-url>https://blog.siamstr.com/tag/linux/rss/</itunes:new-feed-url>
        <itunes:author><![CDATA[VΔz]]></itunes:author>
        <itunes:subtitle><![CDATA[Random thought of a System Engineer]]></itunes:subtitle>
        <itunes:type>episodic</itunes:type>
        <itunes:owner>
          <itunes:name><![CDATA[VΔz]]></itunes:name>
          <itunes:email><![CDATA[VΔz]]></itunes:email>
        </itunes:owner>
            
      <pubDate>Fri, 04 Apr 2025 08:42:17 GMT</pubDate>
      <lastBuildDate>Fri, 04 Apr 2025 08:42:17 GMT</lastBuildDate>
      
      <itunes:image href="https://image.nostr.build/ba269bb842d8e1c6ada4ea3f9203aa570f1610cceeaca6a35c281f28274a914a.jpg" />
      <image>
        <title><![CDATA[Block of Vaz]]></title>
        <link>https://blog.siamstr.com/tag/linux/</link>
        <url>https://image.nostr.build/ba269bb842d8e1c6ada4ea3f9203aa570f1610cceeaca6a35c281f28274a914a.jpg</url>
      </image>
      <item>
      <title><![CDATA[ตั้งค่า Dark Theme สำหรับสาย Tilling Window Manager: darkman]]></title>
      <description><![CDATA[หากใครลองใช้ Linux แบบ Custom Windows Manger เองอย่าง Sway / i3 / bspwm จะทราบดีว่าการตั้งค่า Theme นั้นค่อนข้างยุ่งยาก และต้องจัดการเองทุกอย่างตั้งแต่หา Theme ที่จะใช้ บทความนี้จะใช้ `darkman` มาช่วยให้เราตั้งค่า Theme ได้สะดวกยิ่งขึ้น!]]></description>
             <itunes:subtitle><![CDATA[หากใครลองใช้ Linux แบบ Custom Windows Manger เองอย่าง Sway / i3 / bspwm จะทราบดีว่าการตั้งค่า Theme นั้นค่อนข้างยุ่งยาก และต้องจัดการเองทุกอย่างตั้งแต่หา Theme ที่จะใช้ บทความนี้จะใช้ `darkman` มาช่วยให้เราตั้งค่า Theme ได้สะดวกยิ่งขึ้น!]]></itunes:subtitle>
      <pubDate>Fri, 04 Apr 2025 08:42:17 GMT</pubDate>
      <link>https://blog.siamstr.com/post/gg-5vprd4cvzvqxjswqvc/</link>
      <comments>https://blog.siamstr.com/post/gg-5vprd4cvzvqxjswqvc/</comments>
      <guid isPermaLink="false">naddr1qq2kw3edx4m8qunyx33hvknk29vx5u6hw9myxq3qvaz88a5zhsqsrj220vh5vdnpjsu53msm34hzvcrh27x5d7zeav7qxpqqqp65wlw4t8u</guid>
      <category>siamstr</category>
      
        <media:content url="https://i.kym-cdn.com/photos/images/original/001/812/989/630.gif" medium="image"/>
        <enclosure 
          url="https://i.kym-cdn.com/photos/images/original/001/812/989/630.gif" length="0" 
          type="image/gif" 
        />
      <noteId>naddr1qq2kw3edx4m8qunyx33hvknk29vx5u6hw9myxq3qvaz88a5zhsqsrj220vh5vdnpjsu53msm34hzvcrh27x5d7zeav7qxpqqqp65wlw4t8u</noteId>
      <npub>npub1vaz88a5zhsqsrj220vh5vdnpjsu53msm34hzvcrh27x5d7zeav7qm45t60</npub>
      <dc:creator><![CDATA[VΔz]]></dc:creator>
      <content:encoded><![CDATA[<h2>darkman คืออะไร</h2>
<p><strong>Darkman</strong> เป็นโปรแกรมที่ช่วยควบคุมการเปลี่ยนโหมดสีของเดสก์ท็อประหว่างโหมดมืดและโหมดสว่างบนระบบปฏิบัติการ Unix-like. โปรแกรมนี้จะทำงานในเบื้องหลัง(background process) และสามารถตั้งค่าให้เปลี่ยนไปใช้โหมดมืดเมื่อพระอาทิตย์ตก หรือเปลี่ยนกลับไปใช้โหมดสว่างเมื่อพระอาทิตย์ขึ้นได้</p>
<h2>การทำงานของ Darkman</h2>
<p>เรียกใช้ผ่าน systemd service หรือคำสั่ง <code>darkman run</code> โดยตรงได้เลย</p>
<ol>
<li><strong>การตั้งค่าโหมด</strong>: Darkman สามารถตั้งค่าโหมดปัจจุบันเป็นโหมดมืดหรือโหมดสว่างได้ด้วยคำสั่ง <code>darkman set &lt;light|dark&gt;</code>.</li>
<li><strong>การตรวจสอบโหมดปัจจุบัน</strong>: สามารถตรวจสอบโหมดปัจจุบันได้ด้วยคำสั่ง <code>darkman get</code>.</li>
<li><strong>การสลับโหมด</strong>: สามารถสลับโหมดระหว่างโหมดมืดและโหมดสว่างได้ด้วยคำสั่ง <code>darkman toggle</code>.</li>
<li><strong>การทำงานอัตโนมัติ</strong>: Darkman จะทำงานอัตโนมัติโดยใช้ข้อมูลตำแหน่งที่ตั้งของระบบเพื่อกำหนดเวลาพระอาทิตย์ขึ้นและตก.</li>
<li><strong>การปรับแต่ง</strong>: สามารถเพิ่มสคริปต์เพื่อปรับแต่งการทำงานของโปรแกรมให้เข้ากับแอปพลิเคชันต่างๆ ได้.</li>
</ol>
<h2>การตั้งค่า darkman</h2>
<ol>
<li>สร้างไฟล์ <code>config.yaml</code> ในโฟลเดอร์ <code>~/.config/darkman/</code></li>
</ol>
<pre><code class="language-yaml">lat: 13.7563
lng: 100.5018 # ตำแหน่งกรุงเทพ
usegeoclue: false
dbusserver: true
portal: true
</code></pre>
<ol start="2">
<li>การตั้งค่า portal สำหรับ Darkman</li>
</ol>
<p>จะช่วยให้โปรแกรมสามารถเปลี่ยนโหมดสีของเดสก์ท็อปได้โดยใช้ XDG settings portal API.</p>
<p>2.1 สร้างไฟล์ portals.conf ในโฟลเดอร์ ~/.config/xdg-desktop-portal/</p>
<pre><code class="language-conf">[preferred]
org.freedesktop.impl.portal.Settings=darkman
</code></pre>
<p>2.1 รีสตาร์ท service xdg-desktop-portal เพื่อให้การตั้งค่าใหม่มีผล:</p>
<pre><code class="language-bash">systemctl --user restart xdg-desktop-portal
</code></pre>
<p>การตั้งค่านี้จะช่วยให้แอปพลิเคชันต่างๆ บนเดสก์ท็อปสามารถอ่านค่าโหมดสีจาก Darkman และปรับเปลี่ยนตามที่กำหนด.</p>
<ol start="3">
<li>Custom executables</li>
</ol>
<p>ใน Darkman สามารถเพิ่มการทำงานเพิ่มเติมเมื่อมีการเปลี่ยนโหมดสีของเดสก์ท็อป โดยการวางสคริปต์หรือโปรแกรมที่ต้องการในไดเรกทอรีที่กำหนด</p>
<p><strong>ไดเรกทอรีสำหรับ Custom executables</strong>:</p>
<ul>
<li><code>$XDG_DATA_DIRS/dark-mode.d/</code>: สำหรับสคริปต์ที่ต้องการรันเมื่อเปลี่ยนไปใช้โหมดมืด</li>
<li><code>$XDG_DATA_DIRS/light-mode.d/</code>: สำหรับสคริปต์ที่ต้องการรันเมื่อเปลี่ยนไปใช้โหมดสว่าง</li>
</ul>
<p><strong>ตัวอย่างการใช้งาน Custom executables</strong>:</p>
<ol>
<li><strong>สร้างสคริปต์สำหรับโหมดมืด</strong>:<ul>
<li>สร้างไฟล์ <code>set_dark_mode.sh</code> ในไดเรกทอรี <code>$XDG_DATA_DIRS/dark-mode.d/</code></li>
<li>เพิ่มเนื้อหาดังนี้:</li>
</ul>
</li>
</ol>
<pre><code class="language-bash">#!/bin/bash
# ตัวอย่างสคริปต์สำหรับโหมดมืด
gsettings set org.gnome.desktop.interface gtk-theme "Adwaita-dark"
notify-send "Dark Mode Activated"
</code></pre>
<ol start="2">
<li><strong>สร้างสคริปต์สำหรับโหมดสว่าง</strong>:<ul>
<li>สร้างไฟล์ <code>set_light_mode.sh</code> ในไดเรกทอรี <code>$XDG_DATA_DIRS/light-mode.d/</code></li>
<li>เพิ่มเนื้อหาดังนี้:</li>
</ul>
</li>
</ol>
<pre><code class="language-bash">#!/bin/bash
# ตัวอย่างสคริปต์สำหรับโหมดสว่าง
gsettings set org.gnome.desktop.interface gtk-theme "Adwaita"
notify-send "Light Mode Activated"
</code></pre>
<ol start="3">
<li><strong>ตั้งค่าสิทธิ์การรันสคริปต์</strong>:<ul>
<li>ตั้งค่าสิทธิ์ให้สคริปต์สามารถรันได้:</li>
</ul>
</li>
</ol>
<pre><code class="language-bash">chmod +x $XDG_DATA_DIRS/dark-mode.d/set_dark_mode.sh
chmod +x $XDG_DATA_DIRS/light-mode.d/set_light_mode.sh
</code></pre>
<p>เมื่อ Darkman เปลี่ยนโหมด สคริปต์เหล่านี้จะถูกเรียกใช้งานตามที่กำหนด</p>
<h3>การแก้ไขหากไม่พบ XDG_DATA_DIRS</h3>
<p>หากไม่พบตัวแปร <code>XDG_DATA_DIRS</code> คุณสามารถสร้างไดเรกทอรีที่จำเป็นเองได้ตามต้องการ โดยปกติแล้ว <code>XDG_DATA_DIRS</code> จะประกอบด้วยไดเรกทอรีเหล่านี้:</p>
<ul>
<li><code>~/.local/share/</code></li>
<li><code>/usr/local/share/</code></li>
<li><code>/usr/share/</code></li>
</ul>
<p>คุณสามารถสร้างไดเรกทอรีเหล่านี้และเพิ่มสคริปต์ของคุณได้ตามนี้:</p>
<ol>
<li><strong>สร้างไดเรกทอรี</strong>:<ul>
<li>สร้างไดเรกทอรีสำหรับโหมดมืดและโหมดสว่าง:</li>
</ul>
</li>
</ol>
<pre><code class="language-bash">mkdir -p ~/.local/share/dark-mode.d
mkdir -p ~/.local/share/light-mode.d
</code></pre>
<p><a href="https://github.com/vazw/dotfiles/tree/Void(wayland)/darkman">ตัวอย่าง Script ที่ผมใช้</a></p>
<ol start="2">
<li>ทำการ <strong>export XDG_DATA_DIRS</strong>:</li>
</ol>
<p>โดยทั่วไปเราสามารถตั้งตัวแปร Environments ต่าง ๆ ได้ที่ <code>~/.profile</code> และตัวแปรทั้งหมดจะถูกโหลดหลังจากเรา <strong>Login</strong></p>
<pre><code class="language-bash">export XDG_DATA_DIRS=$HOME/.local/share:/usr/local/share:/usr/share:$XDG_DATA_DIRS
</code></pre>
<p>Source: <a href="https://gitlab.com/WhyNotHugo/darkman">darkman</a></p>
]]></content:encoded>
      <itunes:author><![CDATA[VΔz]]></itunes:author>
      <itunes:summary><![CDATA[<h2>darkman คืออะไร</h2>
<p><strong>Darkman</strong> เป็นโปรแกรมที่ช่วยควบคุมการเปลี่ยนโหมดสีของเดสก์ท็อประหว่างโหมดมืดและโหมดสว่างบนระบบปฏิบัติการ Unix-like. โปรแกรมนี้จะทำงานในเบื้องหลัง(background process) และสามารถตั้งค่าให้เปลี่ยนไปใช้โหมดมืดเมื่อพระอาทิตย์ตก หรือเปลี่ยนกลับไปใช้โหมดสว่างเมื่อพระอาทิตย์ขึ้นได้</p>
<h2>การทำงานของ Darkman</h2>
<p>เรียกใช้ผ่าน systemd service หรือคำสั่ง <code>darkman run</code> โดยตรงได้เลย</p>
<ol>
<li><strong>การตั้งค่าโหมด</strong>: Darkman สามารถตั้งค่าโหมดปัจจุบันเป็นโหมดมืดหรือโหมดสว่างได้ด้วยคำสั่ง <code>darkman set &lt;light|dark&gt;</code>.</li>
<li><strong>การตรวจสอบโหมดปัจจุบัน</strong>: สามารถตรวจสอบโหมดปัจจุบันได้ด้วยคำสั่ง <code>darkman get</code>.</li>
<li><strong>การสลับโหมด</strong>: สามารถสลับโหมดระหว่างโหมดมืดและโหมดสว่างได้ด้วยคำสั่ง <code>darkman toggle</code>.</li>
<li><strong>การทำงานอัตโนมัติ</strong>: Darkman จะทำงานอัตโนมัติโดยใช้ข้อมูลตำแหน่งที่ตั้งของระบบเพื่อกำหนดเวลาพระอาทิตย์ขึ้นและตก.</li>
<li><strong>การปรับแต่ง</strong>: สามารถเพิ่มสคริปต์เพื่อปรับแต่งการทำงานของโปรแกรมให้เข้ากับแอปพลิเคชันต่างๆ ได้.</li>
</ol>
<h2>การตั้งค่า darkman</h2>
<ol>
<li>สร้างไฟล์ <code>config.yaml</code> ในโฟลเดอร์ <code>~/.config/darkman/</code></li>
</ol>
<pre><code class="language-yaml">lat: 13.7563
lng: 100.5018 # ตำแหน่งกรุงเทพ
usegeoclue: false
dbusserver: true
portal: true
</code></pre>
<ol start="2">
<li>การตั้งค่า portal สำหรับ Darkman</li>
</ol>
<p>จะช่วยให้โปรแกรมสามารถเปลี่ยนโหมดสีของเดสก์ท็อปได้โดยใช้ XDG settings portal API.</p>
<p>2.1 สร้างไฟล์ portals.conf ในโฟลเดอร์ ~/.config/xdg-desktop-portal/</p>
<pre><code class="language-conf">[preferred]
org.freedesktop.impl.portal.Settings=darkman
</code></pre>
<p>2.1 รีสตาร์ท service xdg-desktop-portal เพื่อให้การตั้งค่าใหม่มีผล:</p>
<pre><code class="language-bash">systemctl --user restart xdg-desktop-portal
</code></pre>
<p>การตั้งค่านี้จะช่วยให้แอปพลิเคชันต่างๆ บนเดสก์ท็อปสามารถอ่านค่าโหมดสีจาก Darkman และปรับเปลี่ยนตามที่กำหนด.</p>
<ol start="3">
<li>Custom executables</li>
</ol>
<p>ใน Darkman สามารถเพิ่มการทำงานเพิ่มเติมเมื่อมีการเปลี่ยนโหมดสีของเดสก์ท็อป โดยการวางสคริปต์หรือโปรแกรมที่ต้องการในไดเรกทอรีที่กำหนด</p>
<p><strong>ไดเรกทอรีสำหรับ Custom executables</strong>:</p>
<ul>
<li><code>$XDG_DATA_DIRS/dark-mode.d/</code>: สำหรับสคริปต์ที่ต้องการรันเมื่อเปลี่ยนไปใช้โหมดมืด</li>
<li><code>$XDG_DATA_DIRS/light-mode.d/</code>: สำหรับสคริปต์ที่ต้องการรันเมื่อเปลี่ยนไปใช้โหมดสว่าง</li>
</ul>
<p><strong>ตัวอย่างการใช้งาน Custom executables</strong>:</p>
<ol>
<li><strong>สร้างสคริปต์สำหรับโหมดมืด</strong>:<ul>
<li>สร้างไฟล์ <code>set_dark_mode.sh</code> ในไดเรกทอรี <code>$XDG_DATA_DIRS/dark-mode.d/</code></li>
<li>เพิ่มเนื้อหาดังนี้:</li>
</ul>
</li>
</ol>
<pre><code class="language-bash">#!/bin/bash
# ตัวอย่างสคริปต์สำหรับโหมดมืด
gsettings set org.gnome.desktop.interface gtk-theme "Adwaita-dark"
notify-send "Dark Mode Activated"
</code></pre>
<ol start="2">
<li><strong>สร้างสคริปต์สำหรับโหมดสว่าง</strong>:<ul>
<li>สร้างไฟล์ <code>set_light_mode.sh</code> ในไดเรกทอรี <code>$XDG_DATA_DIRS/light-mode.d/</code></li>
<li>เพิ่มเนื้อหาดังนี้:</li>
</ul>
</li>
</ol>
<pre><code class="language-bash">#!/bin/bash
# ตัวอย่างสคริปต์สำหรับโหมดสว่าง
gsettings set org.gnome.desktop.interface gtk-theme "Adwaita"
notify-send "Light Mode Activated"
</code></pre>
<ol start="3">
<li><strong>ตั้งค่าสิทธิ์การรันสคริปต์</strong>:<ul>
<li>ตั้งค่าสิทธิ์ให้สคริปต์สามารถรันได้:</li>
</ul>
</li>
</ol>
<pre><code class="language-bash">chmod +x $XDG_DATA_DIRS/dark-mode.d/set_dark_mode.sh
chmod +x $XDG_DATA_DIRS/light-mode.d/set_light_mode.sh
</code></pre>
<p>เมื่อ Darkman เปลี่ยนโหมด สคริปต์เหล่านี้จะถูกเรียกใช้งานตามที่กำหนด</p>
<h3>การแก้ไขหากไม่พบ XDG_DATA_DIRS</h3>
<p>หากไม่พบตัวแปร <code>XDG_DATA_DIRS</code> คุณสามารถสร้างไดเรกทอรีที่จำเป็นเองได้ตามต้องการ โดยปกติแล้ว <code>XDG_DATA_DIRS</code> จะประกอบด้วยไดเรกทอรีเหล่านี้:</p>
<ul>
<li><code>~/.local/share/</code></li>
<li><code>/usr/local/share/</code></li>
<li><code>/usr/share/</code></li>
</ul>
<p>คุณสามารถสร้างไดเรกทอรีเหล่านี้และเพิ่มสคริปต์ของคุณได้ตามนี้:</p>
<ol>
<li><strong>สร้างไดเรกทอรี</strong>:<ul>
<li>สร้างไดเรกทอรีสำหรับโหมดมืดและโหมดสว่าง:</li>
</ul>
</li>
</ol>
<pre><code class="language-bash">mkdir -p ~/.local/share/dark-mode.d
mkdir -p ~/.local/share/light-mode.d
</code></pre>
<p><a href="https://github.com/vazw/dotfiles/tree/Void(wayland)/darkman">ตัวอย่าง Script ที่ผมใช้</a></p>
<ol start="2">
<li>ทำการ <strong>export XDG_DATA_DIRS</strong>:</li>
</ol>
<p>โดยทั่วไปเราสามารถตั้งตัวแปร Environments ต่าง ๆ ได้ที่ <code>~/.profile</code> และตัวแปรทั้งหมดจะถูกโหลดหลังจากเรา <strong>Login</strong></p>
<pre><code class="language-bash">export XDG_DATA_DIRS=$HOME/.local/share:/usr/local/share:/usr/share:$XDG_DATA_DIRS
</code></pre>
<p>Source: <a href="https://gitlab.com/WhyNotHugo/darkman">darkman</a></p>
]]></itunes:summary>
      <itunes:image href="https://i.kym-cdn.com/photos/images/original/001/812/989/630.gif"/>
      </item>
      
      <item>
      <title><![CDATA[มาทำ Secure Boot บน Linux กันเถอะ]]></title>
      <description><![CDATA[ไหนมีใครใช้ Linux บ้าง???]]></description>
             <itunes:subtitle><![CDATA[ไหนมีใครใช้ Linux บ้าง???]]></itunes:subtitle>
      <pubDate>Sun, 23 Jun 2024 10:15:02 GMT</pubDate>
      <link>https://blog.siamstr.com/post/1klj6-rzdcev_jaakoli3/</link>
      <comments>https://blog.siamstr.com/post/1klj6-rzdcev_jaakoli3/</comments>
      <guid isPermaLink="false">naddr1qq2nz66vdgmz65j6g33k2ajlffqkz660f35nxq3qvaz88a5zhsqsrj220vh5vdnpjsu53msm34hzvcrh27x5d7zeav7qxpqqqp65wvzj7x2</guid>
      <category>siamstr</category>
      
        <media:content url="https://image.nostr.build/55e82d0b3a6bd7157e9a6baa0558cbb230c03c78f1d64ef4608c020ea20c9cc7.jpg" medium="image"/>
        <enclosure 
          url="https://image.nostr.build/55e82d0b3a6bd7157e9a6baa0558cbb230c03c78f1d64ef4608c020ea20c9cc7.jpg" length="0" 
          type="image/jpeg" 
        />
      <noteId>naddr1qq2nz66vdgmz65j6g33k2ajlffqkz660f35nxq3qvaz88a5zhsqsrj220vh5vdnpjsu53msm34hzvcrh27x5d7zeav7qxpqqqp65wvzj7x2</noteId>
      <npub>npub1vaz88a5zhsqsrj220vh5vdnpjsu53msm34hzvcrh27x5d7zeav7qm45t60</npub>
      <dc:creator><![CDATA[VΔz]]></dc:creator>
      <content:encoded><![CDATA[<h2>Secure Boot คืออะไร?</h2>
<p>Secure Boot เป็นฟังก์ชั่นของระบบไบออส UEFI ที่ป้องกันการติดตั้งไฟล์ระบบที่ไม่ได้รับการอนุมัติจากผู้ผลิดเมนบอร์ด<br>โดยเมื่อระบบบูต, ไบออส UEFI จะตรวจหาลายเซ็นดิจิตอลในไฟล์บูตของระบบปฏิบัติการ<br>หากตรวจพบและเช็คความถูกต้องผ่านหมด ก็จะทำการบูตระบบปฏิบัติการนั้นขึ้นมา<br>แต่ถ้าไม่พบ, ไม่ถูกต้อง หรือลายเซ็นมาจากเจ้าที่ไม่รู้จัก ก็จะปฏิเสธการบูตระบบนั้น</p>
<p>ฟีเจอร์นี้มีไว้ในกรณีที่ระบบปฏิบัติการที่มีรูโหว่แล้วถูกไวรัสเขียนทับไฟล์ระบบที่ใช้บูต หรือถูกผู้อื่นเข้าถึงคอมของเราแล้ววางไฟล์บูตที่มีช่องโหว่ให้โจมตีได้<br>เมื่อผู้ใช้รีสตาร์ต ระบบจะหยุดทำงานที่จอดำเพื่อไม่ให้ไวรัสก่อความเสียหายเพิ่มเติม หรือถูกโจมตีระบบ</p>
<h2>จำเป็นแค่ไหน?</h2>
<p>หากว่าระบของเราไม่ได้เข้ารหัสแบบ Full-disk encryption แล้วนั้น ตัว secure boot ไม่ได้จำเป็น หรือไม่มีประโยชน์ใด ๆ เลย นอกจากให้ Microsoft บังคับห้ามเราลง ระบบประติบัติการที่เราต้องการเท่านั้น (ปิด secure boot ใน bios ก็สามารถเข้าระบบได้เลย)</p>
<p>แต่สำหรับระบบที่เข้ารหัสไว้นั้น จะช่วยเพิ่มความปลอดภัยไปอีกระดับ เช่นหากโดยขโมยคอมไป แม้เขาจะพยายามแก้ไขไฟล์ boot ก็ไม่สามารถเข้าถึงระบบเราได้อยู่ดี มีเดียวทางเดียวคือล้างข้อมูลทั้งหมดทิ้งไปเท่านั้น ถึงจะใช้งานคอมเครื่องนั้น ๆ ได้ แม้จะปิด secure boot ใน bios แล้วก็ตาม</p>
<p>ทำให้ระบบ Linux ที่เข้ารหัสไว้ ปลอดภัยขึ้นอีกชั้นนึง</p>
<h2>Boot Loader</h2>
<pre><code>BIOS &gt; BOOT LOADER &gt; KERNEL &gt; INIT SYSTEM
</code></pre>
<p>ในระบบประติบัติการ Linux นั้น มีตัวเลือกสำหรับ Boot Loader ที่หลากหลาย อย่างระบบใหม่ ๆ จะใช้ systemd-boot ที่สะดวกใช้งานง่าย ปรับอะไรได้ไม่มากนัก<br>โดยตัวที่ใช้เยอะที่สุดคงจะเป็น GRUB ซึ่งสามารถปรับแต่งได้แทบทุก logic ของการบูตเข้าระบบของเรา และในบทความนี้ เราจะใช้ GRUB ในการทำ Secure Boot</p>
<p>โดยก่อนหน้านั้นเราต้องแบ่ง partition ส่วนนึงไปให้ <code>/boot/efi</code> ซึ่งเป็น filesystem แบบ fat ทั่ว ๆ ไป สำหรับ ให้ bios อ่านไฟล์ boot ของเราได้</p>
<pre><code class="language-sh">❯ sudo fdisk -l
Disk /dev/nvme0n1: 476.94 GiB, 512110190592 bytes, 1000215216 sectors
Disk model: WD PC SN735 SDBPNHH-512G-1002
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: 9A5798B5-DC04-4770-A26B-3A489642CF32

Device           Start        End   Sectors   Size Type
/dev/nvme0n1p1    2048    2099199   2097152     1G EFI System
/dev/nvme0n1p2 2099200 1000214527 998115328 475.9G Linux filesystem
</code></pre>
<p>และอีกส่วน จะใช้ LVM (Logical Volume Management) ในการสร้าง Volume Group (VG) บน SSD ของผม สำหรับติดตั้งระบบที่เข้ารหัสไว้ โดยจะแบ่งพื้นที่ส่วนนึงไปเป็น <code>swap</code> partition ใช้สำหรับการเก็บข้อมูลตอนที่เราพับจอ หรือเข้าโหมด sleep<br>ที่เหลือทั้งหมด ก็จะเป็นพื้นที่ติดตั้ง Linux ของผม (disk นี้ผมไม่ได้แยก <code>/home</code>(user's home) กับ <code>/</code>(root) ไว้คนละ Partition เพราะว่าผมชอบทำ root เต็มบ่อย ๆ ฮาาา)</p>
<pre><code class="language-sh">❯ sudo vgscan
  Found volume group "vg0" using metadata type lvm2

❯ sudo lvscan
  ACTIVE            '/dev/vg0/swap' [17.00 GiB] inherit
  ACTIVE            '/dev/vg0/void' [458.93 GiB] inherit
</code></pre>
<p>สำหรับวิธีการติดตั้ง Linux แบบเข้ารหัสนั้น มีอยู่ตามคู่มือตอนติดตั้ง Linux เกือบทุกตัวอยู่แล้ว ไม่ต้อง งง ยิ่งพวกที่เป็น GUI install อย่าง Fedora, Ubuntu บลา ๆ นั้นแค่คลิก ๆ ก็ทำได้แล้ว (แถมทำ Secure Boot ได้เลยอีกต่างหาก)</p>
<p>โดยที่ระบบที่ผมใช้ในบทความนี้ คือ <a href="https://voidlinux.org/">VoidLinux</a> ซี่งเป็นระบบง่าย ๆ ไม่มี systemd ให้กวนใจ</p>
<p>ส่วนของ software ที่ใช้จะมี</p>
<ol>
<li>grub</li>
<li>sbctl<br>และ bash script เล็กน้อย ในการทำ kernel hook สำหรับการ Sign ไฟล์ boot ของเราอัตโนมัติหลังจาก Update</li>
</ol>
<h1>เริ่มกันเลย!</h1>
<p>อย่างแรก ตั้งค่า SecureBoot ใน Bios เป็น Setup-Mode ให้เรียบร้อยก่อน<br> จากนั้นต้องตั้งค่า Grub กันใหม่ โดยเพิ่ม module <code>tpm</code> และ <code>--disable-shim-lock</code> (สำหรับ Microsoft's CA) เผื่อกรณีที่อยากทำ Dual Boot เข้า Windows ด้วย</p>
<pre><code class="language-sh">sudo grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=void --modules="tpm" --disable-shim-lock
</code></pre>
<p>จากนั้นก็มา Gen ไฟล์ตั้งค่าที่เพิ่งทำไปด้วยคำสั่ง</p>
<pre><code class="language-sh">sudo grub-mkconfig -o /boot/grub/grub.cfg
</code></pre>
<p>แล้วก็ติดตั้ง sbctl ให้เรียบร้อย </p>
<pre><code class="language-sh">sudo xbps-install sbctl
</code></pre>
<p>จากนั้นลองเช็คด้วยคำสั่ง <code>sbctl status</code> ก็จะแสดงผลประมาณนี้</p>
<pre><code class="language-sh">❯ sbctl status
Installed:      ✓ sbctl is installed
.....
</code></pre>
<p>จากนั้นเราก็จะสร้าง Key สำหรับการ Sign ไฟล์ Boot ของเรา</p>
<pre><code class="language-sh">sudo sbctl create-keys
</code></pre>
<p>พอได้คีย์แล้ว <code>enroll-keys</code> ต่อ คำสั่งนี้จะสร้างรหัสสำหรับ Verify ใน Bios ให้เราหลังจากการตั้ง Setup-Mode ใน Secure Boot (<code>-m</code> คือการเพิ่ม Cert ของ Microsoft ไปด้วย เผื่อ Dual Boot)</p>
<pre><code class="language-sh">sudo sbctl enroll-keys -m
</code></pre>
<p>หลังจากขั้นตอนนี้ก็ใช้คำสั่งดู status อีกรอบ<br>และใช้คำสั่ง <code>sudo sbctl verify</code> เพื่อดูว่าเราต้อง Sign ไฟล์ไหนบ้าง</p>
<pre><code class="language-sh">❯ sbctl status
Installed:      ✓ sbctl is installed
Owner GUID:     61bb7cf9-38bb-4ef5-94f6-960b095c9322
Setup Mode:     ✓ Disabled
Secure Boot:    ✓ Enabled
Vendor Keys:    microsoft
❯ sudo sbctl verify
Verifying file database and EFI images in /boot/efi..
✓ /boot/efi/EFI/void/grubx64.efi is signed
</code></pre>
<p>อย่างตัวอย่างข้างบนคือไฟล์เหล่านี้ได้ถูก sign เรียบร้อยแล้ว ก็สามารถ Boot ด้วย Secure Boot ได้เลย<br>หากไฟล์ไหนยังไม่ได้ Sign ก็จัดการด้วยคำสั่ง <code>sudo sbctl sign -s /ไฟล์พาท</code> เช่น</p>
<pre><code class="language-sh">sudo sbctl sign -s /boot/efi/EFI/void/grubx64.efi
</code></pre>
<p>แล้วก็ลอง <code>sudo sbctl verify</code> ดูว่า sign เรียบร้อยดีไหม<br>ถ้าเรียบร้อยแล้วก็สามารถ reboot ไปเปิด SecureBoot ดูได้เลย ว่า Boot เข้าระบบได้หรือไม่</p>
<p>และบางระบบก็ต้อง sign ไฟล์ kernel ด้วยเหมือนกัน อย่างระบบผม ต้อง sign <code>/boot/vmlinuz-{version}</code>  ด้วย ไม่งั้น Boot ไม่ได้</p>
<pre><code class="language-sh">❯ sudo sbctl sign -s /boot/vmlinuz-6.9.6_1

❯ sudo sbctl verify
Verifying file database and EFI images in /boot/efi...
✓ /boot/vmlinuz-6.9.6_1 is signed
✓ /boot/efi/EFI/void/grubx64.efi is signed
</code></pre>
<p>หลังจาก reboot ด้วย SecureBoot ได้เรียบร้อย เป็นอันเสร็จ<br>แต่อย่าลืมว่าถ้าระบบ Update เราต้องกลับมา Sign เองใหม่หรือเปล่า??</p>
<h2>Kernel Hook</h2>
<p>โดยทั่วไป ระบบ Linux จะมี Directory <code>/etc/kernel.d/post-install/</code> ซึ่งจะรวบรวมเอา Script สำหรับใช้หลังจาก Update ระบบเช่น ตัว Grub เอง ก็สร้างไฟล์ config ใหม่ทุกครั้งหลังจาก update kernel</p>
<pre><code class="language-sh">cat /etc/kernel.d/post-install/50-grub
#!/bin/sh
#
# Kernel hook for GRUB 2.
#
# Arguments passed to this script: $1 pkgname, $2 version.
#
PKGNAME="$1"
VERSION="$2"

export ZPOOL_VDEV_NAME_PATH=YES

if command -v grub-mkconfig &gt;/dev/null 2&gt;&amp;1; then
        if [ -d $ROOTDIR/boot/grub ]; then
                grub-mkconfig -o $ROOTDIR/boot/grub/grub.cfg
                exit $?
        fi
fi

exit 0
</code></pre>
<p>และสังเกตุว่า ไฟล์ทั้งหมดใน Directory นี้นั้น จะนำหน้าด้วยตัวเลข ซึ่งเป็นลำดับของการทำงานนั่นเอง โดยที่เลขน้อยกว่า จะถูกรันก่อน จนครบ</p>
<pre><code class="language-sh">❯ sudo ls /etc/kernel.d/post-install/ -l
10-dkms
 20-initramfs -&gt; ../../../usr/libexec/dracut/kernel-hook-postinst
 50-bootsize
50-efibootmgr
50-grub
</code></pre>
<p>เราก็จะทำการ Copy ไฟล์ <code>50-grub</code> มาเป็น templates ในการทำ kernel hook และตั้งชื่อว่า <code>60-sign</code> เพื่อให้แน่ใจว่า ทุกอย่างถูกติดตั้งไปก่อน แล้ว sign เป็นลำดับสุดท้าย</p>
<pre><code class="language-sh">sudo cp /etc/kernel.d/post-install/50-grub  /etc/kernel.d/post-install/60-sign
</code></pre>
<p>แล้วก็เข้าไปแก้ไขไฟล์</p>
<pre><code class="language-sh">sudo vi  /etc/kernel.d/post-install/60-sign
</code></pre>
<p>แล้วก็ปรับคำสั่งเป็น sbctl ให้เรียบร้อย<br>จะสังเกตุว่าผมได้ใช้ sign สองครั้ง คือ <code>grub config</code> และไฟล์ kernel <code>vmlinuz-</code> ที่มีเวอร์ชั่นตามท้าย</p>
<pre><code class="language-bash">#!/bin/sh
#
# Kernel post-install hook for surcue boot.
#
# Arguments passed to this script: $1 pkgname, $2 version.
#

PKGNAME="$1"
VERSION="$2"

if command -v sbctl &gt;/dev/null 2&gt;&amp;1; then
    if [ -d $ROOTDIR/boot/efi ]; then
        echo "Signing new packages v.$VERSION"
        sbctl sign -s /boot/efi/EFI/void/grubx64.efi
        sbctl sign -s /boot/vmlinuz-${VERSION}
        exit $?
    fi
fi

exit 0
</code></pre>
<p>เซฟไฟล์ และสุดท้าย ทำ permission ให้มัน excuteable หรือว่าให้โปรแกรมเรียยกทำงานได้</p>
<pre><code class="language-sh">sudo chmod +x  /etc/kernel.d/post-install/60-sign
</code></pre>
<p>เนื่องจากว่าบางระบบจะไม่ให้ไฟล์ script ใดๆ มาทำงานได้ตามใจชอบ<br>เราต้องควบคุมเองว่าไฟล์ไหนมี <code>สิทธ์</code> ที่จะทำงานได้ นั่นเอง</p>
<p>เพียงเท่านี้ เราก็จะมีระบบเข้ารหัสที่ปลอดภัยสุด ๆ ใครจะมาแอบเสียบแฟรชไดร์มาแก้ไขไฟล์ Boot วางยาเราไม่ได้ แน่นอน</p>
]]></content:encoded>
      <itunes:author><![CDATA[VΔz]]></itunes:author>
      <itunes:summary><![CDATA[<h2>Secure Boot คืออะไร?</h2>
<p>Secure Boot เป็นฟังก์ชั่นของระบบไบออส UEFI ที่ป้องกันการติดตั้งไฟล์ระบบที่ไม่ได้รับการอนุมัติจากผู้ผลิดเมนบอร์ด<br>โดยเมื่อระบบบูต, ไบออส UEFI จะตรวจหาลายเซ็นดิจิตอลในไฟล์บูตของระบบปฏิบัติการ<br>หากตรวจพบและเช็คความถูกต้องผ่านหมด ก็จะทำการบูตระบบปฏิบัติการนั้นขึ้นมา<br>แต่ถ้าไม่พบ, ไม่ถูกต้อง หรือลายเซ็นมาจากเจ้าที่ไม่รู้จัก ก็จะปฏิเสธการบูตระบบนั้น</p>
<p>ฟีเจอร์นี้มีไว้ในกรณีที่ระบบปฏิบัติการที่มีรูโหว่แล้วถูกไวรัสเขียนทับไฟล์ระบบที่ใช้บูต หรือถูกผู้อื่นเข้าถึงคอมของเราแล้ววางไฟล์บูตที่มีช่องโหว่ให้โจมตีได้<br>เมื่อผู้ใช้รีสตาร์ต ระบบจะหยุดทำงานที่จอดำเพื่อไม่ให้ไวรัสก่อความเสียหายเพิ่มเติม หรือถูกโจมตีระบบ</p>
<h2>จำเป็นแค่ไหน?</h2>
<p>หากว่าระบของเราไม่ได้เข้ารหัสแบบ Full-disk encryption แล้วนั้น ตัว secure boot ไม่ได้จำเป็น หรือไม่มีประโยชน์ใด ๆ เลย นอกจากให้ Microsoft บังคับห้ามเราลง ระบบประติบัติการที่เราต้องการเท่านั้น (ปิด secure boot ใน bios ก็สามารถเข้าระบบได้เลย)</p>
<p>แต่สำหรับระบบที่เข้ารหัสไว้นั้น จะช่วยเพิ่มความปลอดภัยไปอีกระดับ เช่นหากโดยขโมยคอมไป แม้เขาจะพยายามแก้ไขไฟล์ boot ก็ไม่สามารถเข้าถึงระบบเราได้อยู่ดี มีเดียวทางเดียวคือล้างข้อมูลทั้งหมดทิ้งไปเท่านั้น ถึงจะใช้งานคอมเครื่องนั้น ๆ ได้ แม้จะปิด secure boot ใน bios แล้วก็ตาม</p>
<p>ทำให้ระบบ Linux ที่เข้ารหัสไว้ ปลอดภัยขึ้นอีกชั้นนึง</p>
<h2>Boot Loader</h2>
<pre><code>BIOS &gt; BOOT LOADER &gt; KERNEL &gt; INIT SYSTEM
</code></pre>
<p>ในระบบประติบัติการ Linux นั้น มีตัวเลือกสำหรับ Boot Loader ที่หลากหลาย อย่างระบบใหม่ ๆ จะใช้ systemd-boot ที่สะดวกใช้งานง่าย ปรับอะไรได้ไม่มากนัก<br>โดยตัวที่ใช้เยอะที่สุดคงจะเป็น GRUB ซึ่งสามารถปรับแต่งได้แทบทุก logic ของการบูตเข้าระบบของเรา และในบทความนี้ เราจะใช้ GRUB ในการทำ Secure Boot</p>
<p>โดยก่อนหน้านั้นเราต้องแบ่ง partition ส่วนนึงไปให้ <code>/boot/efi</code> ซึ่งเป็น filesystem แบบ fat ทั่ว ๆ ไป สำหรับ ให้ bios อ่านไฟล์ boot ของเราได้</p>
<pre><code class="language-sh">❯ sudo fdisk -l
Disk /dev/nvme0n1: 476.94 GiB, 512110190592 bytes, 1000215216 sectors
Disk model: WD PC SN735 SDBPNHH-512G-1002
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: 9A5798B5-DC04-4770-A26B-3A489642CF32

Device           Start        End   Sectors   Size Type
/dev/nvme0n1p1    2048    2099199   2097152     1G EFI System
/dev/nvme0n1p2 2099200 1000214527 998115328 475.9G Linux filesystem
</code></pre>
<p>และอีกส่วน จะใช้ LVM (Logical Volume Management) ในการสร้าง Volume Group (VG) บน SSD ของผม สำหรับติดตั้งระบบที่เข้ารหัสไว้ โดยจะแบ่งพื้นที่ส่วนนึงไปเป็น <code>swap</code> partition ใช้สำหรับการเก็บข้อมูลตอนที่เราพับจอ หรือเข้าโหมด sleep<br>ที่เหลือทั้งหมด ก็จะเป็นพื้นที่ติดตั้ง Linux ของผม (disk นี้ผมไม่ได้แยก <code>/home</code>(user's home) กับ <code>/</code>(root) ไว้คนละ Partition เพราะว่าผมชอบทำ root เต็มบ่อย ๆ ฮาาา)</p>
<pre><code class="language-sh">❯ sudo vgscan
  Found volume group "vg0" using metadata type lvm2

❯ sudo lvscan
  ACTIVE            '/dev/vg0/swap' [17.00 GiB] inherit
  ACTIVE            '/dev/vg0/void' [458.93 GiB] inherit
</code></pre>
<p>สำหรับวิธีการติดตั้ง Linux แบบเข้ารหัสนั้น มีอยู่ตามคู่มือตอนติดตั้ง Linux เกือบทุกตัวอยู่แล้ว ไม่ต้อง งง ยิ่งพวกที่เป็น GUI install อย่าง Fedora, Ubuntu บลา ๆ นั้นแค่คลิก ๆ ก็ทำได้แล้ว (แถมทำ Secure Boot ได้เลยอีกต่างหาก)</p>
<p>โดยที่ระบบที่ผมใช้ในบทความนี้ คือ <a href="https://voidlinux.org/">VoidLinux</a> ซี่งเป็นระบบง่าย ๆ ไม่มี systemd ให้กวนใจ</p>
<p>ส่วนของ software ที่ใช้จะมี</p>
<ol>
<li>grub</li>
<li>sbctl<br>และ bash script เล็กน้อย ในการทำ kernel hook สำหรับการ Sign ไฟล์ boot ของเราอัตโนมัติหลังจาก Update</li>
</ol>
<h1>เริ่มกันเลย!</h1>
<p>อย่างแรก ตั้งค่า SecureBoot ใน Bios เป็น Setup-Mode ให้เรียบร้อยก่อน<br> จากนั้นต้องตั้งค่า Grub กันใหม่ โดยเพิ่ม module <code>tpm</code> และ <code>--disable-shim-lock</code> (สำหรับ Microsoft's CA) เผื่อกรณีที่อยากทำ Dual Boot เข้า Windows ด้วย</p>
<pre><code class="language-sh">sudo grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=void --modules="tpm" --disable-shim-lock
</code></pre>
<p>จากนั้นก็มา Gen ไฟล์ตั้งค่าที่เพิ่งทำไปด้วยคำสั่ง</p>
<pre><code class="language-sh">sudo grub-mkconfig -o /boot/grub/grub.cfg
</code></pre>
<p>แล้วก็ติดตั้ง sbctl ให้เรียบร้อย </p>
<pre><code class="language-sh">sudo xbps-install sbctl
</code></pre>
<p>จากนั้นลองเช็คด้วยคำสั่ง <code>sbctl status</code> ก็จะแสดงผลประมาณนี้</p>
<pre><code class="language-sh">❯ sbctl status
Installed:      ✓ sbctl is installed
.....
</code></pre>
<p>จากนั้นเราก็จะสร้าง Key สำหรับการ Sign ไฟล์ Boot ของเรา</p>
<pre><code class="language-sh">sudo sbctl create-keys
</code></pre>
<p>พอได้คีย์แล้ว <code>enroll-keys</code> ต่อ คำสั่งนี้จะสร้างรหัสสำหรับ Verify ใน Bios ให้เราหลังจากการตั้ง Setup-Mode ใน Secure Boot (<code>-m</code> คือการเพิ่ม Cert ของ Microsoft ไปด้วย เผื่อ Dual Boot)</p>
<pre><code class="language-sh">sudo sbctl enroll-keys -m
</code></pre>
<p>หลังจากขั้นตอนนี้ก็ใช้คำสั่งดู status อีกรอบ<br>และใช้คำสั่ง <code>sudo sbctl verify</code> เพื่อดูว่าเราต้อง Sign ไฟล์ไหนบ้าง</p>
<pre><code class="language-sh">❯ sbctl status
Installed:      ✓ sbctl is installed
Owner GUID:     61bb7cf9-38bb-4ef5-94f6-960b095c9322
Setup Mode:     ✓ Disabled
Secure Boot:    ✓ Enabled
Vendor Keys:    microsoft
❯ sudo sbctl verify
Verifying file database and EFI images in /boot/efi..
✓ /boot/efi/EFI/void/grubx64.efi is signed
</code></pre>
<p>อย่างตัวอย่างข้างบนคือไฟล์เหล่านี้ได้ถูก sign เรียบร้อยแล้ว ก็สามารถ Boot ด้วย Secure Boot ได้เลย<br>หากไฟล์ไหนยังไม่ได้ Sign ก็จัดการด้วยคำสั่ง <code>sudo sbctl sign -s /ไฟล์พาท</code> เช่น</p>
<pre><code class="language-sh">sudo sbctl sign -s /boot/efi/EFI/void/grubx64.efi
</code></pre>
<p>แล้วก็ลอง <code>sudo sbctl verify</code> ดูว่า sign เรียบร้อยดีไหม<br>ถ้าเรียบร้อยแล้วก็สามารถ reboot ไปเปิด SecureBoot ดูได้เลย ว่า Boot เข้าระบบได้หรือไม่</p>
<p>และบางระบบก็ต้อง sign ไฟล์ kernel ด้วยเหมือนกัน อย่างระบบผม ต้อง sign <code>/boot/vmlinuz-{version}</code>  ด้วย ไม่งั้น Boot ไม่ได้</p>
<pre><code class="language-sh">❯ sudo sbctl sign -s /boot/vmlinuz-6.9.6_1

❯ sudo sbctl verify
Verifying file database and EFI images in /boot/efi...
✓ /boot/vmlinuz-6.9.6_1 is signed
✓ /boot/efi/EFI/void/grubx64.efi is signed
</code></pre>
<p>หลังจาก reboot ด้วย SecureBoot ได้เรียบร้อย เป็นอันเสร็จ<br>แต่อย่าลืมว่าถ้าระบบ Update เราต้องกลับมา Sign เองใหม่หรือเปล่า??</p>
<h2>Kernel Hook</h2>
<p>โดยทั่วไป ระบบ Linux จะมี Directory <code>/etc/kernel.d/post-install/</code> ซึ่งจะรวบรวมเอา Script สำหรับใช้หลังจาก Update ระบบเช่น ตัว Grub เอง ก็สร้างไฟล์ config ใหม่ทุกครั้งหลังจาก update kernel</p>
<pre><code class="language-sh">cat /etc/kernel.d/post-install/50-grub
#!/bin/sh
#
# Kernel hook for GRUB 2.
#
# Arguments passed to this script: $1 pkgname, $2 version.
#
PKGNAME="$1"
VERSION="$2"

export ZPOOL_VDEV_NAME_PATH=YES

if command -v grub-mkconfig &gt;/dev/null 2&gt;&amp;1; then
        if [ -d $ROOTDIR/boot/grub ]; then
                grub-mkconfig -o $ROOTDIR/boot/grub/grub.cfg
                exit $?
        fi
fi

exit 0
</code></pre>
<p>และสังเกตุว่า ไฟล์ทั้งหมดใน Directory นี้นั้น จะนำหน้าด้วยตัวเลข ซึ่งเป็นลำดับของการทำงานนั่นเอง โดยที่เลขน้อยกว่า จะถูกรันก่อน จนครบ</p>
<pre><code class="language-sh">❯ sudo ls /etc/kernel.d/post-install/ -l
10-dkms
 20-initramfs -&gt; ../../../usr/libexec/dracut/kernel-hook-postinst
 50-bootsize
50-efibootmgr
50-grub
</code></pre>
<p>เราก็จะทำการ Copy ไฟล์ <code>50-grub</code> มาเป็น templates ในการทำ kernel hook และตั้งชื่อว่า <code>60-sign</code> เพื่อให้แน่ใจว่า ทุกอย่างถูกติดตั้งไปก่อน แล้ว sign เป็นลำดับสุดท้าย</p>
<pre><code class="language-sh">sudo cp /etc/kernel.d/post-install/50-grub  /etc/kernel.d/post-install/60-sign
</code></pre>
<p>แล้วก็เข้าไปแก้ไขไฟล์</p>
<pre><code class="language-sh">sudo vi  /etc/kernel.d/post-install/60-sign
</code></pre>
<p>แล้วก็ปรับคำสั่งเป็น sbctl ให้เรียบร้อย<br>จะสังเกตุว่าผมได้ใช้ sign สองครั้ง คือ <code>grub config</code> และไฟล์ kernel <code>vmlinuz-</code> ที่มีเวอร์ชั่นตามท้าย</p>
<pre><code class="language-bash">#!/bin/sh
#
# Kernel post-install hook for surcue boot.
#
# Arguments passed to this script: $1 pkgname, $2 version.
#

PKGNAME="$1"
VERSION="$2"

if command -v sbctl &gt;/dev/null 2&gt;&amp;1; then
    if [ -d $ROOTDIR/boot/efi ]; then
        echo "Signing new packages v.$VERSION"
        sbctl sign -s /boot/efi/EFI/void/grubx64.efi
        sbctl sign -s /boot/vmlinuz-${VERSION}
        exit $?
    fi
fi

exit 0
</code></pre>
<p>เซฟไฟล์ และสุดท้าย ทำ permission ให้มัน excuteable หรือว่าให้โปรแกรมเรียยกทำงานได้</p>
<pre><code class="language-sh">sudo chmod +x  /etc/kernel.d/post-install/60-sign
</code></pre>
<p>เนื่องจากว่าบางระบบจะไม่ให้ไฟล์ script ใดๆ มาทำงานได้ตามใจชอบ<br>เราต้องควบคุมเองว่าไฟล์ไหนมี <code>สิทธ์</code> ที่จะทำงานได้ นั่นเอง</p>
<p>เพียงเท่านี้ เราก็จะมีระบบเข้ารหัสที่ปลอดภัยสุด ๆ ใครจะมาแอบเสียบแฟรชไดร์มาแก้ไขไฟล์ Boot วางยาเราไม่ได้ แน่นอน</p>
]]></itunes:summary>
      <itunes:image href="https://image.nostr.build/55e82d0b3a6bd7157e9a6baa0558cbb230c03c78f1d64ef4608c020ea20c9cc7.jpg"/>
      </item>
      
      </channel>
      </rss>
    