<?xml version="1.0" encoding="utf-8"?>
<rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:foaf="http://xmlns.com/foaf/0.1/" xmlns:og="http://ogp.me/ns#" xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#" xmlns:schema="http://schema.org/" xmlns:sioc="http://rdfs.org/sioc/ns#" xmlns:sioct="http://rdfs.org/sioc/types#" xmlns:skos="http://www.w3.org/2004/02/skos/core#" xmlns:xsd="http://www.w3.org/2001/XMLSchema#" version="2.0" xml:base="https://www.linuxjournal.com/">
  <channel>
    <title>HOW-TOs</title>
    <link>https://www.linuxjournal.com/</link>
    <description/>
    <language>en</language>
    
    <item>
  <title>Linux vs. Windows: What's the difference in 2025?</title>
  <link>https://www.linuxjournal.com/content/linux-vs-windows</link>
  <description>  &lt;div data-history-node-id="1340792" class="layout layout--onecol"&gt;
    &lt;div class="layout__region layout__region--content"&gt;
      
            &lt;div class="field field--name-node-author field--type-ds field--label-hidden field--item"&gt;by &lt;a title="View user profile." href="https://www.linuxjournal.com/users/george-whittaker" lang="" about="https://www.linuxjournal.com/users/george-whittaker" typeof="schema:Person" property="schema:name" datatype="" xml:lang=""&gt;George Whittaker&lt;/a&gt;&lt;/div&gt;
      
            &lt;div class="field field--name-body field--type-text-with-summary field--label-hidden field--item"&gt;&lt;p&gt;For users who are looking to try something new, or who are tired of their Mac OS or Windows operating systems, now just might be the time to switch to something else. The Mac OS system currently uses a UNIX core, which would make switching from Mac OS to Linux a fairly smooth transition. Windows users, on the other hand, will need to make some adjustments.&lt;/p&gt;

&lt;p&gt;The following tutorial will compare the Linux operating system to Microsoft Windows.&lt;/p&gt;

&lt;h2&gt;Microsoft Windows vs. Linux File System&lt;/h2&gt;

&lt;p&gt;Microsoft Windows files are stored on different data drives (C: D: E:). On Linux, beginning with the root directory, files are organized in a tree structure. This directory is the beginning of the file system. It branches out further across a variety of other subdirectories. The root directory is designated with a forward slash (/).&lt;/p&gt;

&lt;span class="h3-replacement"&gt;Key Differences&lt;/span&gt;

&lt;ul&gt;&lt;li&gt;Linux, an open-source operating system, can change source code as required, while Windows OS doesn’t have access to source code, as it is a commercial operating system.&lt;/li&gt;
	&lt;li&gt;Linux can detect bugs and fix them easier because of its stellar security, while Windows’ large userbase can be easily attacked by hackers.&lt;/li&gt;
	&lt;li&gt;Windows runs slowly, especially with older hardware, while Linux runs significantly faster.&lt;/li&gt;
	&lt;li&gt;With Windows operating systems, printers, CD-ROMs, and hard drives, are considered devices. Linux peripherals, including printers, CD-ROMs, and hard drives are considered files.&lt;/li&gt;
	&lt;li&gt;Windows uses data drives (C: D: E:) and folders to store files. Linux uses a tree structure beginning with the root directory to keep files organized.&lt;/li&gt;
	&lt;li&gt;There can be two files in the same directory with the same name in Linux. In Windows, users cannot have two files in the same folder with the exact same name.&lt;/li&gt;
	&lt;li&gt;In Microsoft Windows, program and system files are almost always stored in the C: drive, while program and system files on Linux can be found in different directories.&lt;/li&gt;
&lt;/ul&gt;&lt;span class="h3-replacement"&gt;File Types&lt;/span&gt;

&lt;p&gt;Everything is considered a file in UNIX and Linux. The keyboard, mouse, and printer are files, files are files, and directories are files.&lt;/p&gt;

&lt;span class="h3-replacement"&gt;General Files&lt;/span&gt;

&lt;p&gt;Also known as Ordinary Files, General Files can contain simply text, or programs, videos, and images. These files can be in Binary or ASCII format, as they are the most commonly used files on Linux.&lt;/p&gt;

&lt;span class="h3-replacement"&gt;Directory Files&lt;/span&gt;

&lt;p&gt;Directory Files are like a warehouse that can be used for other types of files. Users can have a subdirectory (a directory within a directory). Files can also be taken as folders found inside of the user’s Microsoft Windows operating system.&lt;/p&gt;&lt;/div&gt;
      
            &lt;div class="field field--name-node-link field--type-ds field--label-hidden field--item"&gt;  &lt;a href="https://www.linuxjournal.com/content/linux-vs-windows" hreflang="en"&gt;Go to Full Article&lt;/a&gt;
&lt;/div&gt;
      
    &lt;/div&gt;
  &lt;/div&gt;

</description>
  <pubDate>Sat, 15 Mar 2025 23:36:15 +0000</pubDate>
    <dc:creator>George Whittaker</dc:creator>
    <guid isPermaLink="false">1340792 at https://www.linuxjournal.com</guid>
    </item>
<item>
  <title>Setting up a Multi-Server Security Engine Installation</title>
  <link>https://www.linuxjournal.com/content/how-set-crowdsec-multi-server-installation</link>
  <description>  &lt;div data-history-node-id="1340833" class="layout layout--onecol"&gt;
    &lt;div class="layout__region layout__region--content"&gt;
      
            &lt;div class="field field--name-field-node-image field--type-image field--label-hidden field--item"&gt;  &lt;img loading="lazy" src="https://www.linuxjournal.com/sites/default/files/nodeimage/story/crowdsec-multi-server-installation.jpg" width="850" height="500" alt="Setting up a Multi-Server Security Engine Installation" typeof="foaf:Image" class="img-responsive" /&gt;&lt;/div&gt;
      
            &lt;div class="field field--name-node-author field--type-ds field--label-hidden field--item"&gt;by &lt;a title="View user profile." href="https://www.linuxjournal.com/users/manuel-sabban" lang="" about="https://www.linuxjournal.com/users/manuel-sabban" typeof="schema:Person" property="schema:name" datatype="" xml:lang=""&gt;Manuel Sabban&lt;/a&gt;&lt;/div&gt;
      
            &lt;div class="field field--name-body field--type-text-with-summary field--label-hidden field--item"&gt;&lt;p&gt;With the launch of Security Engine 1.0.x, we enabled the Security Engine to function as an HTTP REST API, allowing it to gather signals from other Security Engines.&lt;/p&gt;
&lt;p&gt;I will guide you through the steps to set up the CrowdSec Security Engine across multiple servers, where one server will serve as the parent and two additional machines will forward alerts to it.&lt;/p&gt;
&lt;h2&gt;Benefits&lt;/h2&gt;
&lt;p&gt;Sharing cybersecurity incidents across machines using the CrowdSec Security Engine is a highly effective strategy to enhance collective security defenses. By leveraging CrowdSec's capability to distribute remediations among connected machines, each machine benefits from real-time updates about new threats detected elsewhere in the network.&lt;/p&gt;
&lt;h2&gt;Architecture&lt;/h2&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;&lt;img alt="CrowdSec Goals Infographic" data-align="center" data-entity-type="file" data-entity-uuid="9ae01405-7de4-48fc-b823-7a548579d6e7" data-insert-class="" data-insert-type="image" height="988" src="https://www.linuxjournal.com/sites/default/files/u%5Buid%5D/crowdsec-goals-infographic.jpg" width="850" /&gt;&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;In the diagram above, the parent Security Engine, designated as &lt;code&gt;server-1&lt;/code&gt;, will be set up as the HTTP REST API, commonly known as the LAPI (Local API). This engine will be in charge of storing and distributing the gathered signals. Remediation is managed through the &lt;a href="https://docs.crowdsec.net/u/bouncers/intro/"&gt;Remediation Components&lt;/a&gt;, which depend on the LAPI offered by &lt;code&gt;server-1&lt;/code&gt;. It's crucial to understand that mitigation can occur independently from detection.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Server-2&lt;/code&gt; and &lt;code&gt;server-3&lt;/code&gt; are designated as internet-facing machines that will host services available to the public and will be known as the child Log Processors. On these servers, we will install CrowdSec Security Engine and &lt;a href="https://docs.crowdsec.net/u/bouncers/intro/"&gt;Remediation Components&lt;/a&gt;, which will interact with the &lt;code&gt;server-1&lt;/code&gt; LAPI.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; The phrase child Log Processors refers to a CrowdSec Security Engine that operates with its LAPI turned off. For more information on this, consult our &lt;a href="https://www.crowdsec.net/blog/updating-crowdsec-naming-taxonomy"&gt;Taxonomy Update Article&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;We strongly encourage you to explore the &lt;a href="https://app.crowdsec.net/hub/collections"&gt;CrowdSec Hub&lt;/a&gt; to learn about the extensive range of services the Security Engine can protect. This platform showcases the diverse capabilities of the Engine in securing everything from web applications to databases against cyber threats.&lt;/p&gt;&lt;/div&gt;
      
            &lt;div class="field field--name-node-link field--type-ds field--label-hidden field--item"&gt;  &lt;a href="https://www.linuxjournal.com/content/how-set-crowdsec-multi-server-installation" hreflang="en"&gt;Go to Full Article&lt;/a&gt;
&lt;/div&gt;
      
    &lt;/div&gt;
  &lt;/div&gt;

</description>
  <pubDate>Thu, 14 Mar 2024 16:00:00 +0000</pubDate>
    <dc:creator>Manuel Sabban</dc:creator>
    <guid isPermaLink="false">1340833 at https://www.linuxjournal.com</guid>
    </item>
<item>
  <title>Demystifying Kubernetes Operators: Creation, Benefits, and Use Cases</title>
  <link>https://www.linuxjournal.com/content/demystifying-kubernetes-operators-creation-benefits-and-use-cases</link>
  <description>  &lt;div data-history-node-id="1340909" class="layout layout--onecol"&gt;
    &lt;div class="layout__region layout__region--content"&gt;
      
            &lt;div class="field field--name-field-node-image field--type-image field--label-hidden field--item"&gt;  &lt;img loading="lazy" src="https://www.linuxjournal.com/sites/default/files/nodeimage/story/demystifying-kubernetes-operators-creation-benefits-and-use-cases.jpg" width="850" height="500" alt="Demystifying Kubernetes Operators: Creation, Benefits, and Use Cases" typeof="foaf:Image" class="img-responsive" /&gt;&lt;/div&gt;
      
            &lt;div class="field field--name-node-author field--type-ds field--label-hidden field--item"&gt;by &lt;a title="View user profile." href="https://www.linuxjournal.com/users/george-whittaker" lang="" about="https://www.linuxjournal.com/users/george-whittaker" typeof="schema:Person" property="schema:name" datatype="" xml:lang=""&gt;George Whittaker&lt;/a&gt;&lt;/div&gt;
      
            &lt;div class="field field--name-body field--type-text-with-summary field--label-hidden field--item"&gt;&lt;h2&gt;Introduction&lt;/h2&gt;

&lt;p&gt;Kubernetes is a powerful container orchestration platform that automates the deployment, scaling, and management of containerized applications. As Kubernetes continues to evolve, one of the concepts that has gained significant traction is the Kubernetes Operator. Operators extend the functionality of Kubernetes and provide a way to automate complex tasks, allowing users to manage applications and resources more efficiently. In this article, we will delve into the world of Kubernetes Operators, explore how they can be created, and examine their benefits and use cases.&lt;/p&gt;

&lt;h2&gt;Understanding Kubernetes Operators&lt;/h2&gt;

&lt;span class="h3-replacement"&gt;What are Kubernetes Operators?&lt;/span&gt;

&lt;p&gt;Kubernetes Operators are software extensions that enable automated management of complex applications and resources within a Kubernetes cluster. Operators encapsulate both the operational logic and domain-specific knowledge required to manage specific applications or services.&lt;/p&gt;

&lt;p&gt;Operators are built using the Kubernetes custom resource definition (CRD) and custom controllers. A CRD defines a new resource type in the cluster, while the custom controller is responsible for watching and reconciling the state of the custom resource based on the desired state specified by the user. Together, these components provide a declarative way to manage applications and resources.&lt;/p&gt;

&lt;span class="h3-replacement"&gt;Why Use Kubernetes Operators?&lt;/span&gt;

&lt;p&gt;Kubernetes Operators offer several benefits:&lt;/p&gt;

&lt;ol&gt;&lt;li&gt;&lt;strong&gt;Automation:&lt;/strong&gt; Operators automate complex operational tasks, such as backup, scaling, and configuration management, reducing manual intervention and human error.&lt;/li&gt;
	&lt;li&gt;&lt;strong&gt;Extensibility:&lt;/strong&gt; Operators extend the capabilities of Kubernetes, allowing for the management of custom resources and services.&lt;/li&gt;
	&lt;li&gt;&lt;strong&gt;Consistency:&lt;/strong&gt; Operators provide a consistent and standardized approach to managing applications across different environments.&lt;/li&gt;
	&lt;li&gt;&lt;strong&gt;Domain-Specific Knowledge:&lt;/strong&gt; Operators encapsulate expert knowledge about the application or service they manage, making it accessible to users who may not be experts in that domain.&lt;/li&gt;
&lt;/ol&gt;&lt;h2&gt;Creating a Kubernetes Operator&lt;/h2&gt;

&lt;span class="h3-replacement"&gt;Steps to Build an Operator&lt;/span&gt;

&lt;p&gt;Creating a Kubernetes Operator involves the following steps:&lt;/p&gt;&lt;/div&gt;
      
            &lt;div class="field field--name-node-link field--type-ds field--label-hidden field--item"&gt;  &lt;a href="https://www.linuxjournal.com/content/demystifying-kubernetes-operators-creation-benefits-and-use-cases" hreflang="en"&gt;Go to Full Article&lt;/a&gt;
&lt;/div&gt;
      
    &lt;/div&gt;
  &lt;/div&gt;

</description>
  <pubDate>Tue, 11 Apr 2023 16:00:00 +0000</pubDate>
    <dc:creator>George Whittaker</dc:creator>
    <guid isPermaLink="false">1340909 at https://www.linuxjournal.com</guid>
    </item>
<item>
  <title>Kubernetes vs. Docker: Exploring the Synergy in Containerization</title>
  <link>https://www.linuxjournal.com/content/kubernetes-and-docker-exploring-synergy-containerization</link>
  <description>  &lt;div data-history-node-id="1340907" class="layout layout--onecol"&gt;
    &lt;div class="layout__region layout__region--content"&gt;
      
            &lt;div class="field field--name-field-node-image field--type-image field--label-hidden field--item"&gt;  &lt;img loading="lazy" src="https://www.linuxjournal.com/sites/default/files/nodeimage/story/kubernetes-and-docker-exploring-the-synergy-in-containerization-cc0.jpg" width="850" height="500" alt="Kubernetes vs. Docker: Exploring the Synergy in Containerization" typeof="foaf:Image" class="img-responsive" /&gt;&lt;/div&gt;
      
            &lt;div class="field field--name-node-author field--type-ds field--label-hidden field--item"&gt;by &lt;a title="View user profile." href="https://www.linuxjournal.com/users/george-whittaker" lang="" about="https://www.linuxjournal.com/users/george-whittaker" typeof="schema:Person" property="schema:name" datatype="" xml:lang=""&gt;George Whittaker&lt;/a&gt;&lt;/div&gt;
      
            &lt;div class="field field--name-body field--type-text-with-summary field--label-hidden field--item"&gt;&lt;h2&gt;Introduction to Containerization&lt;/h2&gt;
&lt;p&gt;Containerization is a revolutionary technology that allows software to be packaged and deployed in a consistent manner across various environments. It resolves challenges such as dependency conflicts and platform discrepancies by encapsulating applications along with their dependencies in lightweight, portable containers. In this article, we will explore two prominent tools in the field of containerization: Kubernetes and Docker. We will delve into their roles, their differences, and how they work in harmony to facilitate containerized application deployments.&lt;/p&gt;
&lt;h2&gt;Understanding Docker: Creating and Running Containers&lt;/h2&gt;
&lt;p&gt;&lt;span class="h3-replacement"&gt;What is Docker?&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Docker is an open-source platform that automates the creation, deployment, and running of containerized applications. Docker provides the capability to build and package applications along with their dependencies into standardized units called containers. Containers can be thought of as lightweight, standalone executables that are isolated from the host system, yet share the same OS kernel.&lt;/p&gt;
&lt;p&gt;&lt;span class="h3-replacement"&gt;Key Features of Docker&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;&lt;strong&gt;Portability:&lt;/strong&gt; Docker containers can be run on any system that supports Docker, ensuring consistent behavior across different environments.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Isolation:&lt;/strong&gt; Each container runs in isolation with its own filesystem, ensuring that application dependencies do not interfere with each other.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Scalability:&lt;/strong&gt; Docker containers can be rapidly started, stopped, and scaled up or down as needed.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Version Control:&lt;/strong&gt; Docker images can be versioned and stored in a registry, enabling easy rollback to previous versions.&lt;/li&gt;
&lt;/ul&gt;&lt;h2&gt;Exploring Kubernetes: Orchestrating Containers at Scale&lt;/h2&gt;
&lt;p&gt;&lt;span class="h3-replacement"&gt;What is Kubernetes?&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Kubernetes, often abbreviated as K8s, is an open-source container orchestration platform that automates the deployment, scaling, and management of containerized applications. Kubernetes provides a powerful framework for managing distributed systems by organizing containers into groups called "pods" and managing their lifecycle across a cluster of machines.&lt;/p&gt;
&lt;p&gt;&lt;span class="h3-replacement"&gt;Key Features of Kubernetes&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Cluster Management:&lt;/strong&gt; Kubernetes clusters consist of one or more master nodes and multiple worker nodes that host containers.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;High Availability:&lt;/strong&gt; Kubernetes ensures that applications are highly available by automatically restarting failed containers and rescheduling them to healthy nodes.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Load Balancing:&lt;/strong&gt; Kubernetes distributes network traffic among multiple pods to ensure optimal resource utilization and responsiveness.&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;
      
            &lt;div class="field field--name-node-link field--type-ds field--label-hidden field--item"&gt;  &lt;a href="https://www.linuxjournal.com/content/kubernetes-and-docker-exploring-synergy-containerization" hreflang="en"&gt;Go to Full Article&lt;/a&gt;
&lt;/div&gt;
      
    &lt;/div&gt;
  &lt;/div&gt;

</description>
  <pubDate>Fri, 07 Apr 2023 16:00:00 +0000</pubDate>
    <dc:creator>George Whittaker</dc:creator>
    <guid isPermaLink="false">1340907 at https://www.linuxjournal.com</guid>
    </item>
<item>
  <title>SFTP Port Forwarding: Enabling Suppressed Functionality</title>
  <link>https://www.linuxjournal.com/content/sftp-port-forwarding-enabling-suppressed-functionality</link>
  <description>  &lt;div data-history-node-id="1340905" class="layout layout--onecol"&gt;
    &lt;div class="layout__region layout__region--content"&gt;
      
            &lt;div class="field field--name-field-node-image field--type-image field--label-hidden field--item"&gt;  &lt;img loading="lazy" src="https://www.linuxjournal.com/sites/default/files/nodeimage/story/sftp-port-forwarding-enabling-suppressed-functionality.jpg" width="850" height="500" alt="SFTP Port Forwarding: Enabling Suppressed Functionality" typeof="foaf:Image" class="img-responsive" /&gt;&lt;/div&gt;
      
            &lt;div class="field field--name-node-author field--type-ds field--label-hidden field--item"&gt;by &lt;a title="View user profile." href="https://www.linuxjournal.com/users/charles-fisher" lang="" about="https://www.linuxjournal.com/users/charles-fisher" typeof="schema:Person" property="schema:name" datatype="" xml:lang=""&gt;Charles Fisher&lt;/a&gt;&lt;/div&gt;
      
            &lt;div class="field field--name-body field--type-text-with-summary field--label-hidden field--item"&gt;&lt;h2&gt;Introduction&lt;/h2&gt;

&lt;p&gt;The SSH protocol enables three major classes of remote server activities: a) command execution (including a login shell), b) network forwarding and manipulation, and c) file transfer.&lt;/p&gt;

&lt;p&gt;The OpenSSH maintainers have determined that &lt;code&gt;sftp&lt;/code&gt; and &lt;code&gt;scp&lt;/code&gt; have no legitimate use for port forwarding (via the &lt;code&gt;-L&lt;/code&gt; and &lt;code&gt;-R&lt;/code&gt; options). A flag to explicitly disable these features is unconditionally passed to the child SSH executable during file transfers with these utilities.&lt;/p&gt;

&lt;p&gt;There may be users with a legitimate need for these features. An obvious subset are penetration testers tasked to verify that this capability is explicitly disabled on public SFTP servers.&lt;/p&gt;

&lt;p&gt;Below are two techniques to enable these suppressed features, by either modifying strings in the sftp binary itself, or by redirection through shells that are able to easily edit the command line. Depending upon the capabilities of the platform, either technique might be required to achieve this goal.&lt;/p&gt;

&lt;h2&gt;Suppression Details&lt;/h2&gt;

&lt;p&gt;To begin, it is important to locate running processes of interest. The shell function below will reveal PIDs that match a shell pattern (and note this is not a regex). This runs under Debian &lt;code&gt;dash&lt;/code&gt; (and most other common shells) and relies on BSD options to &lt;code&gt;ps&lt;/code&gt;:&lt;/p&gt;

&lt;pre&gt;
pps () { local a= b= c= IFS=$'\r'; ps ax | while read -r a
    do [ "$b" ] || c=1; for b; do case "$a" in *"$b"*) c=1;;
        esac; done; [ "$c" ] &amp;&amp; printf '%s\n' "$a" &amp;&amp; c=; done; }&lt;/pre&gt;

&lt;p&gt;A conventional SFTP session is launched, in order to examine the processes associated with it:&lt;/p&gt;

&lt;pre&gt;
$ id
uid=1001(aturing) gid=1001(aturing) groups=1001(aturing)...

$ sftp &lt;a href="mailto:aturing@sftp.victimandum.com"&gt;aturing@sftp.victimandum.com&lt;/a&gt;
&lt;a href="mailto:aturing@sftp.victimandum.com"&gt;aturing@sftp.victimandum.com&lt;/a&gt;'s password:
Connected to &lt;a href="https://www.google.com/url?q=http://sftp.victimandum.com&amp;source=gmail-html&amp;ust=1677172453704000&amp;usg=AOvVaw1-qLXyY3uV-PUs3yE4jag3"&gt;sftp.victimandum.com&lt;/a&gt;.
sftp&gt;&lt;/pre&gt;

&lt;p&gt;We assume above that the local UNIX user has an account on the remote SFTP server of the same username.&lt;/p&gt;

&lt;p&gt;Once the session is running, a local process search for the username reveals the child SSH process that is spawned by SFTP:&lt;/p&gt;&lt;/div&gt;
      
            &lt;div class="field field--name-node-link field--type-ds field--label-hidden field--item"&gt;  &lt;a href="https://www.linuxjournal.com/content/sftp-port-forwarding-enabling-suppressed-functionality" hreflang="en"&gt;Go to Full Article&lt;/a&gt;
&lt;/div&gt;
      
    &lt;/div&gt;
  &lt;/div&gt;

</description>
  <pubDate>Wed, 22 Feb 2023 17:00:00 +0000</pubDate>
    <dc:creator>Charles Fisher</dc:creator>
    <guid isPermaLink="false">1340905 at https://www.linuxjournal.com</guid>
    </item>
<item>
  <title>How To Pick a Linux Distribution for Non-Techies</title>
  <link>https://www.linuxjournal.com/content/how-pick-linux-distribution</link>
  <description>  &lt;div data-history-node-id="1340854" class="layout layout--onecol"&gt;
    &lt;div class="layout__region layout__region--content"&gt;
      
            &lt;div class="field field--name-field-node-image field--type-image field--label-hidden field--item"&gt;  &lt;img loading="lazy" src="https://www.linuxjournal.com/sites/default/files/nodeimage/story/linux-distributions.jpg" width="850" height="500" alt="How To Pick a Linux Distribution" typeof="foaf:Image" class="img-responsive" /&gt;&lt;/div&gt;
      
            &lt;div class="field field--name-node-author field--type-ds field--label-hidden field--item"&gt;by &lt;a title="View user profile." href="https://www.linuxjournal.com/users/ujjwal-anand" lang="" about="https://www.linuxjournal.com/users/ujjwal-anand" typeof="schema:Person" property="schema:name" datatype="" xml:lang=""&gt;Ujjwal Anand&lt;/a&gt;&lt;/div&gt;
      
            &lt;div class="field field--name-body field--type-text-with-summary field--label-hidden field--item"&gt;&lt;p dir="ltr"&gt;I have suffered from distrohopping. Now that I have settled for the last two years, here are some tips to save your time.&lt;/p&gt;

&lt;ol&gt;&lt;li dir="ltr"&gt;
	&lt;p dir="ltr"&gt;All distros run the same operating system at their core, Linux. They are more similar than different. Hence, the marginal cost (time) of looking for a better distro is much more than the marginal benefit of it.&lt;/p&gt;
	&lt;/li&gt;
	&lt;li dir="ltr"&gt;
	&lt;p dir="ltr"&gt;Say no to distributions made for specific purposes like Kali, CentOS, and OpenSuse. OpenSuse is great, but it is made for enterprise use. An everyday user won't ever need most of its features. To maintain it would be a waste of time. The same goes for the RedHat family.&lt;/p&gt;
	&lt;/li&gt;
	&lt;li dir="ltr"&gt;
	&lt;p dir="ltr"&gt;Instead of trimming Suse, you better pick a distro made for everyday people, such as AntiX and SolusOS. Read their descriptions and target users on Distrowatch.&lt;/p&gt;
	&lt;/li&gt;
	&lt;li dir="ltr"&gt;
	&lt;p dir="ltr"&gt;Avoid technical distributions like arch, its forks, and Gentoo. They are for the programmer types. If you are not one, you will likely break it. Updates tend to be massive and very frequent. And you can't install a new package without updating first. You don't want to deal with this. If you want it only for AUR, just learn to compile a little bit.&lt;/p&gt;
	&lt;/li&gt;
	&lt;li dir="ltr"&gt;
	&lt;p dir="ltr"&gt;Say no to most desktop environments (DEs) besides LXDE and LXQT. Prefer window managers (WMs) for maximum performance. DEs can be buggy and cause distraction. They increase boot time and update size. It may be reasonable to rule out all distros that don't come with a window manager so you don't have to do the work post-installation. Know the rule; the less stuff you have, the fewer things you can break, the fewer problems you will face. Keep it minimal. Don't allow the bling-bling to distract you.&lt;/p&gt;
	&lt;/li&gt;
	&lt;li dir="ltr"&gt;
	&lt;p dir="ltr"&gt;Avoid forks because they simply are not different enough. In addition, they tend to carry their parent distro's issues on top of their own issues. Developers can do only so much about it. Independent distributions can fix issues more quickly because they can. Prefer original and independent distros.&lt;/p&gt;
	&lt;/li&gt;
	&lt;li dir="ltr"&gt;
	&lt;p dir="ltr"&gt;Don't worry about software availability. Every distro hosts tools to help you install packages not present in their repos. Furthermore, package managers like Appimage and Flatpak allow you to install packages on all distros. Avoid snap. It slows down bootup and doesn't allow you to control app updates. This may change in the future though.&lt;/p&gt;
	&lt;/li&gt;
	&lt;li dir="ltr"&gt;
	&lt;p dir="ltr"&gt;Prefer rolling distros. Reinstallation is boring and it takes a long time to set everything as you want. The process of making a bootable drive has also damaged a couple of my USB drives, though I can't prove the causality.&lt;/p&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;
      
            &lt;div class="field field--name-node-link field--type-ds field--label-hidden field--item"&gt;  &lt;a href="https://www.linuxjournal.com/content/how-pick-linux-distribution" hreflang="en"&gt;Go to Full Article&lt;/a&gt;
&lt;/div&gt;
      
    &lt;/div&gt;
  &lt;/div&gt;

</description>
  <pubDate>Mon, 30 Jan 2023 17:00:00 +0000</pubDate>
    <dc:creator>Ujjwal Anand</dc:creator>
    <guid isPermaLink="false">1340854 at https://www.linuxjournal.com</guid>
    </item>
<item>
  <title>Fault-Tolerant SFTP scripting - Retry Failed Transfers Automatically</title>
  <link>https://www.linuxjournal.com/content/fault-tolerant-sftp-scripting-retry-failed-transfers-automatically</link>
  <description>  &lt;div data-history-node-id="1340899" class="layout layout--onecol"&gt;
    &lt;div class="layout__region layout__region--content"&gt;
      
            &lt;div class="field field--name-field-node-image field--type-image field--label-hidden field--item"&gt;  &lt;img loading="lazy" src="https://www.linuxjournal.com/sites/default/files/nodeimage/story/fault-tolerant-sftp-scripting-featured_0.jpg" width="850" height="500" alt="Fault-Tolerant SFTP scripting" typeof="foaf:Image" class="img-responsive" /&gt;&lt;/div&gt;
      
            &lt;div class="field field--name-node-author field--type-ds field--label-hidden field--item"&gt;by &lt;a title="View user profile." href="https://www.linuxjournal.com/users/charles-fisher" lang="" about="https://www.linuxjournal.com/users/charles-fisher" typeof="schema:Person" property="schema:name" datatype="" xml:lang=""&gt;Charles Fisher&lt;/a&gt;&lt;/div&gt;
      
            &lt;div class="field field--name-body field--type-text-with-summary field--label-hidden field--item"&gt;&lt;h2&gt;Introduction&lt;/h2&gt;

&lt;p&gt;The whole of modern networking is built upon an unreliable medium. Routing equipment has free license to discard, corrupt, reorder, or duplicate data which it forwards. The understanding of the IP layer in TCP/IP is that there are no guarantees of accuracy. No IP network can claim to be 100% reliable.&lt;/p&gt;

&lt;p&gt;The TCP layer acts as a guardian atop IP, ensuring data that it produces is correct. This is achieved with a number of &lt;a href="https://en.wikipedia.org/wiki/TCP_congestion_control#Slow_start"&gt;techniques&lt;/a&gt; that sometimes purposely lose data in order to determine network limits. As most might know, TCP provides a connection-based network with guaranteed delivery atop an IP connectionless network that can and does discard traffic at will.&lt;/p&gt;

&lt;p&gt;How curious it is that our file transfer tools are not similarly robust in the face of broken TCP connections. The SFTP protocol resembles both its ancestors and peers in that no effort is made to recover from TCP errors that cause connection closure. There are tools to address failed transfers (&lt;code&gt;reget&lt;/code&gt; and &lt;code&gt;reput&lt;/code&gt;), but these are not triggered automatically in a regenerated TCP session (those requiring this property might normally turn to NFS, but this requires both privilege and architectural configuration). Users and network administrators alike might be rapt with joy should such tools suddenly become pervasive.&lt;/p&gt;

&lt;p&gt;What SFTP is able provide is a return status, an integer that signals success when it is the value of zero. It does not return status by default for file transfers, but only does so when called in batch mode. This return status can be captured by a &lt;a href="https://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html"&gt;POSIX shell&lt;/a&gt; and retried when non-zero. This check can even be done on Windows with Microsoft's port of OpenSSH with the help of &lt;a href="https://frippery.org/busybox/"&gt;Busybox&lt;/a&gt; (or even PowerShell, with restricted functionality). The POSIX shell script is deceptively simple, but uncommon. Let's change that.&lt;/p&gt;

&lt;h2&gt;Failure Detection with the POSIX Shell&lt;/h2&gt;

&lt;p&gt;The core implementation of SFTP fault tolerance is not particularly large, but batch mode assurance and standard input handling add some length and complexity, as demonstrated below in a Windows environment.&lt;/p&gt;&lt;/div&gt;
      
            &lt;div class="field field--name-node-link field--type-ds field--label-hidden field--item"&gt;  &lt;a href="https://www.linuxjournal.com/content/fault-tolerant-sftp-scripting-retry-failed-transfers-automatically" hreflang="en"&gt;Go to Full Article&lt;/a&gt;
&lt;/div&gt;
      
    &lt;/div&gt;
  &lt;/div&gt;

</description>
  <pubDate>Wed, 04 Jan 2023 17:00:00 +0000</pubDate>
    <dc:creator>Charles Fisher</dc:creator>
    <guid isPermaLink="false">1340899 at https://www.linuxjournal.com</guid>
    </item>
<item>
  <title>Installing LibreOffice On Slackware 15</title>
  <link>https://www.linuxjournal.com/content/installing-libreoffice-slackware-15</link>
  <description>  &lt;div data-history-node-id="1340897" class="layout layout--onecol"&gt;
    &lt;div class="layout__region layout__region--content"&gt;
      
            &lt;div class="field field--name-field-node-image field--type-image field--label-hidden field--item"&gt;  &lt;img loading="lazy" src="https://www.linuxjournal.com/sites/default/files/nodeimage/story/installing-libreoffice-on-slackware-15.jpg" width="850" height="500" alt="Installing LibreOffice On Slackware 15" typeof="foaf:Image" class="img-responsive" /&gt;&lt;/div&gt;
      
            &lt;div class="field field--name-node-author field--type-ds field--label-hidden field--item"&gt;by &lt;a title="View user profile." href="https://www.linuxjournal.com/users/terrell-prude-jr" lang="" about="https://www.linuxjournal.com/users/terrell-prude-jr" typeof="schema:Person" property="schema:name" datatype="" xml:lang=""&gt;Terrell Prude' Jr.&lt;/a&gt;&lt;/div&gt;
      
            &lt;div class="field field--name-body field--type-text-with-summary field--label-hidden field--item"&gt;&lt;p dir="ltr"&gt;﻿Slackware has been one of my favorite GNU/Linux distributions for a very long time, especially since Version 8.0 came out, many moons back. The reason is that it embodies the "KISS" method of designing a distribution. "KISS" means, "Keep It Simple, Stupid!", and that's what the Slackware team has done since the distribution's inception. When Slackware 15.0 came out in February 2022, I celebrated like other "Slackers", and I'd been running the beta and release candidates (the then-"Slackware-current") since early 2021.&lt;/p&gt;

&lt;p dir="ltr"&gt;I've even used Slackware at work in a "Microsoft shop". Yes, it can be done, and it can be done well. To do so, I needed something compatible with Microsoft Office file formats. OpenOffice.org was the ticket back then even in its Beta Build 638c days (yes, I've been using it for a long time!), and the tradition continues today, 21 years later with today's LibreOffice. It is this office productivity suite that really makes using Free Software platforms (e. g. GNU/Linux, the BSD's) on general-purpose business computers possible.&lt;/p&gt;

&lt;p dir="ltr"&gt;Sadly, Slackware didn't include OpenOffice.org back then, and it doesn't include LibreOffice now. This is speculation on my part, but several years ago, Patrick Volkerding stopped including GNOME because it was too much of a pain to package and distribute for a project that doesn't have the resources of Red Hat, Debian, or Ubuntu. I suspect this may also be true for LibreOffice. Also, the binary packages from LibreOffice come in RPM and DEB format. This choice by the LibreOffice developers is quite understandable, as Red Hat- and Debian-based distros are by far the dominant presence on personal computers. That still leaves us "Slackers" out in the cold, though.&lt;/p&gt;

&lt;p dir="ltr"&gt;I realize that nowadays there are "Slackbuilds", analogous to BSD's "Packages" collection, and the people who maintain those are definitely to be thanked and appreciated (and I do). The reality is that those aren't always updated to the latest versions of applications, given time constraints. Remember that Slackware is a relatively small all-volunteer project, like OpenBSD. Also, I prefer to stay as up-to-date as possible.&lt;/p&gt;

&lt;p dir="ltr"&gt;So, what to do?&lt;/p&gt;

&lt;p dir="ltr"&gt;Fortunately, there is a way to install a fully-functional, latest-greatest, LibreOffice on our Slackware 15.0 computers and use it. The best part is that it's not difficult to do...at least, not now that you have this handy-dandy HOW-TO document to follow.&lt;/p&gt;&lt;/div&gt;
      
            &lt;div class="field field--name-node-link field--type-ds field--label-hidden field--item"&gt;  &lt;a href="https://www.linuxjournal.com/content/installing-libreoffice-slackware-15" hreflang="en"&gt;Go to Full Article&lt;/a&gt;
&lt;/div&gt;
      
    &lt;/div&gt;
  &lt;/div&gt;

</description>
  <pubDate>Tue, 04 Oct 2022 16:00:00 +0000</pubDate>
    <dc:creator>Terrell Prude' Jr.</dc:creator>
    <guid isPermaLink="false">1340897 at https://www.linuxjournal.com</guid>
    </item>
<item>
  <title>SQLite for Secrecy Management - Tools and Methods</title>
  <link>https://www.linuxjournal.com/content/sqlite-secrecy-management-tools-and-methods</link>
  <description>  &lt;div data-history-node-id="1340896" class="layout layout--onecol"&gt;
    &lt;div class="layout__region layout__region--content"&gt;
      
            &lt;div class="field field--name-field-node-image field--type-image field--label-hidden field--item"&gt;  &lt;img loading="lazy" src="https://www.linuxjournal.com/sites/default/files/nodeimage/story/sqlite-for-secrecy-management-tools-and-methods.jpg" width="850" height="500" alt="SQLite for Secrecy Management - Tools and Methods" typeof="foaf:Image" class="img-responsive" /&gt;&lt;/div&gt;
      
            &lt;div class="field field--name-node-author field--type-ds field--label-hidden field--item"&gt;by &lt;a title="View user profile." href="https://www.linuxjournal.com/users/charles-fisher" lang="" about="https://www.linuxjournal.com/users/charles-fisher" typeof="schema:Person" property="schema:name" datatype="" xml:lang=""&gt;Charles Fisher&lt;/a&gt;&lt;/div&gt;
      
            &lt;div class="field field--name-body field--type-text-with-summary field--label-hidden field--item"&gt;&lt;h2&gt;Introduction&lt;/h2&gt;

&lt;p&gt;Secrets pervade enterprise systems. Access to critical corporate resources will always require credentials of some type, and this sensitive data is often inadequately protected. It is rife both for erroneous exposure and malicious exploitation. Best practices are few, and often fail.&lt;/p&gt;

&lt;p&gt;SQLite is a natural storage platform, approved by the Library of the U.S. Congress as a &lt;a href="https://www.loc.gov/preservation/digital/formats/fdd/fdd000461.shtml"&gt;long-term archival medium&lt;/a&gt;. “SQLite is likely used more than &lt;a href="https://sqlite.org/mostdeployed.html"&gt;all other database engines combined&lt;/a&gt;.” The software undergoes extensive testing as it has acquired &lt;a href="https://sqlite.org/th3.html#history"&gt;DO-178B certification&lt;/a&gt; for reliability due to the needs of the avionics industry, and is &lt;a href="https://www.sqlite.org/famous.html"&gt;currently used on the Airbus A350&lt;/a&gt;'s flight systems. The need for SQLite emerged from a &lt;a href="https://corecursive.com/066-sqlite-with-richard-hipp/"&gt;damage control application&lt;/a&gt; tasked for the U.S. battleship DDG-79 Oscar Austin. An Informix database was running under HP-UX on this vessel, and during ship power losses, the database would not always restart without maintenance, presenting physical risks for the crew. SQLite is an answer to that danger; when used properly, it will transparently recover from such crashes. Despite a small number of CVEs patched in CentOS 7 (CVE-2015-3414, CVE-2015-3415, CVE-2015-3416, CVE-2019-13734), few databases can match SQLite's reliability record, and none that are commercially prevalent.&lt;/p&gt;

&lt;p&gt;SQLite specifically avoids any question of access control. It does not implement &lt;code&gt;GRANT&lt;/code&gt; and &lt;code&gt;REVOKE&lt;/code&gt; as found in other databases, and delegates permissions to the OS. Adapting it for sensitive data always requires strong security to be implemented upon it.&lt;/p&gt;

&lt;p&gt;The free releases of CyberArk &lt;a href="https://github.com/cyberark/conjur"&gt;Conjur&lt;/a&gt; and &lt;a href="https://github.com/cyberark/summon"&gt;Summon&lt;/a&gt; build a basic platform for secrecy management. These tools are somewhat awkward, as &lt;code&gt;conjur&lt;/code&gt; requires a running instance of PostgreSQL, which brings an attack surface that is far larger than hoped. Slaving an enterprise to a free, centralized instance of &lt;code&gt;conjur&lt;/code&gt; and PostgreSQL is a large risk, as &lt;a href="https://docs.cyberark.com/Product-Doc/OnlineHelp/AAM-CP/Latest/en/Content/CCP/The-CyberArk-Application-Identity-Management-Solution.htm?tocpath=Get%20Started%7C_____1"&gt;CyberArk's documentation attests&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;CyberArk &lt;code&gt;summon&lt;/code&gt;, however, can be configured with custom backend providers, which have simple interfacing requirements. SQLite is a fit both for &lt;code&gt;summon&lt;/code&gt; and as a standalone secrecy provider.&lt;/p&gt;&lt;/div&gt;
      
            &lt;div class="field field--name-node-link field--type-ds field--label-hidden field--item"&gt;  &lt;a href="https://www.linuxjournal.com/content/sqlite-secrecy-management-tools-and-methods" hreflang="en"&gt;Go to Full Article&lt;/a&gt;
&lt;/div&gt;
      
    &lt;/div&gt;
  &lt;/div&gt;

</description>
  <pubDate>Wed, 28 Sep 2022 16:00:00 +0000</pubDate>
    <dc:creator>Charles Fisher</dc:creator>
    <guid isPermaLink="false">1340896 at https://www.linuxjournal.com</guid>
    </item>
<item>
  <title>Pwndrop on Linode</title>
  <link>https://www.linuxjournal.com/content/pwndrop-linode</link>
  <description>  &lt;div data-history-node-id="1340895" class="layout layout--onecol"&gt;
    &lt;div class="layout__region layout__region--content"&gt;
      
            &lt;div class="field field--name-field-node-image field--type-image field--label-hidden field--item"&gt;  &lt;img loading="lazy" src="https://www.linuxjournal.com/sites/default/files/nodeimage/story/pwndrop-on-linode-featured.jpg" width="850" height="500" alt="Pwndrop on Linode" typeof="foaf:Image" class="img-responsive" /&gt;&lt;/div&gt;
      
            &lt;div class="field field--name-node-author field--type-ds field--label-hidden field--item"&gt;by &lt;a title="View user profile." href="https://www.linuxjournal.com/users/david-burgess" lang="" about="https://www.linuxjournal.com/users/david-burgess" typeof="schema:Person" property="schema:name" datatype="" xml:lang=""&gt;David Burgess&lt;/a&gt;&lt;/div&gt;
      
            &lt;div class="field field--name-body field--type-text-with-summary field--label-hidden field--item"&gt;&lt;p&gt;When I first ran across PwnDrop, I was intrigued at what the developers had in mind with it. For instance, if you're a white-hat hacker and are looking to share exploits safely with your client, you might use a service like PwnDrop. If you're a journalist communicating with, well, just about anyone who is trying to keep their identity secret, you might use a service like PwnDrop.&lt;/p&gt;
&lt;p&gt;In this tutorial, we're going to look at how easy it is to set up and use in just a few minutes.&lt;/p&gt;
&lt;h2 id="-span-style-font-weight-400-prerequisites-for-pwndrop-in-docker-span-"&gt;Prerequisites for PwnDrop in Docker&lt;/h2&gt;
&lt;p&gt;First things first, you’ll need a Docker server set up. Linode has made that process very simple and you can set one up for just a few bucks a month and can add a private IP address (for free) and backups for just a couple bucks more per month.&lt;/p&gt;
&lt;p&gt;Another thing you’ll need is a domain name, which you can buy from almost anywhere online for a wide range of prices depending on where you make your purchase. Be sure to point the domain's DNS settings to Linode. You can find more information about that here: &lt;a href="https://www.linode.com/docs/guides/dns-manager/"&gt;https://www.linode.com/docs/guides/dns-manager/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;You’ll also want a reverse proxy set up on your Docker Server so that you can do things like route traffic and manage SSLs on your server. I made a video about the process of setting up a Docker server with Portainer and a reverse proxy called Nginx Proxy Manager that you can check out here: &lt;a href="https://www.youtube.com/watch?v=7oUjfsaR0NU"&gt;https://www.youtube.com/watch?v=7oUjfsaR0NU&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Once you’ve got your Docker server set up, you can begin the process of setting up your PwnDrop password manager on that server.&lt;/p&gt;
&lt;p&gt;There are 2 primary ways you can do this:&lt;/p&gt;
&lt;ol&gt;&lt;li&gt;In the command line via SSH.&lt;/li&gt;
&lt;li&gt;In Portainer via the Portainer dashboard.&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;We're going to take a look at how to do this in Portainer so that we can have a user interface to work with.&lt;/p&gt;
&lt;p&gt;Head over to &lt;a href="http://your-server-ip-address:9000/"&gt;http://your-server-ip-address:9000&lt;/a&gt; and get logged into Portainer with the credentials we set up in our previous post/video.&lt;/p&gt;
&lt;p&gt;On the left side of the screen, we're going to click the "Stacks" link and then, on the next page, click the "+ Add stack" button.&lt;/p&gt;
&lt;p&gt;This will bring up a page where you'll enter the name of the stack. Below that that you can then copy and paste the following:&lt;/p&gt;&lt;/div&gt;
      
            &lt;div class="field field--name-node-link field--type-ds field--label-hidden field--item"&gt;  &lt;a href="https://www.linuxjournal.com/content/pwndrop-linode" hreflang="en"&gt;Go to Full Article&lt;/a&gt;
&lt;/div&gt;
      
    &lt;/div&gt;
  &lt;/div&gt;

</description>
  <pubDate>Tue, 27 Sep 2022 16:00:00 +0000</pubDate>
    <dc:creator>David Burgess</dc:creator>
    <guid isPermaLink="false">1340895 at https://www.linuxjournal.com</guid>
    </item>

  </channel>
</rss>
