Public/Linux.ps1

using namespace System
using namespace System.IO
using namespace System.Security.Cryptography
using namespace System.Collections.Immutable

    #### # Set-CronPermissions
    function Set-CronPermissions {
        #### Restrict all standard cron directories to 700 via `sudo chmod`.
        ####
        #### **Returns**
        #### - *None. Writes status to host per directory.*
        [CmdletBinding()]
        param()

        $CronDirectories = @('/etc/cron.d', '/etc/cron.daily', '/etc/cron.hourly', '/etc/cron.weekly', '/etc/cron.monthly')

        foreach ($Directory in $CronDirectories) {
            try {
                if (Test-Path -Path $Directory -PathType Container) {
                    & sudo chmod -R 700 -- $Directory
                    Write-Host "Successfully set permissions to 700 for: $Directory"
                }
                else {
                    Write-Warning "Directory not found: $Directory"
                }
            }
            catch {
                Write-Error $_
            }
        }
    }

    #### # Show-SecurityReport
    function Show-SecurityReport {
        #### Print an aureport summary of audit events.
        aureport --summary
    }

    #### # Start-SecurityWatch
    function Start-SecurityWatch {
        #### Tail the Linux audit log in real time.
        tail -f /var/log/audit/audit.log
    }

    #### # New-SecurityCertificate
    function New-SecurityCertificate {
        #### Generate locally-trusted TLS certificates via mkcert for a hostname and optional subdomains.
        ####
        #### **Parameters**
        #### - `[string]`: __Hostname__
        #### - *Primary hostname. Defaults to the system hostname.*
        #### - `[string[]]`: __Subdomains__
        #### - *Optional subdomain prefixes. Each becomes `<subdomain>.<Hostname>`.*
        ####
        #### **Returns**
        #### - `[PSCustomObject[]]`
        #### - `[string]`: __Domain__
        #### - *Fully-qualified domain the certificate was generated for.*
        #### - `[string]`: __Status__
        #### - *Always `'Generated'`.*
        [CmdletBinding()]
        param(
            [Parameter(Mandatory = $false)]
            [string]$Hostname = (hostname),

            [Parameter(Mandatory = $false)]
            [string[]]$Subdomains = @()
        )

        try {
            $mkcert = Get-Command mkcert -ErrorAction SilentlyContinue
            if (-not $mkcert) {
                Write-Warning 'mkcert not found. On Linux, run Install-PowerNixxAptTools to install.'
                return
            }

            $results = @()

            Write-Host "Generating certificate for $Hostname..." -ForegroundColor Cyan
            & mkcert $Hostname
            $results += [PSCustomObject]@{ Domain = $Hostname; Status = 'Generated' }

            foreach ($subdomain in $Subdomains) {
                $fqdn = "$subdomain.$Hostname"
                Write-Host "Generating certificate for $fqdn..." -ForegroundColor Cyan
                & mkcert $fqdn
                $results += [PSCustomObject]@{ Domain = $fqdn; Status = 'Generated' }
            }

            Write-Host 'Certificate generation complete.' -ForegroundColor Green
            return $results
        }
        catch {
            Write-Error "Certificate generation failed: $_"
        }
    }