How To Install Tor In Linux

How To Install Tor In Linux

Reading time1 min
#Privacy#Linux#Security#Tor#LinuxPrivacy#TorBrowser

Installing Tor on Linux: Practical Steps for Secure Anonymous Access

True anonymity on the public internet is rare. Tor—"The Onion Router"—remains one of the few well-audited systems for masking your identity by relaying network traffic through several volunteer-operated nodes. Here’s a concise, practical workflow for deploying Tor on Debian-based Linux distributions (example: Ubuntu 20.04 LTS). Adapt as needed for your environment.


0. System Preparation: Avoiding Dependency Issues

First, ensure your package index and installed packages aren’t stale. Out-of-date systems frequently break at the GPG or kdeps step.

sudo apt update && sudo apt upgrade -y

Note: On production or critical hosts, avoid -y and review upgrade prompts.


1. Add and Verify Official Tor Repositories

Distribution archives for Tor lag behind; do not rely on default repositories for up-to-date security fixes.

Import the Tor Project GPG Key

wget -qO- https://deb.torproject.org/torproject.org/gpgkey | gpg --dearmor | sudo tee /usr/share/keyrings/tor-archive-keyring.gpg >/dev/null

Register the Tor APT Source

Ensure the codename matches your OS:

source /etc/os-release
echo "deb [signed-by=/usr/share/keyrings/tor-archive-keyring.gpg] https://deb.torproject.org/torproject.org $VERSION_CODENAME main" | sudo tee /etc/apt/sources.list.d/tor.list

Replacement example: For Ubuntu 22.04, use jammy; for Ubuntu 20.04, use focal.

sudo apt update

2. Install Core Tor Packages

The keyring and service itself are both required. Miss one, and you’ll later face update failures.

sudo apt install tor deb.torproject.org-keyring

Known issue: If you see NO_PUBKEY GPG errors, re-import the key or confirm permissions on /usr/share/keyrings/tor-archive-keyring.gpg.


3. Confirm Service State and Enable on Boot

Tor runs as a managed systemd service out of the box.

systemctl status tor

A correct run will show:

● tor.service - Anonymizing overlay network for TCP (Tor)
   Loaded: loaded (/lib/systemd/system/tor.service; enabled; vendor preset: enabled)
   Active: active (running) since ...
   ...

If inactive:

sudo systemctl start tor
sudo systemctl enable tor

4. Practical Usage Patterns

Command-line Proxying

To verify Tor’s SOCKS5 proxy on port 9050, direct curl or similar tools through it:

curl --socks5-hostname 127.0.0.1:9050 https://check.torproject.org/api/ip

Successful output will resemble:

{"IsTor":true,"IP":"xxx.xxx.xxx.xxx"}

Tip: Some CLI tools (e.g., Git, SSH) require explicit proxy configuration—this isn’t done by default.

Graphical Browsing: Tor Browser

Do not conflate Tor system daemon (tor) and Tor Browser. For a hardened browsing experience:

  • Download and verify the official Tor Browser from the project site.

  • Alternatively, install via the torbrowser-launcher package for auto-updates:

    sudo apt install torbrowser-launcher
    torbrowser-launcher
    

5. Troubleshooting and Diagnostics

Logs: Service won’t start?

journalctl -xeu tor.service

Common cause: clock skew, missing keys, firewall interference.

Connectivity: Check outbound 443/tcp to ensure relay bootstrap:

nc -vz check.torproject.org 443

Should print succeeded. DNS leaks can still occur—address outside of Tor scope.

Firewall Gotchas

If ufw or manual iptables rules are present, port 9050 (local) is not necessary to accept from outside, but outbound access must not be blocked.


6. Under-the-Hood: What Actually Happens

ProcessPort(s)UserPurpose
tor.service9050 (SOCKS5)debian-torLocal proxy, isolates identity
torbrowser-launcherDynamic, user$USERGUI browser, ships own tor

Security trade-off: Tor daemon user separation means most apps won’t leak browser identity, but browser-level vulnerabilities remain if you install extra extensions or plugins.


Non-Obvious Practices

  • Use torsocks wrapper for applications not natively supporting Socks proxies:

    torsocks apt update
    torsocks ssh -o ProxyCommand="nc -x 127.0.0.1:9050 %h %p" user@hidden-service.onion
    
  • For headless or server use-cases: modify /etc/tor/torrc for extra listeners or HiddenService directives.

    Example:

    SocksPort 0
    HiddenServiceDir /var/lib/tor/myservice/
    HiddenServicePort 80 127.0.0.1:8080
    

    Restart the service after configuration changes.


Summary

Install Tor from the official Tor Project repository to ensure rapid security updates. Always verify service status and proxy function before trusting your anonymity. System and application-level proxy separation remains critical; not all traffic on a Linux system will use Tor by default. For browser use, rely on Tor Browser or torbrowser-launcher. CLI proxying, or integrating torsocks for legacy tools, extends Tor’s reach—but introduces complexity.

No system is perfect; keep your OpSec up-to-date along with your packages.