<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: shamain anjum</title>
    <description>The latest articles on DEV Community by shamain anjum (@shamain_anjum).</description>
    <link>https://dev.to/shamain_anjum</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3023435%2F74f317fd-bfdd-4bb6-87c0-8223d9df2126.jpg</url>
      <title>DEV Community: shamain anjum</title>
      <link>https://dev.to/shamain_anjum</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/shamain_anjum"/>
    <language>en</language>
    <item>
      <title>Linux Server Hardening and Auditing Checklist on Red Hat Linux</title>
      <dc:creator>shamain anjum</dc:creator>
      <pubDate>Wed, 14 May 2025 18:42:12 +0000</pubDate>
      <link>https://dev.to/shamain_anjum/linux-server-hardening-and-auditing-checklist-on-red-hat-linux-51k8</link>
      <guid>https://dev.to/shamain_anjum/linux-server-hardening-and-auditing-checklist-on-red-hat-linux-51k8</guid>
      <description>&lt;p&gt;Today marks the end of my #30DaysLinuxChallenge journey!&lt;br&gt;&lt;br&gt;
I’m closing it out with a &lt;strong&gt;practical, security-focused project&lt;/strong&gt;: building and executing a &lt;strong&gt;Linux server hardening and auditing checklist&lt;/strong&gt; on Red Hat Linux.&lt;/p&gt;

&lt;p&gt;This is a &lt;strong&gt;perfect combination of RHCSA exam skills + real-world system administration practices&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;🎯 Objective&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Apply basic hardening policies
&lt;/li&gt;
&lt;li&gt;Configure auditing with &lt;code&gt;auditd&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Create a personal security validation checklist
&lt;/li&gt;
&lt;li&gt;Monitor and analyze system logs&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;📚 RHCSA Skills Covered&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;✔ User and password security&lt;br&gt;&lt;br&gt;
✔ SELinux &amp;amp; firewall validation&lt;br&gt;&lt;br&gt;
✔ Service management&lt;br&gt;&lt;br&gt;
✔ Log auditing with &lt;code&gt;journalctl&lt;/code&gt; and &lt;code&gt;auditd&lt;/code&gt;&lt;br&gt;&lt;br&gt;
✔ Shell scripting for checks&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;📝 Server Hardening Checklist&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;✅ 1. Set Strong Password Policy&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;sudo nano /etc/login.defs&lt;/p&gt;

&lt;p&gt;Adjust values:&lt;br&gt;
PASS_MAX_DAYS   90&lt;br&gt;
PASS_MIN_DAYS   7&lt;br&gt;
PASS_WARN_AGE   7&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgtaqxz5bbh9bvt57xoux.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgtaqxz5bbh9bvt57xoux.png" alt="Image description" width="689" height="550"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;✅ 2. Disable Unnecessary Services&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;sudo systemctl disable --now cups&lt;br&gt;
sudo systemctl disable --now bluetooth&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fx1nplabz5gaxe0kbgd8p.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fx1nplabz5gaxe0kbgd8p.png" alt="Image description" width="669" height="246"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;✅ 3. Set File Permissions on Critical Files&lt;/strong&gt;&lt;br&gt;
ls -l /etc/shadow /etc/passwd /etc/gshadow&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fy6lf76f2yyuwe5sgw0ed.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fy6lf76f2yyuwe5sgw0ed.png" alt="Image description" width="632" height="103"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;✅ 4. Verify SELinux is Enforcing&lt;/strong&gt;&lt;br&gt;
sestatus&lt;br&gt;
Expected:&lt;/p&gt;

&lt;p&gt;SELinux status:                 enabled&lt;br&gt;
Current mode:                   enforcing&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4rnxb79r5d8y880sya4b.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4rnxb79r5d8y880sya4b.png" alt="Image description" width="618" height="212"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;✅ 5. Harden SSH Configuration&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;sudo nano /etc/ssh/sshd_config&lt;br&gt;
Recommended settings:&lt;/p&gt;

&lt;p&gt;PermitRootLogin no&lt;br&gt;
PasswordAuthentication no&lt;br&gt;
MaxAuthTries 3&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxwfexyby97dzc49pp6nf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxwfexyby97dzc49pp6nf.png" alt="Image description" width="642" height="297"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Restart SSH:&lt;br&gt;
sudo systemctl restart sshd&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;✅ 6. Enable and Check Firewall Rules&lt;/strong&gt;&lt;br&gt;
sudo firewall-cmd --state&lt;br&gt;
sudo firewall-cmd --list-all&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fud1appd806y0i4p1l66g.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fud1appd806y0i4p1l66g.png" alt="Image description" width="642" height="343"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;✅ 7. Set Up Auditing with auditd&lt;/strong&gt;&lt;br&gt;
sudo dnf install -y audit&lt;br&gt;
sudo systemctl enable --now auditd&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Monitor file access:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;sudo auditctl -w /etc/passwd -p wa -k passwd_changes&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdanl578wkg5aosmlgzns.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdanl578wkg5aosmlgzns.png" alt="Image description" width="656" height="94"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;View audit logs:&lt;/strong&gt;&lt;br&gt;
sudo ausearch -k passwd_changes&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4e7waq97g7pfqtz22q30.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4e7waq97g7pfqtz22q30.png" alt="Image description" width="658" height="227"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;✅ 8. Monitor Logs&lt;/strong&gt;&lt;br&gt;
sudo journalctl -p err -b&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvbf8182x59h21oo9q8ya.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvbf8182x59h21oo9q8ya.png" alt="Image description" width="650" height="380"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;sudo tail -f /var/log/secure&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyng8biw187brk0qs7q05.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyng8biw187brk0qs7q05.png" alt="Image description" width="651" height="353"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;✅ 9. Create a Custom Validation Script (Bonus)&lt;/strong&gt;&lt;br&gt;
nano ~/server_check.sh&lt;/p&gt;

&lt;p&gt;Example:&lt;/p&gt;

&lt;h1&gt;
  
  
  !/bin/bash
&lt;/h1&gt;

&lt;p&gt;echo "Checking SELinux status:"&lt;br&gt;
sestatus&lt;br&gt;
echo "Checking firewall state:"&lt;br&gt;
firewall-cmd --state&lt;br&gt;
echo "Checking SSH root login setting:"&lt;br&gt;
grep PermitRootLogin /etc/ssh/sshd_config&lt;/p&gt;

&lt;p&gt;Make executable:&lt;br&gt;
chmod +x ~/server_check.sh&lt;/p&gt;

&lt;p&gt;Run:&lt;br&gt;
./server_check.sh&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fn1ifbr0t034xalj1slem.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fn1ifbr0t034xalj1slem.png" alt="Image description" width="513" height="333"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;✅ Recap&lt;/strong&gt;&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Task&lt;/th&gt;
&lt;th&gt;Tool/Command&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Password policy&lt;/td&gt;
&lt;td&gt;&lt;code&gt;/etc/login.defs&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Disable services&lt;/td&gt;
&lt;td&gt;&lt;code&gt;systemctl disable --now&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Check file permissions&lt;/td&gt;
&lt;td&gt;&lt;code&gt;ls -l&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Check SELinux&lt;/td&gt;
&lt;td&gt;&lt;code&gt;sestatus&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Harden SSH&lt;/td&gt;
&lt;td&gt;&lt;code&gt;sshd_config&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Enable firewall&lt;/td&gt;
&lt;td&gt;&lt;code&gt;firewall-cmd&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Configure auditing&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;auditctl&lt;/code&gt;, &lt;code&gt;ausearch&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Analyze logs&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;journalctl&lt;/code&gt;, &lt;code&gt;tail&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;🎉 Why This Matters&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This project combined almost every core RHCSA skill:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Service &amp;amp; user management&lt;/li&gt;
&lt;li&gt;SELinux &amp;amp; firewall security&lt;/li&gt;
&lt;li&gt;System auditing&lt;/li&gt;
&lt;li&gt;Scripting and automation&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In the real world, this is the starting point of any secure Red Hat deployment.&lt;/p&gt;

</description>
      <category>cloudwhistler</category>
      <category>devops</category>
      <category>redhat</category>
      <category>linux</category>
    </item>
    <item>
      <title>Multi-User Secure File Sharing System with ACLs on Red Hat Linux</title>
      <dc:creator>shamain anjum</dc:creator>
      <pubDate>Tue, 13 May 2025 18:47:14 +0000</pubDate>
      <link>https://dev.to/shamain_anjum/multi-user-secure-file-sharing-system-with-acls-on-red-hat-linux-1n9g</link>
      <guid>https://dev.to/shamain_anjum/multi-user-secure-file-sharing-system-with-acls-on-red-hat-linux-1n9g</guid>
      <description>&lt;p&gt;Today I built a &lt;strong&gt;secure shared file space&lt;/strong&gt; using &lt;strong&gt;Access Control Lists (ACLs)&lt;/strong&gt; on Red Hat Linux.&lt;br&gt;&lt;br&gt;
This project is very practical and directly aligns with RHCSA exam tasks around &lt;strong&gt;user permissions, groups, and access control&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;🔧 Objective&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Create a shared folder for multiple users
&lt;/li&gt;
&lt;li&gt;Apply ACLs to define fine-grained permissions
&lt;/li&gt;
&lt;li&gt;Test and verify ACL behavior with different users&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;📚 RHCSA Skills Covered&lt;/p&gt;

&lt;p&gt;✔ User and group creation&lt;br&gt;&lt;br&gt;
✔ Setting standard and extended permissions&lt;br&gt;&lt;br&gt;
✔ Using &lt;code&gt;setfacl&lt;/code&gt; and &lt;code&gt;getfacl&lt;/code&gt; for ACL management&lt;br&gt;&lt;br&gt;
✔ Troubleshooting permissions&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1️⃣ Create Users and Groups&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;sudo useradd alice&lt;br&gt;
sudo useradd bob&lt;br&gt;
sudo useradd charlie&lt;br&gt;
sudo passwd alice&lt;br&gt;
sudo passwd bob&lt;br&gt;
sudo passwd charlie&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxt3e0tq7f9vbmi017vx5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxt3e0tq7f9vbmi017vx5.png" alt="Image description" width="583" height="414"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2️⃣ Create a Shared Directory&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;sudo mkdir /shared&lt;br&gt;
sudo chown root:root /shared&lt;br&gt;
sudo chmod 770 /shared&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffa3a2pcxu87cupj76ko0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffa3a2pcxu87cupj76ko0.png" alt="Image description" width="448" height="98"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This allows only the owner and group members to access by default.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3️⃣ Apply ACLs for Fine-Grained Control&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Grant full access to alice, read-only access to bob, and deny access to charlie.&lt;/p&gt;

&lt;p&gt;sudo setfacl -m u:alice:rwx /shared&lt;br&gt;
sudo setfacl -m u:bob:r-- /shared&lt;br&gt;
sudo setfacl -m u:charlie:--- /shared&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fx8pzs67gsgy2kd8y1984.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fx8pzs67gsgy2kd8y1984.png" alt="Image description" width="517" height="100"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4️⃣ Verify ACLs&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;getfacl /shared&lt;/p&gt;

&lt;p&gt;Example output:&lt;/p&gt;

&lt;h1&gt;
  
  
  file: shared
&lt;/h1&gt;

&lt;h1&gt;
  
  
  owner: root
&lt;/h1&gt;

&lt;h1&gt;
  
  
  group: root
&lt;/h1&gt;

&lt;p&gt;user::rwx&lt;br&gt;
user:alice:rwx&lt;br&gt;
user:bob:r--&lt;br&gt;
user:charlie:---&lt;br&gt;
group::---&lt;br&gt;
mask::rwx&lt;br&gt;
other::---&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fo6izuczgsu699fehrd1e.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fo6izuczgsu699fehrd1e.png" alt="Image description" width="530" height="219"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;5️⃣ Test Permissions&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Switch to each user to test access:&lt;br&gt;
su - alice&lt;br&gt;
cd /shared&lt;br&gt;
touch testfile.txt&lt;/p&gt;

&lt;p&gt;su - bob&lt;br&gt;
cd /shared&lt;br&gt;
ls   # should work&lt;br&gt;
touch newfile.txt  # should fail&lt;/p&gt;

&lt;p&gt;su - charlie&lt;br&gt;
cd /shared   # should fail&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;🧪 Try It Yourself&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Create a “Finance” group with specific ACL access to /finance&lt;/p&gt;

&lt;p&gt;Remove ACLs with setfacl -x&lt;/p&gt;

&lt;p&gt;Make default ACLs apply to all new files in /shared:&lt;br&gt;
sudo setfacl -d -m u:alice:rwx /shared&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;✅ Recap&lt;/strong&gt;&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Task&lt;/th&gt;
&lt;th&gt;Tool/Command&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Create users&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;useradd&lt;/code&gt;, &lt;code&gt;passwd&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Create shared folder&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;mkdir /shared&lt;/code&gt;, &lt;code&gt;chmod 770&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Apply ACLs&lt;/td&gt;
&lt;td&gt;&lt;code&gt;setfacl -m u:user:perm /path&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;View ACLs&lt;/td&gt;
&lt;td&gt;&lt;code&gt;getfacl /shared&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Remove ACLs&lt;/td&gt;
&lt;td&gt;&lt;code&gt;setfacl -x u:user /shared&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;🎯 Why This Matters (RHCSA)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;ACLs provide fine-grained access control that regular Linux permissions cannot.&lt;/p&gt;

&lt;p&gt;RHCSA tests your ability to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Set, modify, and remove ACLs&lt;/li&gt;
&lt;li&gt;Combine ACLs with standard permissions&lt;/li&gt;
&lt;li&gt;Troubleshoot permission issues&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is an ideal exam and real-world scenario for securing shared data.&lt;/p&gt;

</description>
      <category>cloudwhistler</category>
      <category>devops</category>
      <category>redhat</category>
      <category>linux</category>
    </item>
    <item>
      <title>Create a Custom systemd Service and Timer on Red Hat Linux</title>
      <dc:creator>shamain anjum</dc:creator>
      <pubDate>Mon, 12 May 2025 17:56:27 +0000</pubDate>
      <link>https://dev.to/shamain_anjum/create-a-custom-systemd-service-and-timer-on-red-hat-linux-4499</link>
      <guid>https://dev.to/shamain_anjum/create-a-custom-systemd-service-and-timer-on-red-hat-linux-4499</guid>
      <description>&lt;p&gt;*&lt;em&gt;Day 28: Create a Custom systemd Service and Timer on Red Hat Linux *&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Today’s project focused on a &lt;strong&gt;powerful automation tool for Red Hat Linux admins&lt;/strong&gt;: creating a &lt;strong&gt;custom systemd service + timer&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;This lets you automate any script or task at system startup or on a schedule, without relying on traditional cron jobs.&lt;br&gt;&lt;br&gt;
This task is also a &lt;strong&gt;great match for RHCSA exam scenarios&lt;/strong&gt;!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;🔧 Objective&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Write a simple shell script
&lt;/li&gt;
&lt;li&gt;Create a custom systemd service to run the script
&lt;/li&gt;
&lt;li&gt;Configure a systemd timer to run the service automatically
&lt;/li&gt;
&lt;li&gt;Verify the timer execution and check logs&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;📚 RHCSA Skills Covered&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;✔ Shell scripting basics&lt;br&gt;&lt;br&gt;
✔ Service creation and management with &lt;code&gt;systemctl&lt;/code&gt;&lt;br&gt;&lt;br&gt;
✔ Timer creation with systemd&lt;br&gt;&lt;br&gt;
✔ Troubleshooting and log analysis with &lt;code&gt;journalctl&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1️⃣ Create a Custom Script&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Create a script to log system uptime every 5 minutes.&lt;br&gt;
sudo mkdir -p /opt/scripts&lt;br&gt;
sudo nano /opt/scripts/log_uptime.sh&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Example script:&lt;/strong&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  !/bin/bash
&lt;/h1&gt;

&lt;p&gt;echo "$(date): System uptime is: $(uptime)" &amp;gt;&amp;gt; /var/log/uptime.log&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F647ba49l7ubj6ey1lpvw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F647ba49l7ubj6ey1lpvw.png" alt="Image description" width="669" height="214"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Make it executable:&lt;/strong&gt;&lt;br&gt;
sudo chmod +x /opt/scripts/log_uptime.sh&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2️⃣ Create a Custom systemd Service&lt;/strong&gt;&lt;br&gt;
sudo nano /etc/systemd/system/log-uptime.service&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Example unit file:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;[Unit]&lt;br&gt;
Description=Log system uptime&lt;/p&gt;

&lt;p&gt;[Service]&lt;br&gt;
Type=oneshot&lt;br&gt;
ExecStart=/opt/scripts/log_uptime.sh&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3️⃣ Create a systemd Timer&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;sudo nano /etc/systemd/system/log-uptime.timer&lt;/p&gt;

&lt;p&gt;Example timer file:&lt;/p&gt;

&lt;p&gt;[Unit]&lt;br&gt;
Description=Run uptime logger every 5 minutes&lt;/p&gt;

&lt;p&gt;[Timer]&lt;br&gt;
OnBootSec=5min&lt;br&gt;
OnUnitActiveSec=5min&lt;br&gt;
Unit=log-uptime.service&lt;/p&gt;

&lt;p&gt;[Install]&lt;br&gt;
WantedBy=timers.target&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0npnj8bl557wqiasuzuk.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0npnj8bl557wqiasuzuk.png" alt="Image description" width="657" height="280"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4️⃣ Start and Enable the Timer&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;sudo systemctl daemon-reload&lt;br&gt;
sudo systemctl enable --now log-uptime.timer&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2hfgzc9pg5qorfnsg4e2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2hfgzc9pg5qorfnsg4e2.png" alt="Image description" width="655" height="130"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Check status:&lt;/strong&gt;&lt;br&gt;
systemctl list-timers&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fs4i8anfenshtngm07efo.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fs4i8anfenshtngm07efo.png" alt="Image description" width="655" height="195"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Verify logs:&lt;/strong&gt;&lt;br&gt;
cat /var/log/uptime.log&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Feonbc7i4tbl8o2yrgvvp.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Feonbc7i4tbl8o2yrgvvp.png" alt="Image description" width="670" height="189"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Check systemd logs:&lt;/strong&gt;&lt;br&gt;
journalctl -u log-uptime.service&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fj7365iz38512erqarjcx.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fj7365iz38512erqarjcx.png" alt="Image description" width="669" height="98"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;🧪 Try It Yourself&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Change OnUnitActiveSec=5min to 1min and test faster execution&lt;/li&gt;
&lt;li&gt;Replace the script with any custom automation (e.g., backup, cleanup)&lt;/li&gt;
&lt;li&gt;Use systemctl status log-uptime.timer to verify next scheduled run&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;✅ Recap&lt;/strong&gt;&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Task&lt;/th&gt;
&lt;th&gt;Tool/Command&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Create shell script&lt;/td&gt;
&lt;td&gt;&lt;code&gt;nano /opt/scripts/log_uptime.sh&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Create systemd service&lt;/td&gt;
&lt;td&gt;&lt;code&gt;/etc/systemd/system/log-uptime.service&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Create systemd timer&lt;/td&gt;
&lt;td&gt;&lt;code&gt;/etc/systemd/system/log-uptime.timer&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Enable and start timer&lt;/td&gt;
&lt;td&gt;&lt;code&gt;systemctl enable --now log-uptime.timer&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Check logs&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;cat /var/log/uptime.log&lt;/code&gt;, &lt;code&gt;journalctl&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;🎯 Why This Matters (RHCSA)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;systemd skills are now explicitly tested on the RHCSA exam.&lt;/p&gt;

&lt;p&gt;This project touches:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Unit creation&lt;/li&gt;
&lt;li&gt;Timer configuration&lt;/li&gt;
&lt;li&gt;Troubleshooting failed services&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You’ll likely face a systemd troubleshooting or service creation task in the real exam.&lt;/p&gt;

</description>
      <category>cloudwhistler</category>
      <category>redhat</category>
      <category>linux</category>
      <category>devops</category>
    </item>
    <item>
      <title>Host a Local RPM Package Repository on Red Hat Linux</title>
      <dc:creator>shamain anjum</dc:creator>
      <pubDate>Sun, 11 May 2025 16:11:32 +0000</pubDate>
      <link>https://dev.to/shamain_anjum/host-a-local-rpm-package-repository-on-red-hat-linux-21lb</link>
      <guid>https://dev.to/shamain_anjum/host-a-local-rpm-package-repository-on-red-hat-linux-21lb</guid>
      <description>&lt;p&gt;Today’s project was both interesting and very RHCSA-relevant: &lt;strong&gt;creating a private local RPM repository&lt;/strong&gt; on Red Hat Linux.&lt;/p&gt;

&lt;p&gt;This is a must-have skill for organizations managing many systems that rely on custom or internally built RPM packages.&lt;/p&gt;

&lt;h2&gt;
  
  
  🔧 Objective
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Create a local repository of RPM packages
&lt;/li&gt;
&lt;li&gt;Host it over Apache HTTP
&lt;/li&gt;
&lt;li&gt;Configure client systems to use the repo via a &lt;code&gt;.repo&lt;/code&gt; file
&lt;/li&gt;
&lt;li&gt;Verify package installation from the local repository&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  📚 RHCSA Skills Covered
&lt;/h2&gt;

&lt;p&gt;✔ Software installation with &lt;code&gt;dnf&lt;/code&gt; and &lt;code&gt;rpm&lt;/code&gt;&lt;br&gt;&lt;br&gt;
✔ Web server management (&lt;code&gt;httpd&lt;/code&gt;)&lt;br&gt;&lt;br&gt;
✔ Repository creation and configuration&lt;br&gt;&lt;br&gt;
✔ SELinux and firewall troubleshooting&lt;br&gt;&lt;br&gt;
✔ Service enablement and verification&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1️⃣ Install Required Packages&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;On the server:&lt;br&gt;
sudo dnf install -y httpd createrepo&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fa6vmzmwdmyx442hk3kf1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fa6vmzmwdmyx442hk3kf1.png" alt="Image description" width="651" height="413"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Start and enable Apache:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;sudo systemctl enable --now httpd&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2️⃣ Create a Repository Directory&lt;/strong&gt;&lt;br&gt;
sudo mkdir -p /var/www/html/rpms&lt;/p&gt;

&lt;p&gt;Copy or download some RPM packages:&lt;br&gt;
sudo cp /path/to/*.rpm /var/www/html/rpms/&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3️⃣ Initialize the Repository&lt;/strong&gt;&lt;br&gt;
sudo createrepo /var/www/html/rpms/&lt;br&gt;
This creates the metadata necessary for clients to use the repo.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjg10llurmlglmlv03usc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjg10llurmlglmlv03usc.png" alt="Image description" width="507" height="144"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4️⃣ Configure Firewall and SELinux&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Allow HTTP access:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;sudo firewall-cmd --add-service=http --permanent&lt;br&gt;
sudo firewall-cmd --reload&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F12slg3mla0rx8uuygzkg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F12slg3mla0rx8uuygzkg.png" alt="Image description" width="600" height="90"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Apply SELinux context:&lt;/strong&gt;&lt;br&gt;
sudo restorecon -Rv /var/www/html/&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Check your repo in browser or via curl:&lt;/strong&gt;&lt;br&gt;
curl &lt;a href="http://localhost/rpms/" rel="noopener noreferrer"&gt;http://localhost/rpms/&lt;/a&gt;&lt;br&gt;
You should see a list of RPM files.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjs2ygwzgdej5andhs4xr.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjs2ygwzgdej5andhs4xr.png" alt="Image description" width="609" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;5️⃣ Create Client .repo File On any Red Hat client:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;sudo nano /etc/yum.repos.d/localrepo.repo&lt;/p&gt;

&lt;p&gt;Example content:&lt;br&gt;
[localrepo]&lt;br&gt;
name=My Local RPM Repo&lt;br&gt;
baseurl=http:///rpms/&lt;br&gt;
enabled=1&lt;br&gt;
gpgcheck=0&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;6️⃣ Test the Repository&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;sudo dnf clean all&lt;br&gt;
sudo dnf repolist&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Install any RPM from the repo:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;sudo dnf install &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;🧪 Try It Yourself&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Add more packages to /var/www/html/rpms/ and run createrepo again&lt;/li&gt;
&lt;li&gt;Test with gpgcheck=1 and a custom GPG key&lt;/li&gt;
&lt;li&gt;Move your repo to an NFS share and try hosting it&lt;/li&gt;
&lt;li&gt;Write a script to automate repository updates&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;✅ Recap&lt;br&gt;
| Task                              | Tool/Command                               |&lt;br&gt;
| --------------------------------- | ------------------------------------------ |&lt;br&gt;
| Install required tools            | &lt;code&gt;dnf install httpd createrepo&lt;/code&gt;             |&lt;br&gt;
| Copy RPM packages                 | &lt;code&gt;cp *.rpm /var/www/html/rpms/&lt;/code&gt;             |&lt;br&gt;
| Create repo metadata              | &lt;code&gt;createrepo /var/www/html/rpms/&lt;/code&gt;           |&lt;br&gt;
| Enable firewall + restore SELinux | &lt;code&gt;firewalld&lt;/code&gt;, &lt;code&gt;restorecon&lt;/code&gt;                  |&lt;br&gt;
| Configure client repo             | Create &lt;code&gt;.repo&lt;/code&gt; file in &lt;code&gt;/etc/yum.repos.d/&lt;/code&gt; |&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;🎯 Why This Matters (RHCSA)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;RHCSA tests your ability to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Manage packages with rpm and dnf&lt;/li&gt;
&lt;li&gt;Configure and troubleshoot repositories&lt;/li&gt;
&lt;li&gt;Manage services and SELinux in real-world setups&lt;/li&gt;
&lt;li&gt;This project touched all of these core competencies.&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>cloudwhistler</category>
      <category>devops</category>
      <category>redhat</category>
      <category>linux</category>
    </item>
    <item>
      <title>Centralized Backup Server with rsync and cron on Red Hat Linux</title>
      <dc:creator>shamain anjum</dc:creator>
      <pubDate>Sat, 10 May 2025 10:10:04 +0000</pubDate>
      <link>https://dev.to/shamain_anjum/centralized-backup-server-with-rsync-and-cron-on-red-hat-linux-4g02</link>
      <guid>https://dev.to/shamain_anjum/centralized-backup-server-with-rsync-and-cron-on-red-hat-linux-4g02</guid>
      <description>&lt;p&gt;Today’s project is both practical and RHCSA-aligned: &lt;strong&gt;setting up a secure, automated backup server&lt;/strong&gt; using &lt;code&gt;rsync&lt;/code&gt; over SSH and scheduled jobs with &lt;code&gt;cron&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;This is a real-world admin task and also mirrors RHCSA exam scenarios where backup automation and file transfer are common.&lt;/p&gt;

&lt;h2&gt;
  
  
  🔧 Objective
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Use &lt;code&gt;rsync&lt;/code&gt; to transfer files securely over SSH
&lt;/li&gt;
&lt;li&gt;Automate regular backups with &lt;code&gt;cron&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Secure access using SSH keys
&lt;/li&gt;
&lt;li&gt;Harden access with firewall and permissions&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  📚 RHCSA Skills Covered
&lt;/h2&gt;

&lt;p&gt;✔ User and permission management&lt;br&gt;&lt;br&gt;
✔ SSH key authentication&lt;br&gt;&lt;br&gt;
✔ Automating jobs with &lt;code&gt;cron&lt;/code&gt;&lt;br&gt;&lt;br&gt;
✔ File transfer with &lt;code&gt;rsync&lt;/code&gt;&lt;br&gt;&lt;br&gt;
✔ Firewall configuration&lt;/p&gt;

&lt;h2&gt;
  
  
  1️⃣ Install rsync
&lt;/h2&gt;

&lt;p&gt;sudo dnf install -y rsync&lt;/p&gt;

&lt;p&gt;Check version:&lt;br&gt;
rsync --version&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fc7e7aasd83efc5264nr7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fc7e7aasd83efc5264nr7.png" alt="Image description" width="627" height="407"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  2️⃣ Set Up SSH Key Authentication
&lt;/h2&gt;

&lt;p&gt;On client machine (sending data):&lt;/p&gt;

&lt;p&gt;ssh-keygen -t rsa&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmrtkrhuxemv1peqwkwfx.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmrtkrhuxemv1peqwkwfx.png" alt="Image description" width="627" height="407"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;ssh-copy-id backupuser@backupserver&lt;/p&gt;

&lt;p&gt;Now the client can connect without a password:&lt;/p&gt;

&lt;p&gt;ssh backupuser@backupserver&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8i5009at8tyu59n4ivcr.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8i5009at8tyu59n4ivcr.png" alt="Image description" width="800" height="506"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  3️⃣ Create a Backup Directory on the Server
&lt;/h2&gt;

&lt;p&gt;sudo mkdir -p /backups/home&lt;br&gt;
sudo chown backupuser:backupuser /backups/home&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdpdaywv3rrb7whzyakwg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdpdaywv3rrb7whzyakwg.png" alt="Image description" width="800" height="190"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  4️⃣ Test rsync Manually
&lt;/h2&gt;

&lt;p&gt;From client to server:&lt;br&gt;
rsync -avh /home/backupuser/Documents/ &lt;br&gt;
backupuser@backupserver:/backups/home/&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnpteoha1frazdm4asvsx.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnpteoha1frazdm4asvsx.png" alt="Image description" width="800" height="147"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Flags:&lt;/p&gt;

&lt;p&gt;-a: archive mode (preserves permissions)&lt;br&gt;
-v: verbose&lt;br&gt;
-h: human-readable output&lt;/p&gt;

&lt;h2&gt;
  
  
  5️⃣ Automate Backups with cron
&lt;/h2&gt;

&lt;p&gt;On the client:&lt;br&gt;
crontab -e&lt;/p&gt;

&lt;p&gt;Add this line to run backup every day at 2 AM:&lt;/p&gt;

&lt;p&gt;0 2 * * * rsync -az /home/backupuser/Documents/ backupuser@backupserver:/backups/home/&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fi0hhtog3wa5f14ybbzs3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fi0hhtog3wa5f14ybbzs3.png" alt="Image description" width="420" height="175"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Check your cron jobs:&lt;br&gt;
crontab -l&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1daaqal3sfs3y2ukxsje.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1daaqal3sfs3y2ukxsje.png" alt="Image description" width="473" height="60"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  6️⃣ Secure the Backup Server
&lt;/h2&gt;

&lt;p&gt;Allow SSH and rsync port (default is SSH):&lt;br&gt;
sudo firewall-cmd --add-service=ssh --permanent&lt;br&gt;
sudo firewall-cmd --reload&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fp8hdfhpz8n5jsp6wou5o.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fp8hdfhpz8n5jsp6wou5o.png" alt="Image description" width="620" height="128"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;🧪 Try It Yourself&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Schedule hourly or weekly backups&lt;/li&gt;
&lt;li&gt;Add logging with rsync -avh --log-file=/var/log/backup.log&lt;/li&gt;
&lt;li&gt;Create a backup rotation script (daily, weekly folders)&lt;/li&gt;
&lt;li&gt;Test by restoring files from the server&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;✅ Recap&lt;/strong&gt;&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Task&lt;/th&gt;
&lt;th&gt;Tool/Command&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Generate SSH keys&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;ssh-keygen&lt;/code&gt;, &lt;code&gt;ssh-copy-id&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Create backup folder&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;mkdir&lt;/code&gt;, &lt;code&gt;chown&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Transfer files securely&lt;/td&gt;
&lt;td&gt;&lt;code&gt;rsync -avh source destination&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Schedule backups&lt;/td&gt;
&lt;td&gt;&lt;code&gt;crontab -e&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Harden backup access&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;firewalld&lt;/code&gt;, SSH key-only login&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;🎯 Why This Matters (RHCSA)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Backups are critical for disaster recovery.&lt;/p&gt;

&lt;p&gt;This project tested:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;SSH automation&lt;/li&gt;
&lt;li&gt;Cron scheduling&lt;/li&gt;
&lt;li&gt;Firewall management&lt;/li&gt;
&lt;li&gt;Basic scripting and file system management&lt;/li&gt;
&lt;li&gt;All of these are RHCSA core competencies.&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>cloudwhistler</category>
      <category>devops</category>
      <category>linux</category>
      <category>redhat</category>
    </item>
    <item>
      <title>Build a Secure Web Server on Red Hat Linux</title>
      <dc:creator>shamain anjum</dc:creator>
      <pubDate>Fri, 09 May 2025 06:36:19 +0000</pubDate>
      <link>https://dev.to/shamain_anjum/build-a-secure-web-server-on-red-hat-linux-gn0</link>
      <guid>https://dev.to/shamain_anjum/build-a-secure-web-server-on-red-hat-linux-gn0</guid>
      <description>&lt;p&gt;Today’s challenge marks the beginning of the &lt;strong&gt;final project phase&lt;/strong&gt; day 25 of my 30-day Red Hat Linux learning journey — with each day now focusing on a full &lt;strong&gt;mini-project&lt;/strong&gt; that strengthens &lt;strong&gt;RHCSA exam skills&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  🔧 Objective
&lt;/h2&gt;

&lt;p&gt;Set up and &lt;strong&gt;secure an Apache web server&lt;/strong&gt; on Red Hat Linux.&lt;br&gt;&lt;br&gt;
We’ll cover:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Installing Apache (&lt;code&gt;httpd&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Managing the service with &lt;code&gt;systemctl&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Configuring &lt;code&gt;firewalld&lt;/code&gt; to open port 80&lt;/li&gt;
&lt;li&gt;Adjusting SELinux to allow web content&lt;/li&gt;
&lt;li&gt;Verifying the server works via browser or curl&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  📚 RHCSA Skills Covered
&lt;/h2&gt;

&lt;p&gt;✔ Software installation with &lt;code&gt;dnf&lt;/code&gt;&lt;br&gt;&lt;br&gt;
✔ Service management with &lt;code&gt;systemctl&lt;/code&gt;&lt;br&gt;&lt;br&gt;
✔ Firewall rules with &lt;code&gt;firewalld&lt;/code&gt;&lt;br&gt;&lt;br&gt;
✔ SELinux configuration with &lt;code&gt;semanage&lt;/code&gt; and &lt;code&gt;restorecon&lt;/code&gt;&lt;br&gt;&lt;br&gt;
✔ Log and permission troubleshooting&lt;/p&gt;




&lt;h2&gt;
  
  
  1️⃣ Install Apache (httpd)
&lt;/h2&gt;

&lt;p&gt;sudo dnf install -y httpd&lt;/p&gt;

&lt;p&gt;Verify installation:&lt;/p&gt;

&lt;p&gt;httpd -v&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqu8c909zxvxz2wkyiltc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqu8c909zxvxz2wkyiltc.png" alt="Image description" width="649" height="264"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;2️⃣ Enable and Start Apache&lt;/p&gt;

&lt;p&gt;sudo systemctl enable httpd&lt;br&gt;
sudo systemctl start httpd&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhm4dfzh4zfj22pxmifw1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhm4dfzh4zfj22pxmifw1.png" alt="Image description" width="649" height="102"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Check status:&lt;/p&gt;

&lt;p&gt;sudo systemctl status httpd&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcm3t8ebpytetpjmd9ywl.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcm3t8ebpytetpjmd9ywl.png" alt="Image description" width="645" height="397"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;3️⃣ Configure firewalld to Allow Web Traffic&lt;/p&gt;

&lt;p&gt;Allow HTTP (port 80):&lt;/p&gt;

&lt;p&gt;sudo firewall-cmd --add-service=http --permanent&lt;br&gt;
sudo firewall-cmd --reload&lt;/p&gt;

&lt;p&gt;Verify:&lt;br&gt;
sudo firewall-cmd --list-all&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvp3t4e4gnygev98z4u8y.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvp3t4e4gnygev98z4u8y.png" alt="Image description" width="643" height="298"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;4️⃣ Create a Test Web Page&lt;/p&gt;

&lt;p&gt;echo "Welcome to my Red Hat Web Server!" | sudo tee /var/www/html/index.html&lt;/p&gt;

&lt;p&gt;Test locally:&lt;/p&gt;

&lt;p&gt;curl &lt;a href="http://localhost" rel="noopener noreferrer"&gt;http://localhost&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You should see the welcome message.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Firack84gr7s075kohv98.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Firack84gr7s075kohv98.png" alt="Image description" width="647" height="172"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;5️⃣ Adjust SELinux (If Needed)&lt;/p&gt;

&lt;p&gt;Check SELinux status:&lt;/p&gt;

&lt;p&gt;sestatus&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8z8ma2xuhwxgygkrf6d8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8z8ma2xuhwxgygkrf6d8.png" alt="Image description" width="647" height="211"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If the page doesn't load from another machine:&lt;/p&gt;

&lt;p&gt;📍 Allow Apache to serve content:&lt;/p&gt;

&lt;p&gt;sudo setsebool -P httpd_read_user_content 1&lt;/p&gt;

&lt;p&gt;📍 Or label custom content:&lt;/p&gt;

&lt;p&gt;sudo chcon -Rt httpd_sys_content_t /var/www/html&lt;/p&gt;

&lt;p&gt;📍 To persist labels:&lt;/p&gt;

&lt;p&gt;sudo restorecon -Rv /var/www/html&lt;/p&gt;

&lt;p&gt;6️⃣ Verify from a Browser or Remote Host&lt;/p&gt;

&lt;p&gt;If your machine has a static IP, visit:&lt;/p&gt;

&lt;p&gt;http://&lt;/p&gt;

&lt;p&gt;You should see the message:&lt;/p&gt;

&lt;p&gt;"Welcome to my Red Hat Web Server!"&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpgp7fcpamn5s8m7j4hvb.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpgp7fcpamn5s8m7j4hvb.png" alt="Image description" width="544" height="239"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;🧪 Try It Yourself&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Replace index.html with a real HTML page&lt;/li&gt;
&lt;li&gt;Enable HTTPS with a self-signed cert&lt;/li&gt;
&lt;li&gt;Test a custom SELinux context with ls -Z&lt;/li&gt;
&lt;li&gt;Block/reopen the port using firewalld and observe behavior&lt;/li&gt;
&lt;li&gt;Add a systemd restart condition (e.g., restart on failure)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;✅ Recap&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Task&lt;/th&gt;
&lt;th&gt;Tool/Command&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Install Apache&lt;/td&gt;
&lt;td&gt;&lt;code&gt;dnf install httpd&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Enable and start service&lt;/td&gt;
&lt;td&gt;&lt;code&gt;systemctl enable --now httpd&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Open port 80&lt;/td&gt;
&lt;td&gt;&lt;code&gt;firewall-cmd --add-service=http&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Check SELinux status&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;sestatus&lt;/code&gt;, &lt;code&gt;ls -Z&lt;/code&gt;, &lt;code&gt;restorecon&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Serve content&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;index.html&lt;/code&gt; in &lt;code&gt;/var/www/html&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;🎯 Why This Matters (RHCSA)&lt;/p&gt;

&lt;p&gt;This project simulates real-world service deployment, and tests you on:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Managing packages and services&lt;/li&gt;
&lt;li&gt;Configuring security (firewalld + SELinux)&lt;/li&gt;
&lt;li&gt;Troubleshooting access and logs&lt;/li&gt;
&lt;li&gt;These are core RHCSA exam objectives, especially for tasks involving web, FTP, or custom service exposure.&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>cloudwhistler</category>
      <category>devops</category>
      <category>redhat</category>
      <category>linux</category>
    </item>
    <item>
      <title>Firewall and Network Management in Red Hat Linux</title>
      <dc:creator>shamain anjum</dc:creator>
      <pubDate>Thu, 08 May 2025 20:38:14 +0000</pubDate>
      <link>https://dev.to/shamain_anjum/firewall-and-network-management-in-red-hat-linux-4lem</link>
      <guid>https://dev.to/shamain_anjum/firewall-and-network-management-in-red-hat-linux-4lem</guid>
      <description>&lt;p&gt;Welcome to &lt;strong&gt;Day 24&lt;/strong&gt; of the 30 Days of Linux Challenge!&lt;br&gt;&lt;br&gt;
Today’s focus is on securing and managing network access using &lt;strong&gt;firewalld&lt;/strong&gt;, &lt;strong&gt;nmcli&lt;/strong&gt;, and &lt;code&gt;iptables&lt;/code&gt; — tools that are deeply integrated into Red Hat-based systems.&lt;/p&gt;

&lt;h2&gt;
  
  
  📚 Table of Contents
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Why Firewall &amp;amp; Network Management Matters&lt;/li&gt;
&lt;li&gt;Start and Enable firewalld&lt;/li&gt;
&lt;li&gt;Check Firewall Status and Rules&lt;/li&gt;
&lt;li&gt;Allow and Block Services&lt;/li&gt;
&lt;li&gt;Port-Based Rules with firewalld&lt;/li&gt;
&lt;li&gt;Use Zones for Granular Control&lt;/li&gt;
&lt;li&gt;Manage Network Connections with nmcli&lt;/li&gt;
&lt;li&gt;Inspect Rules with iptables&lt;/li&gt;
&lt;li&gt;Try It Yourself&lt;/li&gt;
&lt;li&gt;Why This Matters&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Why Firewall &amp;amp; Network Management Matters
&lt;/h2&gt;

&lt;p&gt;🔒 Firewalls protect your system from unauthorized access&lt;br&gt;&lt;br&gt;
🌐 Network tools ensure connectivity, DNS, IP config, and interface control&lt;br&gt;&lt;br&gt;
🚀 Red Hat provides enterprise-grade options to manage both with precision&lt;/p&gt;

&lt;h2&gt;
  
  
  Start and Enable firewalld
&lt;/h2&gt;

&lt;p&gt;sudo systemctl enable --now firewalld&lt;br&gt;
sudo systemctl status firewalld&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fm6ajbrv12730a5lcjlf6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fm6ajbrv12730a5lcjlf6.png" alt="Image description" width="649" height="309"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Check Firewall Status and Rules
&lt;/h2&gt;

&lt;p&gt;sudo firewall-cmd --state&lt;br&gt;
sudo firewall-cmd --list-all&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fujhwafte1mvwkxtma61z.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fujhwafte1mvwkxtma61z.png" alt="Image description" width="649" height="316"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This shows:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Active zone (usually public)&lt;/li&gt;
&lt;li&gt;Allowed services and ports&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Allow and Block Services
&lt;/h2&gt;

&lt;p&gt;Allow SSH (if it’s not already):&lt;/p&gt;

&lt;p&gt;sudo firewall-cmd --add-service=ssh --permanent&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fannw936zg5cj0zogj9rb.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fannw936zg5cj0zogj9rb.png" alt="Image description" width="626" height="81"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;sudo firewall-cmd --reload&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0waf49by9brx1wawqtob.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0waf49by9brx1wawqtob.png" alt="Image description" width="626" height="63"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Block a service:&lt;/p&gt;

&lt;p&gt;sudo firewall-cmd --remove-service=ftp --permanent&lt;br&gt;
sudo firewall-cmd --reload&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fddnzqrs4va78dzytdicw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fddnzqrs4va78dzytdicw.png" alt="Image description" width="626" height="113"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Port-Based Rules with firewalld
&lt;/h2&gt;

&lt;p&gt;Open a custom port:&lt;/p&gt;

&lt;p&gt;sudo firewall-cmd --add-port=8080/tcp --permanent&lt;br&gt;
sudo firewall-cmd --reload&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fco80plihvi585cg09gon.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fco80plihvi585cg09gon.png" alt="Image description" width="626" height="113"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Check open ports:&lt;/p&gt;

&lt;p&gt;sudo firewall-cmd --list-ports&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1upjno1k3oolzs7qclg9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1upjno1k3oolzs7qclg9.png" alt="Image description" width="626" height="63"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Use Zones for Granular Control
&lt;/h2&gt;

&lt;p&gt;List available zones:&lt;/p&gt;

&lt;p&gt;sudo firewall-cmd --get-zones&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyjupb6trjuicrgoro7j9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyjupb6trjuicrgoro7j9.png" alt="Image description" width="626" height="63"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Change zone for a specific interface:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;sudo firewall-cmd --zone=internal --change-interface=eth0 --permanent&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxhs1dbuen7m4p7nghshd.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxhs1dbuen7m4p7nghshd.png" alt="Image description" width="649" height="83"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Manage Network Connections with nmcli
&lt;/h2&gt;

&lt;p&gt;List connections:&lt;br&gt;
nmcli connection show&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6pb4cocje2u2dp5n1p4p.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6pb4cocje2u2dp5n1p4p.png" alt="Image description" width="648" height="98"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;View device status:&lt;br&gt;
nmcli device status&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftta6oyc9azj9bw9cw9vj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftta6oyc9azj9bw9cw9vj.png" alt="Image description" width="648" height="98"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Static IP configuration:&lt;/p&gt;

&lt;p&gt;nmcli connection modify eth0 ipv4.addresses 192.168.1.100/24&lt;br&gt;
nmcli connection modify eth0 ipv4.gateway 192.168.1.1&lt;br&gt;
nmcli connection modify eth0 ipv4.dns 8.8.8.8&lt;br&gt;
nmcli connection modify eth0 ipv4.method manual&lt;br&gt;
nmcli connection up eth0&lt;/p&gt;

&lt;h2&gt;
  
  
  Inspect Rules with iptables
&lt;/h2&gt;

&lt;p&gt;View raw firewall rules:&lt;br&gt;
sudo iptables -L -n -v&lt;/p&gt;

&lt;p&gt;Although firewalld is preferred, iptables is still useful for inspection and legacy troubleshooting.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvvfoizf7cl795nl854aj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvvfoizf7cl795nl854aj.png" alt="Image description" width="652" height="230"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Try It Yourself
&lt;/h2&gt;

&lt;p&gt;🧪 Practice tasks:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Start and enable firewalld&lt;/li&gt;
&lt;li&gt;Add and remove a service or port&lt;/li&gt;
&lt;li&gt;View current zone and active rules&lt;/li&gt;
&lt;li&gt;Use nmcli to set a static IP (test on a VM or safe machine)&lt;/li&gt;
&lt;li&gt;Run iptables -L to inspect low-level rules&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Why This Matters
&lt;/h2&gt;

&lt;p&gt;Firewall and network misconfigurations are one of the top causes of downtime.&lt;/p&gt;

&lt;p&gt;By learning:&lt;/p&gt;

&lt;p&gt;firewalld → fast, zone-based rule management&lt;/p&gt;

&lt;p&gt;nmcli → flexible, scriptable network config&lt;/p&gt;

&lt;p&gt;iptables → rule-level diagnostics&lt;/p&gt;

&lt;p&gt;…you gain complete control over how and when your system communicates.&lt;/p&gt;

</description>
      <category>cloudwhistler</category>
      <category>devops</category>
      <category>redhat</category>
      <category>linux</category>
    </item>
    <item>
      <title>Getting Started with Ansible on Red Hat Linux</title>
      <dc:creator>shamain anjum</dc:creator>
      <pubDate>Wed, 07 May 2025 18:58:30 +0000</pubDate>
      <link>https://dev.to/shamain_anjum/getting-started-with-ansible-on-red-hat-linux-me7</link>
      <guid>https://dev.to/shamain_anjum/getting-started-with-ansible-on-red-hat-linux-me7</guid>
      <description>&lt;p&gt;Welcome to &lt;strong&gt;Day 23&lt;/strong&gt; of the 30 Days of Linux Challenge!&lt;br&gt;&lt;br&gt;
Today we’re entering the world of &lt;strong&gt;automation&lt;/strong&gt; using one of the most powerful tools available in the Red Hat ecosystem: &lt;strong&gt;Ansible&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Ansible lets you automate repetitive tasks — like updating systems, installing packages, configuring files, and managing entire server fleets — using simple, human-readable YAML files.&lt;/p&gt;

&lt;h2&gt;
  
  
  📚 Table of Contents
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;What is Ansible?&lt;/li&gt;
&lt;li&gt;Install Ansible on Red Hat Linux&lt;/li&gt;
&lt;li&gt;Configure Local Inventory&lt;/li&gt;
&lt;li&gt;Run Ad-Hoc Commands&lt;/li&gt;
&lt;li&gt;Write Your First Playbook&lt;/li&gt;
&lt;li&gt;Run the Playbook&lt;/li&gt;
&lt;li&gt;Try It Yourself&lt;/li&gt;
&lt;li&gt;Why This Matters&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What is Ansible?
&lt;/h2&gt;

&lt;p&gt;Ansible is a &lt;strong&gt;declarative automation engine&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Uses &lt;strong&gt;YAML playbooks&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Connects over SSH (agentless)&lt;/li&gt;
&lt;li&gt;Scales from single node to 1000s of systems&lt;/li&gt;
&lt;li&gt;Works perfectly with &lt;strong&gt;Red Hat Enterprise Linux&lt;/strong&gt;, &lt;strong&gt;CentOS&lt;/strong&gt;, &lt;strong&gt;Fedora&lt;/strong&gt;, and more&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Install Ansible on Red Hat Linux
&lt;/h2&gt;

&lt;p&gt;sudo subscription-manager repos --enable codeready-builder-for-rhel-9-x86_64-rpms&lt;br&gt;
sudo subscription-manager repos --enable ansible-2.9-for-rhel-9-x86_64-rpms&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffpnrs71h8werj2fsqb60.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffpnrs71h8werj2fsqb60.png" alt="Image description" width="649" height="206"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Verify version:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;ansible --version&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fp963g72r5zuxx5t5tsgn.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fp963g72r5zuxx5t5tsgn.png" alt="Image description" width="654" height="226"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Configure Local Inventory&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Create an inventory file:&lt;/p&gt;

&lt;p&gt;mkdir ~/ansible&lt;br&gt;
cd ~/ansible&lt;br&gt;
nano hosts&lt;/p&gt;

&lt;p&gt;Add this to target your own machine:&lt;/p&gt;

&lt;p&gt;localhost ansible_connection=local&lt;/p&gt;

&lt;p&gt;Test connection:&lt;/p&gt;

&lt;p&gt;ansible localhost -m ping -i hosts&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fguc9kgvt1bmbl3sxfl9q.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fguc9kgvt1bmbl3sxfl9q.png" alt="Image description" width="654" height="226"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Expected result:&lt;/p&gt;

&lt;p&gt;json&lt;br&gt;
Copy&lt;br&gt;
localhost | SUCCESS =&amp;gt; {&lt;br&gt;
    "changed": false,&lt;br&gt;
    "ping": "pong"&lt;br&gt;
}&lt;/p&gt;

&lt;h2&gt;
  
  
  Run Ad-Hoc Commands
&lt;/h2&gt;

&lt;p&gt;List all users:&lt;/p&gt;

&lt;p&gt;ansible localhost -m command -a "whoami" -i hosts&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fop35aibppgkol8dkll4h.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fop35aibppgkol8dkll4h.png" alt="Image description" width="645" height="97"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Install a package:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;ansible localhost -m dnf -a "name=htop state=present" -i hosts --become&lt;/p&gt;

&lt;p&gt;Write Your First Playbook&lt;br&gt;
Create a YAML file:&lt;br&gt;
nano setup.yml&lt;/p&gt;

&lt;p&gt;Example playbook:&lt;/p&gt;

&lt;p&gt;yaml&lt;/p&gt;

&lt;h2&gt;
  
  
  Copy
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;name: Basic Setup Playbook
hosts: localhost
become: true&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;tasks:&lt;br&gt;
    - name: Install htop&lt;br&gt;
      dnf:&lt;br&gt;
        name: htop&lt;br&gt;
        state: present&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;- name: Ensure NTP is installed
  dnf:
    name: chrony
    state: present

- name: Start and enable NTP service
  service:
    name: chronyd
    state: started
    enabled: true
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fm0e510d844kr59kulg2o.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fm0e510d844kr59kulg2o.png" alt="Image description" width="620" height="399"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Run the Playbook
&lt;/h2&gt;

&lt;p&gt;ansible-playbook -i hosts setup.yml&lt;/p&gt;

&lt;p&gt;This will:&lt;/p&gt;

&lt;p&gt;Install htop and chrony&lt;/p&gt;

&lt;p&gt;Start and enable the chronyd time service&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F39kmwwd9b7ccitfrhurd.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F39kmwwd9b7ccitfrhurd.png" alt="Image description" width="653" height="330"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Try It Yourself
&lt;/h2&gt;

&lt;p&gt;🧪 Practice tasks:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Install another package using a playbook (e.g. git, tree)&lt;/li&gt;
&lt;li&gt;Use Ansible to start or restart a service&lt;/li&gt;
&lt;li&gt;Create a user with the user module&lt;/li&gt;
&lt;li&gt;Run an ad-hoc uptime or df -h check across multiple hosts&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Why This Matters
&lt;/h2&gt;

&lt;p&gt;With Ansible, you can:&lt;/p&gt;

&lt;p&gt;✅ Eliminate repetitive manual tasks&lt;br&gt;
✅ Maintain consistency across systems&lt;br&gt;
✅ Automate patching, provisioning, and configuration&lt;br&gt;
✅ Scale easily from local to cloud infrastructure&lt;/p&gt;

&lt;p&gt;Whether you’re a sysadmin or DevOps engineer, Ansible is your command center for intelligent automation.&lt;/p&gt;

</description>
      <category>cloudwhistler</category>
      <category>devops</category>
      <category>linux</category>
      <category>redhat</category>
    </item>
    <item>
      <title>Backup and File Protection in Red Hat Linux</title>
      <dc:creator>shamain anjum</dc:creator>
      <pubDate>Tue, 06 May 2025 19:10:40 +0000</pubDate>
      <link>https://dev.to/shamain_anjum/backup-and-file-protection-in-red-hat-linux-3ic4</link>
      <guid>https://dev.to/shamain_anjum/backup-and-file-protection-in-red-hat-linux-3ic4</guid>
      <description>&lt;p&gt;Welcome to &lt;strong&gt;Day 22&lt;/strong&gt; of the 30 Days of Linux Challenge!&lt;br&gt;&lt;br&gt;
Today I explored the essentials of &lt;strong&gt;backup and file protection&lt;/strong&gt; — a critical skill for system administrators, DevOps engineers, and even developers managing their own environments.&lt;/p&gt;

&lt;p&gt;Whether it's user data, server configs, or logs — backups help recover from mistakes, failures, and cyber threats.&lt;/p&gt;

&lt;h2&gt;
  
  
  📚 Table of Contents
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Why Backups Matter&lt;/li&gt;
&lt;li&gt;Core Linux Backup Tools&lt;/li&gt;
&lt;li&gt;Backup Using tar&lt;/li&gt;
&lt;li&gt;Sync Files with rsync&lt;/li&gt;
&lt;li&gt;Schedule Backups with cron&lt;/li&gt;
&lt;li&gt;Store and Protect Backups&lt;/li&gt;
&lt;li&gt;Try It Yourself&lt;/li&gt;
&lt;li&gt;Real-World Backup Patterns&lt;/li&gt;
&lt;li&gt;Why This Matters&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Why Backups Matter
&lt;/h2&gt;

&lt;p&gt;Backups protect you from:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Human error (&lt;code&gt;rm -rf&lt;/code&gt;, accidental overwrites)&lt;/li&gt;
&lt;li&gt;System crashes and hardware failure&lt;/li&gt;
&lt;li&gt;Misconfigurations or security breaches&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you're managing anything important — &lt;strong&gt;you need a backup plan.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Core Linux Backup Tools
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Tool&lt;/th&gt;
&lt;th&gt;Use Case&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;cp&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Simple file copy&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;tar&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Archive and compress folders&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;rsync&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Sync files (local or remote)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;cron&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Schedule automated backups&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Backup Using &lt;code&gt;tar&lt;/code&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Backup /etc directory&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;sudo tar -czvf etc-backup-$(date +%F).tar.gz /etc&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flh6lxa2amcjk7uh38djm.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flh6lxa2amcjk7uh38djm.png" alt="Image description" width="618" height="417"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Flags:&lt;/p&gt;

&lt;p&gt;-c: create&lt;/p&gt;

&lt;p&gt;-z: compress (gzip)&lt;/p&gt;

&lt;p&gt;-v: verbose&lt;/p&gt;

&lt;p&gt;-f: filename&lt;/p&gt;

&lt;p&gt;To extract:&lt;/p&gt;

&lt;p&gt;tar -xzvf etc-backup-2024-04-30.tar.gz -C /restore/path&lt;/p&gt;

&lt;h2&gt;
  
  
  Sync Files with rsync
&lt;/h2&gt;

&lt;p&gt;Basic usage:&lt;/p&gt;

&lt;p&gt;rsync -avh /etc/ /backups/etc/&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwfxbtepvrh3cl9n1w1zr.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwfxbtepvrh3cl9n1w1zr.png" alt="Image description" width="637" height="352"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Remote sync over SSH:&lt;/p&gt;

&lt;p&gt;rsync -az /var/www/ user@backupserver:/data/web_backup/&lt;/p&gt;

&lt;p&gt;Flags:&lt;/p&gt;

&lt;p&gt;-a: archive mode (preserves permissions)&lt;/p&gt;

&lt;p&gt;-v: verbose&lt;/p&gt;

&lt;p&gt;-h: human-readable&lt;/p&gt;

&lt;h2&gt;
  
  
  Schedule Backups with cron
&lt;/h2&gt;

&lt;p&gt;Open crontab:&lt;br&gt;
crontab -e&lt;/p&gt;

&lt;p&gt;Run backup every day at 2 AM:&lt;/p&gt;

&lt;p&gt;0 2 * * * /usr/bin/rsync -az /home /backups/home&lt;/p&gt;

&lt;p&gt;List jobs:&lt;/p&gt;

&lt;p&gt;crontab -l&lt;/p&gt;

&lt;h2&gt;
  
  
  Store and Protect Backups
&lt;/h2&gt;

&lt;p&gt;🔐 Storage options:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Secondary disk&lt;/li&gt;
&lt;li&gt;External drive&lt;/li&gt;
&lt;li&gt;Offsite/Cloud (rsync.net, S3, etc.)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;🔐 Protect with encryption:&lt;/p&gt;

&lt;p&gt;gpg -c mybackup.tar.gz&lt;/p&gt;

&lt;p&gt;Or using openssl:&lt;/p&gt;

&lt;p&gt;openssl enc -aes-256-cbc -in backup.tar.gz -out backup.enc&lt;/p&gt;

&lt;h2&gt;
  
  
  Try It Yourself
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Create a backup of /etc&lt;/strong&gt;&lt;br&gt;
sudo tar -czvf etc-$(date +%F).tar.gz /etc&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Sync /home to backup drive&lt;/strong&gt;&lt;br&gt;
rsync -avh /home/ /mnt/backup/home/&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Schedule a daily sync with cron&lt;/strong&gt;&lt;br&gt;
crontab -e&lt;/p&gt;

&lt;p&gt;-Add: 0 3 * * * rsync -az /etc /backups/etc&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Find the 5 largest folders&lt;/strong&gt;&lt;br&gt;
du -h / --max-depth=2 | sort -hr | head -n 5&lt;/p&gt;

&lt;h2&gt;
  
  
  Real-World Backup Patterns
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Task&lt;/th&gt;
&lt;th&gt;Tool Used&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Backup system configs&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;tar&lt;/code&gt;, &lt;code&gt;cron&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Sync user files&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;rsync&lt;/code&gt;, &lt;code&gt;cp&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Automate daily backups&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;cron&lt;/code&gt;, &lt;code&gt;rsync&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Restore backups&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;tar&lt;/code&gt;, &lt;code&gt;cp&lt;/code&gt;, &lt;code&gt;rsync&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Encrypt sensitive archives&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;gpg&lt;/code&gt;, &lt;code&gt;openssl&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Why This Matters
&lt;/h2&gt;

&lt;p&gt;Linux is powerful — but not immune to failure.&lt;/p&gt;

&lt;p&gt;With a smart backup strategy, you can:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Protect critical systems&lt;/li&gt;
&lt;li&gt;Respond quickly to accidents&lt;/li&gt;
&lt;li&gt;Sleep better knowing your data is safe&lt;/li&gt;
&lt;li&gt;Even a simple weekly tar archive can be a lifesaver.&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>cloudwhistler</category>
      <category>devops</category>
      <category>redhat</category>
      <category>linux</category>
    </item>
    <item>
      <title>User and Group Management in Red Hat Linux</title>
      <dc:creator>shamain anjum</dc:creator>
      <pubDate>Sun, 04 May 2025 07:57:44 +0000</pubDate>
      <link>https://dev.to/shamain_anjum/user-and-group-management-in-red-hat-linux-a7e</link>
      <guid>https://dev.to/shamain_anjum/user-and-group-management-in-red-hat-linux-a7e</guid>
      <description>&lt;p&gt;Welcome to &lt;strong&gt;Day 21&lt;/strong&gt; of the 30 Days of Linux Challenge!&lt;br&gt;&lt;br&gt;
Today I focused on one of the most fundamental sysadmin tasks: &lt;strong&gt;managing users and groups&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;If you’re running multi-user servers, managing team access, or securing a Linux system, user and group management is at the core of everything.&lt;/p&gt;

&lt;h2&gt;
  
  
  📚 Table of Contents
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Why User Management Matters&lt;/li&gt;
&lt;li&gt;Add a New User&lt;/li&gt;
&lt;li&gt;Add User with Home Directory and Comment&lt;/li&gt;
&lt;li&gt;Modify a User&lt;/li&gt;
&lt;li&gt;Lock/Unlock a User&lt;/li&gt;
&lt;li&gt;Delete a User&lt;/li&gt;
&lt;li&gt;Group Management&lt;/li&gt;
&lt;li&gt;View User and Group Details&lt;/li&gt;
&lt;li&gt;Create a Sudo User&lt;/li&gt;
&lt;li&gt;Try It Yourself&lt;/li&gt;
&lt;li&gt;Real-World Scenarios&lt;/li&gt;
&lt;li&gt;Why This Matters&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Why User Management Matters
&lt;/h2&gt;

&lt;p&gt;In a multi-user system:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Everyone needs secure, isolated access&lt;/li&gt;
&lt;li&gt;Permissions are tied to users and groups&lt;/li&gt;
&lt;li&gt;Services run under user IDs (UIDs)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Good user management = better control, security, and scalability.&lt;/p&gt;

&lt;h2&gt;
  
  
  Add a New User
&lt;/h2&gt;

&lt;p&gt;sudo useradd ali&lt;br&gt;
sudo passwd ali&lt;/p&gt;

&lt;p&gt;This:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Adds user to /etc/passwd&lt;/li&gt;
&lt;li&gt;Sets home directory, shell, and default group&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fa8ce1vxdzfrq1ap0yuvh.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fa8ce1vxdzfrq1ap0yuvh.png" alt="Image description" width="545" height="120"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Add User with Home Directory and Comment
&lt;/h2&gt;

&lt;p&gt;sudo useradd -m -c "John Doe" johnd&lt;/p&gt;

&lt;p&gt;Flags:&lt;/p&gt;

&lt;p&gt;-m → create home directory&lt;/p&gt;

&lt;p&gt;-c → add a description/comment&lt;/p&gt;

&lt;h2&gt;
  
  
  Modify a User
&lt;/h2&gt;

&lt;p&gt;Change username:&lt;br&gt;
sudo usermod -l newname oldname&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Move home directory:&lt;/strong&gt;&lt;br&gt;
sudo usermod -d /new/path -m user&lt;/p&gt;

&lt;h2&gt;
  
  
  Lock/Unlock a User
&lt;/h2&gt;

&lt;p&gt;Lock:&lt;br&gt;
sudo usermod -L ali&lt;/p&gt;

&lt;p&gt;Unlock:&lt;br&gt;
sudo usermod -U ali&lt;/p&gt;

&lt;p&gt;Useful for temporarily suspending accounts.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsmr7n1i0hhl3iil8bfjt.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsmr7n1i0hhl3iil8bfjt.png" alt="Image description" width="374" height="61"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Delete a User
&lt;/h2&gt;

&lt;p&gt;sudo userdel -r johnd&lt;/p&gt;

&lt;p&gt;-r: removes home directory too&lt;/p&gt;

&lt;h2&gt;
  
  
  Group Management
&lt;/h2&gt;

&lt;p&gt;Create a new group:&lt;/p&gt;

&lt;p&gt;sudo groupadd developers&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8iv928nkcusmd55jbxfc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8iv928nkcusmd55jbxfc.png" alt="Image description" width="374" height="61"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Add user to group:&lt;/strong&gt;&lt;br&gt;
sudo usermod -aG developers john&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Funig2z9w5fmlv1efu4vu.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Funig2z9w5fmlv1efu4vu.png" alt="Image description" width="374" height="61"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;List user’s groups:&lt;br&gt;
groups john&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frxlowxguwq3ahi0l91ak.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frxlowxguwq3ahi0l91ak.png" alt="Image description" width="374" height="61"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Change primary group:&lt;br&gt;
sudo usermod -g admins john&lt;/p&gt;

&lt;h2&gt;
  
  
  View User and Group Details
&lt;/h2&gt;

&lt;p&gt;File    Description&lt;br&gt;
/etc/passwd User details (UID, home, shell)&lt;br&gt;
/etc/shadow Encrypted passwords + expiration&lt;br&gt;
/etc/group  Group definitions and memberships&lt;/p&gt;

&lt;p&gt;View a user's entry:&lt;br&gt;
grep john /etc/passwd&lt;/p&gt;

&lt;h2&gt;
  
  
  Create a Sudo User
&lt;/h2&gt;

&lt;p&gt;sudo useradd alice&lt;/p&gt;

&lt;p&gt;sudo passwd alice&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fib35buodk5uu1djily0e.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fib35buodk5uu1djily0e.png" alt="Image description" width="518" height="149"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;sudo usermod -aG wheel alice&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F13ot60qaa61o7v07e8pd.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F13ot60qaa61o7v07e8pd.png" alt="Image description" width="456" height="117"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Red Hat-based systems use the wheel group for sudo access.&lt;/p&gt;

&lt;h2&gt;
  
  
  Try It Yourself
&lt;/h2&gt;

&lt;h1&gt;
  
  
  Add a user with a home directory
&lt;/h1&gt;

&lt;p&gt;sudo useradd -m testuser&lt;/p&gt;

&lt;h1&gt;
  
  
  Set password
&lt;/h1&gt;

&lt;p&gt;sudo passwd testuser&lt;/p&gt;

&lt;h1&gt;
  
  
  Add to a group
&lt;/h1&gt;

&lt;p&gt;sudo groupadd testers&lt;br&gt;
sudo usermod -aG testers testuser&lt;/p&gt;

&lt;h1&gt;
  
  
  Lock and unlock
&lt;/h1&gt;

&lt;p&gt;sudo usermod -L testuser&lt;br&gt;
sudo usermod -U testuser&lt;/p&gt;

&lt;h1&gt;
  
  
  Delete user and home
&lt;/h1&gt;

&lt;p&gt;sudo userdel -r testuser&lt;/p&gt;

&lt;h2&gt;
  
  
  Real-World Scenarios
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Scenario&lt;/th&gt;
&lt;th&gt;Tool/Command&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Add a new developer&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;useradd&lt;/code&gt;, &lt;code&gt;passwd&lt;/code&gt;, &lt;code&gt;groupadd&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Add user to project groups&lt;/td&gt;
&lt;td&gt;&lt;code&gt;usermod -aG&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Create a sudo admin&lt;/td&gt;
&lt;td&gt;&lt;code&gt;usermod -aG wheel&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Temporarily suspend user&lt;/td&gt;
&lt;td&gt;&lt;code&gt;usermod -L&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cleanly remove a user&lt;/td&gt;
&lt;td&gt;&lt;code&gt;userdel -r&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Why This Matters
&lt;/h2&gt;

&lt;p&gt;Linux permissions, access control, and identity management all revolve around users and groups.&lt;/p&gt;

&lt;p&gt;As a sysadmin or DevOps engineer, you’ll:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Onboard and offboard users&lt;/li&gt;
&lt;li&gt;Grant precise access to services&lt;/li&gt;
&lt;li&gt;Protect systems from unauthorized entry&lt;/li&gt;
&lt;li&gt;Mastering user management is foundational to secure and efficient Linux administration.&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>cloudwhistler</category>
      <category>devops</category>
      <category>redhat</category>
      <category>linux</category>
    </item>
    <item>
      <title>Disk Usage &amp; File System Monitoring in Red Hat Linux</title>
      <dc:creator>shamain anjum</dc:creator>
      <pubDate>Fri, 02 May 2025 15:38:17 +0000</pubDate>
      <link>https://dev.to/shamain_anjum/disk-usage-file-system-monitoring-in-red-hat-linux-360m</link>
      <guid>https://dev.to/shamain_anjum/disk-usage-file-system-monitoring-in-red-hat-linux-360m</guid>
      <description>&lt;p&gt;Welcome to &lt;strong&gt;Day 20&lt;/strong&gt; of the 30 Days of Linux Challenge!&lt;br&gt;&lt;br&gt;
Today I focused on &lt;strong&gt;disk usage and file system monitoring&lt;/strong&gt; — a must-have skill for preventing crashes, outages, and silent failures in Linux systems.&lt;/p&gt;

&lt;p&gt;If you've ever had a system fail because &lt;code&gt;/var&lt;/code&gt; or &lt;code&gt;/tmp&lt;/code&gt; filled up, you'll know why this topic is crucial.&lt;/p&gt;

&lt;h2&gt;
  
  
  📚 Table of Contents
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Why Disk Monitoring Matters&lt;/li&gt;
&lt;li&gt;Check Disk Space with df&lt;/li&gt;
&lt;li&gt;Analyze Directory Size with du&lt;/li&gt;
&lt;li&gt;View Block Devices with lsblk&lt;/li&gt;
&lt;li&gt;Mounted File Systems with mount&lt;/li&gt;
&lt;li&gt;Find Large Files&lt;/li&gt;
&lt;li&gt;Clean-Up Tips&lt;/li&gt;
&lt;li&gt;Try It Yourself&lt;/li&gt;
&lt;li&gt;Real-World Use Cases&lt;/li&gt;
&lt;li&gt;Why This Matters&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Why Disk Monitoring Matters
&lt;/h2&gt;

&lt;p&gt;Linux won't always alert you when:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Disk space is about to run out&lt;/li&gt;
&lt;li&gt;Backups are failing due to full storage&lt;/li&gt;
&lt;li&gt;Logs are overwhelming &lt;code&gt;/var&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Without monitoring:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Applications can crash&lt;/li&gt;
&lt;li&gt;Services may silently fail&lt;/li&gt;
&lt;li&gt;You risk total system instability&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Check Disk Space with &lt;code&gt;df&lt;/code&gt;
&lt;/h2&gt;

&lt;p&gt;df -h&lt;/p&gt;

&lt;p&gt;Flag    Meaning&lt;br&gt;
-h  Human-readable (GB, MB, etc.)&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4zos4jh4h4zjkxtrlq9p.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4zos4jh4h4zjkxtrlq9p.png" alt="Image description" width="535" height="188"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Sample output:&lt;/p&gt;

&lt;p&gt;Filesystem      Size  Used Avail Use% Mounted on&lt;br&gt;
/dev/sda3       100G   75G   25G  75% /&lt;br&gt;
tmpfs            16G     0   16G   0% /dev/shm&lt;/p&gt;

&lt;h2&gt;
  
  
  Analyze Directory Size with du
&lt;/h2&gt;

&lt;p&gt;du -sh /var/log&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fteoyzjefepun8nqywkq1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fteoyzjefepun8nqywkq1.png" alt="Image description" width="367" height="59"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Break down large folders:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;du -h --max-depth=1 /home&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fn3ln6h3ecwrridgb4y3d.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fn3ln6h3ecwrridgb4y3d.png" alt="Image description" width="441" height="126"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Useful for finding:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Disk-heavy users&lt;/li&gt;
&lt;li&gt;Log folders gone wild&lt;/li&gt;
&lt;li&gt;Forgotten downloads&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  View Block Devices with lsblk
&lt;/h2&gt;

&lt;p&gt;lsblk&lt;/p&gt;

&lt;p&gt;Visualizes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Disks&lt;/li&gt;
&lt;li&gt;Partitions&lt;/li&gt;
&lt;li&gt;Mount points&lt;/li&gt;
&lt;li&gt;LVM volumes&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Example:&lt;/p&gt;

&lt;p&gt;NAME   MAJ:MIN RM SIZE RO TYPE MOUNTPOINT&lt;br&gt;
sda      8:0    0 100G  0 disk &lt;br&gt;
├─sda1   8:1    0   1G  0 part /boot&lt;br&gt;
└─sda2   8:2    0  99G  0 part /&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Foottla380ysedi30qrjb.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Foottla380ysedi30qrjb.png" alt="Image description" width="444" height="180"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Mounted File Systems with mount
&lt;/h2&gt;

&lt;p&gt;mount | column -t&lt;/p&gt;

&lt;p&gt;See:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Devices&lt;/li&gt;
&lt;li&gt;Mount paths&lt;/li&gt;
&lt;li&gt;File system types&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxgxqs08wvcovv94arq25.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxgxqs08wvcovv94arq25.png" alt="Image description" width="650" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Alternative:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;findmnt&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1re18hl5ufe8it3y6hf6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1re18hl5ufe8it3y6hf6.png" alt="Image description" width="650" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Find Large Files
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;All files over 1 GB&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;find / -type f -size +1G 2&amp;gt;/dev/null&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fybe9y1n2dmw9lkca4aqe.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fybe9y1n2dmw9lkca4aqe.png" alt="Image description" width="511" height="75"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Sort by size:&lt;/strong&gt;&lt;br&gt;
ls -lhS /var/log&lt;/p&gt;

&lt;p&gt;Interactive viewer:&lt;/p&gt;

&lt;p&gt;sudo dnf install ncdu&lt;br&gt;
sudo ncdu /&lt;/p&gt;

&lt;h2&gt;
  
  
  Clean-Up Tips
&lt;/h2&gt;

&lt;p&gt;Clear package cache:&lt;/p&gt;

&lt;p&gt;sudo dnf clean all&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fixkxblgsm63jdcyk9f6m.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fixkxblgsm63jdcyk9f6m.png" alt="Image description" width="393" height="110"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Truncate log files:&lt;br&gt;
sudo truncate -s 0 /var/log/messages&lt;/p&gt;

&lt;p&gt;Clear systemd journal logs:&lt;br&gt;
sudo journalctl --vacuum-time=7d&lt;/p&gt;

&lt;h2&gt;
  
  
  Try It Yourself
&lt;/h2&gt;

&lt;p&gt;-Check overall disk usage&lt;br&gt;
df -h&lt;/p&gt;

&lt;p&gt;-Identify large folders&lt;br&gt;
du -h --max-depth=1 /var&lt;/p&gt;

&lt;p&gt;-List block devices&lt;br&gt;
lsblk&lt;/p&gt;

&lt;p&gt;-Search large files&lt;br&gt;
find / -type f -size +500M&lt;/p&gt;

&lt;p&gt;-Check mount points&lt;br&gt;
mount | column -t&lt;/p&gt;

&lt;h2&gt;
  
  
  Real-World Use Cases
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Task&lt;/th&gt;
&lt;th&gt;Tool Used&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Monitor storage usage&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;df&lt;/code&gt;, &lt;code&gt;lsblk&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Identify large folders/files&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;du&lt;/code&gt;, &lt;code&gt;find&lt;/code&gt;, &lt;code&gt;ls -lhS&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Visualize partition layout&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;lsblk&lt;/code&gt;, &lt;code&gt;mount&lt;/code&gt;, &lt;code&gt;findmnt&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Clean unused data&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;dnf clean&lt;/code&gt;, &lt;code&gt;truncate&lt;/code&gt;, &lt;code&gt;journalctl&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Validate backup targets&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;df&lt;/code&gt;, &lt;code&gt;ncdu&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Why This Matters
&lt;/h2&gt;

&lt;p&gt;Running out of disk space can:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Break services and applications&lt;/li&gt;
&lt;li&gt;Cause data loss&lt;/li&gt;
&lt;li&gt;Crash entire systems&lt;/li&gt;
&lt;li&gt;Monitoring and cleaning storage isn’t optional — it’s survival.&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>cloudwhistler</category>
      <category>devops</category>
      <category>redhat</category>
      <category>linux</category>
    </item>
    <item>
      <title>Process Management in Red Hat Linux</title>
      <dc:creator>shamain anjum</dc:creator>
      <pubDate>Thu, 01 May 2025 19:40:43 +0000</pubDate>
      <link>https://dev.to/shamain_anjum/process-management-in-red-hat-linux-okn</link>
      <guid>https://dev.to/shamain_anjum/process-management-in-red-hat-linux-okn</guid>
      <description>&lt;p&gt;Welcome to &lt;strong&gt;Day 19&lt;/strong&gt; of the 30 Days of Linux Challenge!&lt;br&gt;&lt;br&gt;
Today’s focus is all about &lt;strong&gt;process management&lt;/strong&gt; — the backbone of performance monitoring and system control on any Linux-based system.&lt;/p&gt;

&lt;p&gt;Processes are everywhere: system daemons, services, shell commands, and user applications. If you want to be a system administrator or DevOps engineer, this is a skill you &lt;em&gt;must&lt;/em&gt; master.&lt;/p&gt;

&lt;h2&gt;
  
  
  📚 Table of Contents
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;What Are Processes in Linux?&lt;/li&gt;
&lt;li&gt;View Running Processes&lt;/li&gt;
&lt;li&gt;Real-Time Monitoring with top&lt;/li&gt;
&lt;li&gt;Enhanced Process Monitoring with htop&lt;/li&gt;
&lt;li&gt;Controlling Processes (kill, pkill)&lt;/li&gt;
&lt;li&gt;Foreground vs Background Jobs&lt;/li&gt;
&lt;li&gt;Process Priorities with nice and renice&lt;/li&gt;
&lt;li&gt;Try It Yourself&lt;/li&gt;
&lt;li&gt;Common Process Tools Summary&lt;/li&gt;
&lt;li&gt;Why This Matters&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What Are Processes in Linux?
&lt;/h2&gt;

&lt;p&gt;A &lt;strong&gt;process&lt;/strong&gt; is an instance of a running program.&lt;/p&gt;

&lt;p&gt;Every process has:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A unique &lt;strong&gt;PID&lt;/strong&gt; (Process ID)&lt;/li&gt;
&lt;li&gt;A &lt;strong&gt;parent process&lt;/strong&gt; (PPID)&lt;/li&gt;
&lt;li&gt;A &lt;strong&gt;state&lt;/strong&gt; (e.g., sleeping, running)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Resource usage&lt;/strong&gt; (memory, CPU, etc.)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Everything from your terminal to the web server is a process — and they’re all managed by the Linux kernel.&lt;/p&gt;

&lt;h2&gt;
  
  
  View Running Processes
&lt;/h2&gt;

&lt;h3&gt;
  
  
  &lt;code&gt;ps&lt;/code&gt; – Process Snapshot
&lt;/h3&gt;

&lt;p&gt;ps&lt;br&gt;
ps aux&lt;br&gt;
ps aux | grep sshd&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpgts8qpeukhgvjgjk5i3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpgts8qpeukhgvjgjk5i3.png" alt="Image description" width="740" height="303"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Flag    Meaning&lt;br&gt;
a   All users&lt;br&gt;
u   User format&lt;br&gt;
x   Show background processes&lt;/p&gt;

&lt;h2&gt;
  
  
  Real-Time Monitoring with top
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;top&lt;/strong&gt;&lt;br&gt;
Live view of:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;CPU &amp;amp; memory usage&lt;/li&gt;
&lt;li&gt;PID, user, command&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Process states&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Keys inside top:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;M → Sort by memory&lt;/li&gt;
&lt;li&gt;P → Sort by CPU&lt;/li&gt;
&lt;li&gt;k → Kill a process&lt;/li&gt;
&lt;li&gt;q → Quit&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Enhanced Process Monitoring with htop
&lt;/h2&gt;

&lt;p&gt;Flag    Meaning&lt;br&gt;
a   All users&lt;br&gt;
u   User format&lt;br&gt;
x   Show background processes&lt;/p&gt;

&lt;h2&gt;
  
  
  Real-Time Monitoring with top
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;top&lt;/strong&gt;&lt;br&gt;
Live view of:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;CPU &amp;amp; memory usage&lt;/li&gt;
&lt;li&gt;PID, user, command&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Feqaa6i9n9r1fppwivzcf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Feqaa6i9n9r1fppwivzcf.png" alt="Image description" width="651" height="447"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Process states&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Keys inside top:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;M → Sort by memory&lt;/li&gt;
&lt;li&gt;P → Sort by CPU&lt;/li&gt;
&lt;li&gt;k → Kill a process&lt;/li&gt;
&lt;li&gt;q → Quit&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Enhanced Process Monitoring with htop
&lt;/h2&gt;

&lt;p&gt;sudo dnf install htop&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F11xaji30nv91ivsspkp9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F11xaji30nv91ivsspkp9.png" alt="Image description" width="740" height="303"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;htop&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Features:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Color-coded UI&lt;/li&gt;
&lt;li&gt;Easier navigation&lt;/li&gt;
&lt;li&gt;Interactive kill and renice&lt;/li&gt;
&lt;li&gt;Tree view of parent-child relationships&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Controlling Processes (kill, pkill)
&lt;/h2&gt;

&lt;p&gt;Kill by PID:&lt;br&gt;
kill 1234&lt;/p&gt;

&lt;p&gt;Force kill:&lt;br&gt;
kill -9 1234&lt;/p&gt;

&lt;p&gt;Kill by name:&lt;br&gt;
pkill nginx&lt;/p&gt;

&lt;h2&gt;
  
  
  Foreground vs Background Jobs
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Run in background:&lt;/strong&gt;&lt;br&gt;
./script.sh &amp;amp;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Show jobs:&lt;/strong&gt;&lt;br&gt;
jobs&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Bring back to foreground:&lt;/strong&gt;&lt;br&gt;
fg %1&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Suspend with:&lt;/strong&gt;&lt;br&gt;
Ctrl + Z&lt;/p&gt;

&lt;h2&gt;
  
  
  Process Priorities with nice and renice
&lt;/h2&gt;

&lt;p&gt;Start process with lower priority:&lt;br&gt;
nice -n 10 ./heavy_task.sh&lt;/p&gt;

&lt;p&gt;Change priority of running process:&lt;br&gt;
renice +5 -p 1234&lt;/p&gt;

&lt;p&gt;Lower priority = friendlier to CPU.&lt;/p&gt;

&lt;h2&gt;
  
  
  Try It Yourself
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Check all running processes&lt;/strong&gt;&lt;br&gt;
ps aux&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Use top to monitor usage&lt;/strong&gt;&lt;br&gt;
top&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhykv5hrwcczy1wjllltg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhykv5hrwcczy1wjllltg.png" alt="Image description" width="651" height="447"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Install and run htop&lt;/strong&gt;&lt;br&gt;
sudo dnf install htop&lt;br&gt;
htop&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Kill a test process&lt;/strong&gt;&lt;br&gt;
kill -9 &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Start a script in the background&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;./loop_script.sh &amp;amp;&lt;br&gt;
jobs&lt;br&gt;
fg %1&lt;/p&gt;

&lt;h2&gt;
  
  
  Common Process Tools Summary
&lt;/h2&gt;

&lt;p&gt;Tool    Purpose&lt;br&gt;
ps  View current running processes&lt;br&gt;
top Live monitoring (CPU, memory)&lt;br&gt;
htop    Interactive and visual process tool&lt;br&gt;
kill    Stop a process by PID&lt;br&gt;
pkill   Kill a process by name&lt;br&gt;
nice    Start with specified priority&lt;br&gt;
renice  Change priority of running process&lt;/p&gt;

&lt;h2&gt;
  
  
  Why This Matters
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Without proper process management:&lt;/li&gt;
&lt;li&gt;Misbehaving programs can hog CPU or RAM&lt;/li&gt;
&lt;li&gt;Background scripts may go unnoticed&lt;/li&gt;
&lt;li&gt;You may lose control over your own server&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Understanding how to view, analyze, and control processes is vital for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Performance optimization&lt;/li&gt;
&lt;li&gt;Stability&lt;/li&gt;
&lt;li&gt;Incident response&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>cloudwhistler</category>
      <category>devops</category>
      <category>linux</category>
      <category>redhat</category>
    </item>
  </channel>
</rss>
