<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Linux on YHY Study Website</title><link>https://ryan.0412.online/en/tags/linux/</link><description>Recent content in Linux on YHY Study Website</description><generator>Hugo</generator><language>en-US</language><lastBuildDate>Wed, 30 Sep 2026 21:25:01 +0800</lastBuildDate><atom:link href="https://ryan.0412.online/en/tags/linux/index.xml" rel="self" type="application/rss+xml"/><item><title>Installing a Custom Linux Kernel in a Virtual Machine</title><link>https://ryan.0412.online/en/blog/custom-linux-kernel-in-vm/</link><pubDate>Sun, 20 Sep 2026 00:00:00 +0000</pubDate><guid>https://ryan.0412.online/en/blog/custom-linux-kernel-in-vm/</guid><description>&lt;p&gt;This article has one goal: &lt;strong&gt;compile and install a custom kernel in Ubuntu running inside VMware, then load a .ko module I wrote myself&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Compilation and kernel replacement both happen in that virtual machine. They consume CPU, memory, and disk space and involve GRUB. Unstable networking can interrupt long builds or SSH sessions; without booting the new kernel, the module will not match the running version. The order is therefore static IP first, custom kernel second, and module last.&lt;/p&gt;</description></item><item><title>SSH Login and Security Hardening on Linux Servers</title><link>https://ryan.0412.online/en/blog/linux-ssh-security-notes/</link><pubDate>Mon, 31 Aug 2026 00:00:00 +0000</pubDate><guid>https://ryan.0412.online/en/blog/linux-ssh-security-notes/</guid><description>&lt;p&gt;My recent SSH experiments on a VPS involved public-network timeouts, private-key permission errors, and port changes that systemd did not pick up. This article combines several Obsidian notes in the order of getting connected, hardening access, and coordinating firewall rules.&lt;/p&gt;
&lt;figure class="td-figure"&gt;
 &lt;img src="https://ryan.0412.online/blog/linux-ssh-security-notes/ssh-security-fun-cover.png" alt="SSH login and security hardening diagram" width="1536" height="1024" loading="lazy" decoding="async"&gt;&lt;figcaption&gt; &lt;span class="td-fig-caption"&gt;From client to server: allowing traffic through the cloud security group, UFW, and sshd&lt;/span&gt;&lt;/figcaption&gt;
&lt;/figure&gt;&lt;div class="td-callout td-callout--note" role="note"&gt;
 &lt;div class="td-callout__title"&gt;&lt;i class="td-callout__icon fa-solid fa-circle-info" aria-hidden="true"&gt;&lt;/i&gt;&lt;span class="td-callout__label"&gt;Illustrative placeholders&lt;/span&gt;&lt;/div&gt;
 &lt;div class="td-callout__body"&gt;
&lt;p&gt;IPs are represented by &lt;code&gt;ip1&lt;/code&gt;, &lt;code&gt;ip2&lt;/code&gt;, and similar placeholders, for example &lt;code&gt;ip1&lt;/code&gt; for the server and &lt;code&gt;ip2&lt;/code&gt; for an allowed source. The domain &lt;code&gt;xxx.xxx.com&lt;/code&gt;, ports such as &lt;code&gt;22222&lt;/code&gt;, and &lt;code&gt;username&lt;/code&gt; are also &lt;strong&gt;example placeholders&lt;/strong&gt;, not a real environment. Replace them with your own values.&lt;/p&gt;</description></item></channel></rss>