Driver FixRecommendedSound, Wi-Fi or graphics acting up? Check drivers firstFind missing or outdated drivers fast.Check DriversHalloween DealsAmazon USHalloween week deals: useful picks before month-endAmazon US: current deals, useful picks and tech finds.Check DealsPC HealthRecommendedCrashes, freezes, slowdowns? Check your PC nowSpot repairable issues before they interrupt work.Check PC×
Skip to content
World desk13 min

How to Audit a PostgreSQL Database with InSpec on Ubuntu

A practical, version-aware guide to auditing PostgreSQL on Ubuntu with Chef InSpec, from installation and service checks to pg_hba.conf review and postgres_session SQL assertions.
Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Audit PostgreSQL on Ubuntu by combining Chef InSpec’s host resources with PostgreSQL-specific configuration checks and a separate postgres_session for SQL assertions. Install PostgreSQL, identify the package, service unit and configuration directory for the exact major version, create an InSpec profile, then run it locally or over SSH. The workflow below checks installation, version, service state, process ownership, the postgres operating-system account, network listeners, postgresql.conf, pg_hba.conf and database-level roles or settings.

What this audit proves—and what it does not

An InSpec profile is a repeatable set of compliance tests. It can show that PostgreSQL is installed at an acceptable version, that the expected systemd unit is enabled and running, that the server process belongs to the intended operating-system account, that only approved listeners are exposed, and that selected configuration and authentication rules match policy.

As an Amazon Associate I earn from qualifying purchases.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Those host checks do not prove database state. They cannot, by themselves, establish that an application role can log in, that a role has only the intended privileges, or that a particular catalog value is correct. Use the postgres_session resource for SQL assertions and keep those tests separate from operating-system checks. This separation makes a failed control easier to assign: package or service remediation belongs to the host team, while role and SQL findings belong to the database owner.

Check the Ubuntu and PostgreSQL versions first

The detailed Ubuntu walkthrough commonly copied for this task targets Ubuntu 18.04 and PostgreSQL 10. Current Ubuntu releases can use different PostgreSQL major versions, systemd unit names, authentication defaults and configuration paths. Treat every version-specific value in an example as a starting point, not a universal identifier.

#1 Best Overall
Sale
TOZO A1 Wireless Earbuds Bluetooth 5.3 Light Weight in Ear Headphones | IPX5 Waterproof,2 Mics for AI Calls,Immersive Premium Sound Bass Headset with Charging Case,32 EQ via App Black
  • [Ultra-Lightweight Ear Buds Designed for Small Ears] Each earbud weighs only 3.7g and features a compact, ergonomic in-ear design made especially for small ears. Secure, low-profile, and comfortable for workouts, all-day wear or overnight sleeping.The ultra-slim profile sits flush in your ear with no hard edges poking or rubbing, so you can even sleep on your side without discomfort.
  • [Immersive Stereo Sound with TOZO OrigX Technology] TOZO OrigX tuning delivers clear vocals, balanced mids, and natural stereo sound for music, podcasts, and videos.
  • [Long Battery Life for Daily Use] Get up to 7 hours of playtime on a single charge, with up to 32 hours total using the charging case—ideal for workdays, commuting, and extended listening sessions.
  • [Bluetooth 5.3 & Stable Connection] Bluetooth 5.3 provides fast pairing, stable wireless performance, and reduced dropouts as you move around home or office.
  • [Deep Bass with Clear Vocals] High-performance drivers produce punchy bass while keeping vocals clean and detailed for everyday listening.

Identify the installed package and service

  1. Display the operating-system release: cat /etc/os-release.
  2. List installed PostgreSQL packages: dpkg-query -W 'postgresql*' 2>/dev/null.
  3. List PostgreSQL service units: systemctl list-units --type=service 'postgresql*'.
  4. Ask PostgreSQL which configuration file is active, when a local administrative connection is available: sudo -u postgres psql -Atc "SHOW config_file;".

Record the major version, cluster name, package name, service unit and configuration directory. Your profile should use those recorded values as attributes or platform-specific inputs rather than assuming that postgresql-10, postgresql@10-main or /etc/postgresql/10/main exists everywhere.

Install and verify PostgreSQL on Ubuntu

Ubuntu documents installation with:

sudo apt install postgresql

The Ubuntu package supplies viable defaults. Ubuntu documentation describes peer as the default authentication method for local connections and scram-sha-256 as the default for host connections in current Ubuntu releases. Defaults can differ on older releases, after upgrades, or after an administrator changes pg_hba.conf; inspect the actual file before treating a default as a finding.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Confirm the service after installation

systemctl status postgresql --no-pager
systemctl is-enabled postgresql
systemctl is-active postgresql

On installations using a versioned cluster unit, the generic postgresql service may delegate to a unit such as postgresql@10-main. Use the unit reported by systemctl list-units in the profile. Do not mark a host non-compliant merely because its unit name differs from the Ubuntu 18.04 example.

Install InSpec and create a reusable profile

Chef InSpec is an open-source framework for infrastructure compliance and testing. Its command-line workflow supports local execution, SSH targets and privileged controls. Ubuntu is among the supported runtime and remote-target platforms.

Install and initialize

inspec init profile PostgreSQL
cd PostgreSQL
inspec exec .

The generated profile normally contains inspec.yml and a controls/ directory. Put the controls in a file such as controls/postgresql.rb. Keep the profile in version control, review changes like application code and run it against a disposable test cluster before applying it to production.

Use attributes for values that vary

Paths, package names, service units, ports and policy values should not be buried in control code. A minimal inspec.yml attribute for the Ubuntu 18.04/PostgreSQL 10 layout is:

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
attributes:
  - name: postgres_conf_dir
    type: string
    default: '/etc/postgresql/10/main'

For a different cluster, override the attribute at execution time or provide a separate profile input. The same approach works for the package name, service name, expected major version, listener port, approved addresses, authentication file path and required logging settings. A path attribute is especially important because PostgreSQL configuration locations vary by operating system and major version.

Control package installation and version

Start with a control that fails clearly when the package is absent or older than the approved baseline. The following is the pattern used by the Ubuntu 18.04 walkthrough; replace the identifiers for the target host:

Rank #2
Sale
Smart Watch for Men Women Compatible with iPhone Samsung Android Phone 1.69 inch Full Touch Screen IP68 Waterproof Bluetooh Fitness Tracker Heart Rate/Sleep Monitor (Black)
  • 【IP68 Waterproof Multifunctinal Smart Watch】Torjalph fitness activity tracker smart watch is IP68 waterproof technology ,you can wear it when swimming,handwashing,it's rain-proof which means that you perform multiple exercise modes outside without worrying about sweat or rain corroding your fitness smart watch,and this watch equipped with a 230 mAh large capacity battery magnetic charging ,and this sports activity tracker watch can be used 5-7 days If fully charged.
  • 【Larger 1.83'' Full Screen Watch & Multi-dial Selection】1.83 inch full HD color touch screen smart watch for men / women provides excellent 240*284 resolution image quality ,This Bluetooth smart watch offers a better touch experience and remarkable immersion and ,more than 200 watch faces for you to choose from App"Da Fit ", you can change the dial style according to your mood to wear keeping the world on your wrist
  • 【Accurate Activity Tracker Smart Watch 】sports watch activity tracker uses sweat and dust resistant breathable silicone strap, our Fitness Tracker Smart Watch for Android iOS Phones supports 12 sports modes,walking,running,bicycle,swimming,badminton,basketball,football,rope skipping. This bluetooth calls smart watch for men women is lightweight and stylish, bringing more convenient and relaxing sports experience while also providing more protection.
  • 【Your 24 Hour Personal Daily Health Monitor】Fitness watch for women men full touch screen IP67 waterproof bluetooth smartwatch for Android iOS Phones with heart rate blood pressure monitor multifunction Andriod smart watch with steps counter sleep monitor sports fitness watch, monitoring blood oxygen saturation allows you to understand your physical condition in real time to track fitness progress ,to know your health status in time.
  • 【More Functions Bluetooth Call Smart Watch】This fitness activity smart watch full screen for iPhone and Android phones includes a bunch of new features including:The bluetooth smart watch can hang up the phone, receive and display WhatsAPP /Text /Facebook /Twitter /Messenger reminder.Support sedentary reminder, alarm clock, stopwatch, timer,weather information,music control, remote camera control compatible with Android 5.0 and above or iOS 9.0 and above smartphones.
control 'postgresql-installation' do
  impact 1.0
  title 'Audit PostgreSQL installation'

  describe package('postgresql-10') do
    it { should be_installed }
    its('version') { should cmp >= '10' }
  end
end

The version comparison is only meaningful when the policy genuinely permits every package version at or above that major release. If your organization approves a precise package revision, compare against that revision instead. Package naming is distribution-specific: a current Ubuntu host may install a newer major-version package or a meta-package that pulls in the server package. Discover the actual package with dpkg-query and encode the approved name as an attribute.

Verify service installation, enablement and runtime state

A package can be installed while its server is stopped or disabled at boot. Test all three properties:

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
control 'postgresql-service' do
  impact 1.0
  title 'PostgreSQL service is installed, enabled and running'

  describe service('postgresql@10-main') do
    it { should be_installed }
    it { should be_enabled }
    it { should be_running }
  end
end

Use the real unit discovered earlier. On a host with multiple clusters, test each approved cluster explicitly; checking only the generic service can miss a stopped versioned unit. Conversely, do not require every cluster to run when policy permits only one production cluster.

Check the process and operating-system account

PostgreSQL should run under its dedicated operating-system account rather than an interactive user or root. Confirm that the account exists and that the server process is owned by it.

control 'postgresql-account-and-process' do
  impact 1.0
  title 'PostgreSQL runs under the postgres account'

  describe user('postgres') do
    it { should exist }
  end

  describe processes('postgres') do
    it { should exist }
    its('users') { should include 'postgres' }
  end
end

Process matching can vary when the executable is represented as postgres, postmaster or a full path. If the resource does not match your distribution’s process name, inspect ps -eo user,comm,args and adjust the control to the actual executable while retaining the ownership assertion. A process that exists but runs as the wrong user is a high-priority finding because file permissions, socket access and the damage from a compromise all change with that identity.

Audit the network listener

Check the TCP port, protocol and bound addresses against the approved exposure. PostgreSQL commonly uses port 5432, but the port is configurable and multiple clusters can use different ports. A listener check should therefore consume an attribute rather than hard-code 5432 unless that is your policy.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
control 'postgresql-listener' do
  impact 1.0
  title 'PostgreSQL listens only on the approved network surface'

  describe port(attribute('postgres_port')) do
    it { should be_listening }
    its('protocols') { should include 'tcp' }
  end
end

Pair the port test with a configuration assertion for listen_addresses. A port can be open on an unexpected interface even when the number is correct. Decide whether the policy allows loopback only, a private interface, or a defined set of addresses. Do not infer that a service is safe merely because it is not reachable from your test machine; firewalls and security groups can hide an overly broad PostgreSQL bind address.

Check postgresql.conf with postgres_conf

Chef InSpec’s postgres_conf resource reads PostgreSQL configuration values. Build the configuration-file path from the profile attribute so the same controls can run on supported Ubuntu versions and other platforms with different layouts.

Rank #3
New Bee Guitar Cable 10ft Electric Instrument Bass AMP Cord
  • [Low Noise High Fidelity] New bee guitar cord with 22AWG oxygen-free-copper center conductors provides enhanced signal transfer, the PVC insulation material and the high-density stranded copper double shield provide noise rejection for quiet operation
  • [Ideal for Choice] New bee 1/4 straight and right angle metal connectors, ensures a secure connection in any instrument, pedal, or amp jack. L shape great fro on stage guitar stands
  • [Wide Compatible] Suitable for mixer, power amplifier, microphone, effector, decoder, equalizer, electoronic organ, electric guitar, electric bass and other electronic equipments. Widely used in the installation of smart home, karaoke speaker, professional stage audio, etc
  • [Easy Disassemble] Making incidental repairs quick and easy! Very nice, flexible cable
  • [Dont Hesite to Order] 24 hours customer services and professional technology team are standing by
conf_dir = attribute('postgres_conf_dir')

control 'postgresql-logging' do
  impact 1.0
  title 'Required PostgreSQL logging settings are enabled'

  describe postgres_conf("#{conf_dir}/postgresql.conf") do
    its('log_connections') { should eq 'on' }
    its('log_disconnections') { should eq 'on' }
    its('log_duration') { should eq 'on' }
  end
end

The exact required values belong to your policy. Some environments intentionally leave duration logging off because of volume or privacy concerns; others require it for a defined period. Replace the example expectations with the approved values and document why. The same resource can test other PostgreSQL options, including connection behavior and logging parameters.

Validate the effective value, not only a text line

PostgreSQL configuration can include includes, repeated assignments and reload requirements. A file assertion tells you what the selected file contains; it does not always prove which value the running server currently uses. When an effective-value check matters, add a SQL assertion through postgres_session and compare it with the file-level control. Treat a mismatch as a diagnostic branch: determine whether an included file, an override later in the file, or a pending reload explains it.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Audit pg_hba.conf authentication rules

pg_hba.conf determines which clients may connect, from which addresses, to which databases and users, and which authentication method is required. Review it as policy, not as a simple “file exists” check.

Locate and protect the file

The path is commonly adjacent to postgresql.conf, but it varies by distribution and version. Use the same profile attribute pattern or obtain the active path with SHOW hba_file; during a controlled database session. Check ownership and mode with InSpec’s file resource so unprivileged users cannot alter authentication rules.

describe file("#{attribute('postgres_conf_dir')}/pg_hba.conf") do
  it { should exist }
  its('owner') { should eq 'postgres' }
end

Set the expected group and permissions according to your operating-system baseline rather than copying a mode that may be inappropriate for your distribution.

Inspect rules without normalizing away their meaning

A practical control can read the file and reject unexpected rules, while ignoring blank lines and comments for parsing purposes:

Free tools Windows power users keep installed

One-click scans. No signup required.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
hba = command("awk '!/^[[:space:]]*#/ && NF' #{attribute('postgres_hba_path')}")
describe hba.stdout do
  it { should_not match /hosts+alls+alls+0.0.0.0/0s+trust/ }
end

Use policy-specific checks for approved databases, role names, network ranges and methods. Avoid a broad regular expression that accidentally permits an unrestricted rule earlier in the file; PostgreSQL evaluates the first matching record. A safer review parses every active line, compares it with an allowlist and flags rules that are broader than the approved range.

Understand Ubuntu authentication defaults

Ubuntu documentation describes peer for local connections and scram-sha-256 for host connections in current releases. A production policy may require narrower network ranges, named roles, TLS-only host rules or another explicitly approved method. The default on Ubuntu 18.04 should not be assumed to match the current release, particularly after package upgrades or manual edits.

Rank #4
BSIMB 15.6" Digital Family Calendar & Chore Chart, No Subscription Fees
  • Digital Family Calendar: BSIMB digital calendar wall touch screen puts an end to your chaotic life. Designed for busy families, the digital calendar keeps you organised and in step with your family. Assign different colours and tasks to each family member to make family scheduling easier and more intuitive.
  • Easy Setup and Auto-Sync: Plug in, connect to WLAN and auto-syn your electric calendar in minutes. Digital wall calendar compatible with Google calendar, iCloud calendar, Outlook calendar, Cozi calendar and Yahoo calendar. Add events directly on the device or through the ecalendar app. Electronic calendar stays current whether you're at work or traveling—no manual updates needed.
  • All-In-One Home Assistant: Smart calendar builds habits and encourage independence with personalised chores. Display daily meal plan to reduce the daily ‘What's for dinner?’ stress. To-do lists keep track of everything you want. Turning chores into valuable achievements with stars and rewards, making life easier and more enjoyable.
  • Manage Anytime Anywhere: BSIMB electronic calendar for family stay connected with the powerful ecalendar app. Access and manage your digital wall calendar anytime, anywhere with free features like stars & rewards, photo screensaver, chore charts, meals plans, to-do lists etc. Electronic planner paid features like Magic Import tailor advanced tools for users with special needs.
  • Stay in Touch with Loved Ones: Share photos or videos from your phone to electronic wall calendar with app, instantly update your life moment, and keep in touch with your family, especially those who are far away; you can also surprise your smart calendar digital wall by sending him a wish card; it's also great for keeping tech-illiterate elders in touch with the youngsters.

Ubuntu also documents a hostssl pattern that rejects non-SSL TCP connections. Its example certificate is suitable for testing; production should use a certificate that chains to a trusted certificate authority. If TLS is required, test both the hostssl rule and the absence of an earlier non-SSL rule that would allow the same clients through.

Use postgres_session for database-level assertions

Host resources cannot inspect catalog state reliably. Chef InSpec’s postgres_session creates a PostgreSQL session from a username, password, host, port and optional socket path, then executes SQL with query.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
sql = postgres_session(
  attribute('db_user'),
  attribute('db_password'),
  attribute('db_host'),
  attribute('db_port')
)

describe sql.query("SELECT rolcanlogin FROM pg_roles WHERE rolname = 'app_user';", ['postgres']) do
  its('rows.first.rolcanlogin') { should eq true }
end

The second argument to query identifies the expected column name in the returned result. Adapt the SQL and column assertion to the catalog view or approved test query you need. Useful checks include whether a named role can log in, whether a role is a superuser, whether membership grants are present, and whether an application-specific setting has the required value.

Handle credentials safely

  • Do not commit a database password in inspec.yml, Ruby source or a profile repository.
  • Supply credentials at runtime through the mechanism approved by your automation platform, and restrict who can read the resulting process, input and report.
  • Use a dedicated audit role with only the catalog privileges required by the queries.
  • Prefer a local Unix socket when the policy permits it; otherwise specify the approved host and port and test the same authentication path used by the application.
  • Never print the password in a control failure message or debugging command.

A failed SQL session is not automatically a failed database policy. Classify whether the cause is bad credentials, a blocked network path, an unavailable socket, an incorrect port, insufficient catalog privileges or an actual assertion failure.

Independent reader supportYour contribution helps us test, update, and keep practical guides available for everyone.Support on Ko-Fi

Assemble controls by finding type

Keeping controls narrowly scoped produces reports that remediation teams can act on. A practical profile layout is:

Control group Checks Typical evidence
Installation Package presence and approved minimum version Ubuntu package database
Service Unit installed, enabled and running systemd state
Identity postgres account and process ownership Local users and process table
Network Port, TCP protocol and approved bind addresses Listener table and PostgreSQL settings
Configuration Logging and connection options postgresql.conf and, where needed, effective SQL values
Authentication pg_hba.conf order, ranges, roles, methods and file protection Active HBA rules and ownership
Database Role login, privileges and application-specific SQL assertions Catalog queries through postgres_session

This grouping also helps you decide whether a profile is portable. A profile that hard-codes an Ubuntu 18.04 path is quick to write but fragile. A profile that uses attributes, detects the active unit and separates host from SQL checks requires more setup but can be reused across supported Ubuntu and PostgreSQL combinations.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Run the profile locally

From the profile directory, run:

inspec exec .

Controls that read protected files, inspect processes or query system state may need elevated privileges:

inspec exec . --sudo

Use the least privilege that allows the controls to run. If the profile reports a permission error, determine whether the control needs root, a readable configuration path, membership in a local group or a database audit role. Do not solve every failure by granting unrestricted privileges.

Pass values for another cluster

Override profile attributes using the input mechanism supported by your installed InSpec version. The principle is to pass the target’s package, service, configuration directory, HBA path, port and database connection values at execution time, rather than editing Ruby code for each host. Keep an inventory of those inputs so a report can show exactly which cluster was audited.

Run against a remote Ubuntu host over SSH

Chef InSpec supports SSH targets. Supply the remote target using the SSH target syntax accepted by your installed InSpec release, authenticate with the organization’s approved key or credential mechanism and add --sudo when remote controls need elevation. Verify connectivity with a low-risk command before running the full profile.

What’s actually slowing this PC down?

Pick the symptom - the matching free tool is one click away.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Remote execution changes the failure interpretation. An SSH timeout, host-key problem or privilege escalation failure is a transport finding, not evidence that PostgreSQL is misconfigured. Record the target hostname, cluster identity and execution time with the report so a later run can be compared with the same scope.

Troubleshoot common failures

Package or service resource cannot find PostgreSQL

Check the installed package and unit names. The control may still contain the PostgreSQL 10 example while the host runs another major version. Update attributes, not every assertion, and rerun only after confirming the approved baseline.

The service is running but the port test fails

Inspect listen_addresses, the configured port, Unix-socket-only operation, firewall rules and whether the test is examining the correct cluster. A server that intentionally listens only on a socket should be tested with a socket-aware policy rather than forced into a TCP requirement.

postgres_conf reports an unexpected value

Confirm the path, included files, spelling and value representation. PostgreSQL can represent booleans and lists in forms that need normalization before comparison. If the text value is correct but runtime behavior is not, query the effective setting and check whether a reload or restart is pending.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

The HBA check gives a false sense of security

Review rule order and all active lines. An apparently strict rule later in the file does not protect a client matched by a broader rule above it. Test representative local and host connections, including an attempted non-SSL connection when TLS is mandatory.

The SQL session cannot connect

Verify the username, password source, host, port and socket path separately. Check that the audit role can connect to the selected database and read the catalog objects used by the query. If local peer authentication is enabled, a password-based session may fail even though the server is healthy; use the approved local identity or an explicitly approved host-authenticated path.

Interpret and report results

Run the profile as a point-in-time audit, then preserve the profile revision, inputs, Ubuntu release, PostgreSQL major version, cluster name and execution timestamp with the report. A passing run means the tested assertions matched the stated policy at that moment; it does not guarantee that an administrator cannot change the configuration immediately afterward.

Separate findings into four remediation queues:

  1. Host: package, service, account, process and file-permission failures.
  2. Configuration: logging, listener, connection and effective-setting failures.
  3. Authentication: HBA rule order, network scope, TLS and authentication-method failures.
  4. Database: role, privilege and SQL-session failures.

When comparing two profile implementations, compare coverage (host checks versus database checks), portability (attributes versus hard-coded paths), credential handling, target connectivity (local, SSH or another supported target) and reporting integration. A profile with more controls is not automatically better if its credentials are embedded, its paths are fixed to one release or its assertions do not match policy.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

A practical first-run checklist

  • Confirm the Ubuntu release and PostgreSQL major version.
  • Identify the package name, service unit, active configuration file and HBA file.
  • Install or invoke InSpec and initialize a profile with inspec.yml and controls/.
  • Set attributes for paths, package, service, port and policy values.
  • Test package presence and minimum version.
  • Test that the correct service is installed, enabled and running.
  • Verify the postgres account and process ownership.
  • Verify the approved listener port, protocol and addresses.
  • Check required postgresql.conf values.
  • Inspect and protect pg_hba.conf, including rule order and TLS requirements.
  • Add postgres_session controls for database-level facts.
  • Run with inspec exec ., adding --sudo only where required.
  • Classify failures and retain the exact inputs and versions with the report.

Product prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on Amazon at the time of purchase will apply.

Leave a Reply

Your email address will not be published. Required fields are marked *

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

More from the Wire

  1. World desk4 min
    How to Spot an AI Voice Scam Before Sending MoneyDon’t rely on how a caller sounds. Pause, call back through a known number, and verify the emergency with another trusted person before sending money.
  2. Mountain View desk4 min
    Google’s SynthID Detector: How to Check AI-Generated Images, Video and AudioGoogle’s SynthID Detector looks for an embedded watermark in supported images, video and audio. Here is what its results do—and do not—show.
  3. Redmond desk20 min
    How to create a link to File or Folder in Windows 11Windows 11 gives you several ways to point to a file or folder without moving or duplicating it. You can create a desktop shortcut,…
Recommended PC Tool
Recommended PC Tool
Windows Errors? Fix Them Before They SpreadFree repair scan
Crashes, No Sound, or Screen Glitches?Free driver scan

Two free Windows tools

One Free Minute Could Fix That PC

Before you go - each of these free tools takes about a minute and tackles what quietly slows a Windows PC down.

Special offer. View Outbyte info, uninstall instructions, EULA, and Privacy Policy.