{"id":6144,"date":"2026-09-04T22:27:03","date_gmt":"2026-09-04T13:27:03","guid":{"rendered":"https:\/\/eternalsphere.net\/echoes\/?p=6144"},"modified":"2026-09-12T17:17:17","modified_gmt":"2026-09-12T08:17:17","slug":"xkxk5s64h91aszh","status":"publish","type":"post","link":"https:\/\/blog.eternalsphere.net\/index.php\/2026\/09\/04\/xkxk5s64h91aszh\/","title":{"rendered":"Tor Browser on Arch Linux: Installation, Isolation, and the Architecture Behind It"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Tor Browser is often described as \u201cFirefox routed through Tor,\u201d but that description is incomplete.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Its design is based on a broader security model in which the browser engine, Tor client, browser profile, anti-fingerprinting protections, privacy defaults, update mechanism, and runtime data are treated as parts of one controlled environment.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">That design has several practical consequences on Linux. Installation differs from conventional browsers, profile handling is less flexible than Chromium-based browsers, and creating multiple isolated environments can result in multiple complete Tor Browser installations rather than several lightweight profiles.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">This article explains how that architecture works on Arch Linux and why Tor Browser is designed this way.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<h2 class=\"wp-block-heading\">Installing Tor Browser on Arch Linux<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">The standard Arch Linux approach is to install <code>torbrowser-launcher<\/code>:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo pacman -Syu torbrowser-launcher\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Then start it with:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>torbrowser-launcher\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">A crucial detail is that <code>pacman<\/code> does <strong>not<\/strong> install the complete Tor Browser bundle.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">It installs the launcher:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\/usr\/bin\/torbrowser-launcher\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">The launcher then performs several tasks:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Check the current Tor Browser release\n        \u2193\nDownload the official archive\n        \u2193\nDownload the OpenPGP signature\n        \u2193\nVerify the archive\n        \u2193\nExtract Tor Browser\n        \u2193\nLaunch the browser\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">The actual Tor Browser installation is normally placed somewhere under:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>~\/.local\/share\/torbrowser\/\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">A typical structure looks like:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>~\/.local\/share\/torbrowser\/\n\u2514\u2500\u2500 tbb\/\n    \u2514\u2500\u2500 x86_64\/\n        \u2514\u2500\u2500 tor-browser\/\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">This distinction matters because <code>pacman<\/code> manages the launcher package, while the launcher manages the Tor Browser bundle in the user&#8217;s data directory.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<h2 class=\"wp-block-heading\"><code>torbrowser-launcher<\/code> Is Not Tor Browser<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">The package installed through Arch Linux is best understood as:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Downloader\n+\nSignature verifier\n+\nInstaller\n+\nUpdater\n+\nLauncher\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">The actual browser is downloaded separately.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">This explains why a command such as:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>pacman -Ql torbrowser-launcher\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">shows launcher-related files, while the Tor Browser executable itself lives in the user data directory.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The browser engine is located inside the downloaded bundle, for example:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>...\/tor-browser\/Browser\/firefox.real\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">The Tor client bundled with Tor Browser is typically located under:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>...\/tor-browser\/Browser\/TorBrowser\/Tor\/tor\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Those files are not conventional Arch package payloads installed directly by <code>pacman<\/code>.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<h2 class=\"wp-block-heading\">The Standalone <code>tor<\/code> Package Is Different<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Arch Linux also provides a package called:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo pacman -S tor\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">That package installs the standalone Tor daemon.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">It is useful for purposes such as:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Tor relays\nBridges\nOnion services\nSystem SOCKS proxies\nApplication-level Tor routing\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">It is not required merely to use Tor Browser.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Tor Browser already carries the Tor client required for its own network connection.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The distinction is therefore:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>torbrowser-launcher\n        \u2193\nTor Browser bundle\n        \u2193\nBundled Tor client\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">versus:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Arch package: tor\n        \u2193\nStandalone Tor daemon\n<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<h1 class=\"wp-block-heading\">Why Tor Browser Does Not Behave Like Brave or Chromium<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Chromium-based browsers generally use a very flexible application-data model.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">For example:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>brave --user-data-dir=\/some\/path\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">This allows one installed browser executable to use many independent data directories:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\/usr\/bin\/brave\n     \u2502\n     \u251c\u2500\u2500 Profile environment A\n     \u251c\u2500\u2500 Profile environment B\n     \u2514\u2500\u2500 Profile environment C\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">The browser program and browser data are clearly separated.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Tor Browser follows a different model.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Its Linux distribution is closer to a <strong>self-contained application bundle<\/strong>:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>tor-browser\/\n\u251c\u2500\u2500 start-tor-browser.desktop\n\u2514\u2500\u2500 Browser\/\n    \u251c\u2500\u2500 firefox.real\n    \u251c\u2500\u2500 browser\/\n    \u2514\u2500\u2500 TorBrowser\/\n        \u2514\u2500\u2500 Data\/\n            \u251c\u2500\u2500 Browser\/\n            \u2502   \u2514\u2500\u2500 profile.default\/\n            \u2514\u2500\u2500 Tor\/\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">That bundle contains not only a Firefox-derived browser, but also:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Tor client\nTor configuration\nBrowser profile\nPrivacy defaults\nAnti-fingerprinting configuration\nBrowser resources\nSecurity-related components\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">In other words, Tor Browser is designed more like:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Browser environment\n+\nNetwork environment\n+\nPrivacy environment\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">rather than simply:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Browser executable\n+\nArbitrary profile path\n<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<h1 class=\"wp-block-heading\">Why Tor Browser Uses a Bundle-Oriented Design<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Tor Browser is not intended to be equivalent to:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Firefox\n+\nSOCKS proxy\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Its security model depends on controlling multiple layers simultaneously.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">A website can potentially observe information such as:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Screen dimensions\nWindow dimensions\nLanguage\nTimezone\nFonts\nGraphics capabilities\nBrowser APIs\nWebGL behavior\nOperating-system characteristics\nBrowser preferences\nExtensions\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Even when the user&#8217;s IP address is hidden, an unusual combination of these properties may contribute to browser fingerprinting.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Tor Browser therefore attempts to make users resemble larger groups of other Tor Browser users.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The goal is not simply to hide the IP address.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The goal is also to reduce uniqueness.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<h1 class=\"wp-block-heading\">Browser Fingerprinting and Network Anonymity Are Different Problems<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Tor routing protects the network path:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Client\n  \u2193\nEntry relay\n  \u2193\nMiddle relay\n  \u2193\nExit relay\n  \u2193\nDestination\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">The destination normally sees the Tor exit relay rather than the client&#8217;s original public IP address.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">However, consider a browser with:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Rare fonts\n+\nUnusual extensions\n+\nUnique preferences\n+\nDistinctive window size\n+\nRare graphics characteristics\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">That browser could potentially remain recognizable across multiple sessions even if its exit IP changes.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">This is why Tor Browser treats browser configuration as part of its anonymity system.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Simply configuring an ordinary browser to use a Tor SOCKS proxy does not reproduce the entire Tor Browser security model.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<h1 class=\"wp-block-heading\">Window Size and Letterboxing<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Window dimensions can contribute to browser fingerprinting.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Tor Browser therefore standardizes content dimensions and uses a mechanism commonly known as <strong>letterboxing<\/strong>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Instead of exposing arbitrary content dimensions directly, Tor Browser attempts to place users into standardized size groups.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">This can produce visible margins around webpage content when a window is resized or maximized.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">That behavior is deliberate.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">A conventional browser may prioritize:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Restore exactly the previous window dimensions\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Tor Browser may prioritize:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Reduce fingerprint uniqueness\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Those goals are not always identical.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">This also explains why Tor Browser may reopen using a standardized window size instead of always reproducing the previous desktop geometry exactly.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<h1 class=\"wp-block-heading\">The Tor Browser Profile Is Part of the Environment<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">The Tor Browser profile typically exists inside the browser bundle:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Browser\/TorBrowser\/Data\/Browser\/profile.default\/\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Tor runtime data exists nearby:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Browser\/TorBrowser\/Data\/Tor\/\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">This creates a structure such as:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Tor Browser bundle\n\u2502\n\u251c\u2500\u2500 Browser executable\n\u251c\u2500\u2500 Browser resources\n\u251c\u2500\u2500 Tor binary\n\u251c\u2500\u2500 Tor configuration\n\u251c\u2500\u2500 Tor runtime data\n\u2514\u2500\u2500 Browser profile\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">This is fundamentally different from the Chromium model:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>System browser executable\n        \u2193\narbitrary --user-data-dir\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Firefox internally supports profile mechanisms, but Tor Browser does not emphasize arbitrary profile switching as a primary operating model.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Its tested security assumptions are built around a known Tor Browser environment.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<h1 class=\"wp-block-heading\">What Happens When the XDG Data Directory Is Changed<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Linux applications commonly use XDG environment variables such as:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>XDG_CONFIG_HOME\nXDG_CACHE_HOME\nXDG_DATA_HOME\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">An alternate Tor Browser environment can therefore be created by launching <code>torbrowser-launcher<\/code> with different XDG directories.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">For example:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>#!\/bin\/bash\n\nBASE_DIR=\"$(cd -- \"$(dirname -- \"${BASH_SOURCE&#091;0]}\")\" &amp;&amp; pwd)\"\n\nexport XDG_CONFIG_HOME=\"$BASE_DIR\/config\"\nexport XDG_CACHE_HOME=\"$BASE_DIR\/cache\"\nexport XDG_DATA_HOME=\"$BASE_DIR\/data\"\n\nmkdir -p \\\n    \"$XDG_CONFIG_HOME\" \\\n    \"$XDG_CACHE_HOME\" \\\n    \"$XDG_DATA_HOME\"\n\nexec \/usr\/bin\/torbrowser-launcher \"$@\"\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">The script can simply be named:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>launch.sh\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">or:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>start.sh\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">There is no technical reason for filenames or directories to describe the intended browsing purpose.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">A neutral directory layout might be:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>~\/Applications\/TorBrowser-A\/\n\u251c\u2500\u2500 launch.sh\n\u251c\u2500\u2500 config\/\n\u251c\u2500\u2500 cache\/\n\u2514\u2500\u2500 data\/\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">This naming convention has an additional privacy benefit: filesystem names do not reveal unnecessary contextual information.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<h1 class=\"wp-block-heading\">Why Changing <code>XDG_DATA_HOME<\/code> Downloads Another Browser<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Changing:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>XDG_DATA_HOME\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">does not tell Tor Browser:<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\">Create another Firefox profile.<\/p>\n<\/blockquote>\n\n\n\n<p class=\"wp-block-paragraph\">It tells <code>torbrowser-launcher<\/code>:<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\">Use a different application-data environment.<\/p>\n<\/blockquote>\n\n\n\n<p class=\"wp-block-paragraph\">The launcher then looks for Tor Browser under the new data directory.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">If no installation exists there, it concludes:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Tor Browser has not yet been installed in this environment.\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">The expected result is therefore:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Downloading Tor Browser for the first time.\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">After installation, a layout may resemble:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>TorBrowser-A\/\n\u251c\u2500\u2500 launch.sh\n\u251c\u2500\u2500 config\/\n\u251c\u2500\u2500 cache\/\n\u2514\u2500\u2500 data\/\n    \u2514\u2500\u2500 torbrowser\/\n        \u251c\u2500\u2500 gnupg_homedir\/\n        \u2514\u2500\u2500 tbb\/\n            \u2514\u2500\u2500 x86_64\/\n                \u2514\u2500\u2500 tor-browser\/\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">This is a second complete Tor Browser environment.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">It is not merely a second profile.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<h1 class=\"wp-block-heading\">Chromium Profiles Versus Tor Browser Environments<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">The architectural difference can be summarized clearly.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Chromium-style model<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code>One executable\n     \u2502\n     \u251c\u2500\u2500 Data directory A\n     \u251c\u2500\u2500 Data directory B\n     \u2514\u2500\u2500 Data directory C\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">This is lightweight and convenient.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Tor Browser-style isolation<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code>Environment A\n\u251c\u2500\u2500 Browser\n\u251c\u2500\u2500 Tor\n\u251c\u2500\u2500 Profile\n\u2514\u2500\u2500 Configuration\n\nEnvironment B\n\u251c\u2500\u2500 Browser\n\u251c\u2500\u2500 Tor\n\u251c\u2500\u2500 Profile\n\u2514\u2500\u2500 Configuration\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">This consumes more disk space.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">However, the security boundary is simpler to understand.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Each environment can be treated as one independent unit.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<h1 class=\"wp-block-heading\">Why a GnuPG Directory Appears<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">An isolated launcher environment may contain:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>gnupg_homedir\/\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Processes such as:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>gpg-agent\nscdaemon\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">may also appear.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">These are related to cryptographic verification.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Tor Browser releases are distributed together with OpenPGP signatures.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The launcher therefore performs something conceptually similar to:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Download browser archive\n        \u2193\nDownload signature\n        \u2193\nVerify publisher signature\n        \u2193\nExtract verified archive\n        \u2193\nRun browser\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">The GnuPG environment is therefore part of the software-supply-chain verification process.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">It is not browser-history data.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<h1 class=\"wp-block-heading\">Why the Directory Contains Many Files<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">An isolated Tor Browser environment can contain many files immediately after initialization.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">That is expected.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The directory contains far more than browser history.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">It may contain:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Firefox-derived engine\nTor executable\nBrowser resources\nLocalization files\nProfile defaults\nLauncher state\nGnuPG verification data\nTor configuration\nSecurity components\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">The actual profile may contain files such as:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>places.sqlite\nfavicons.sqlite\npermissions.sqlite\nprefs.js\nbookmarkbackups\/\nstorage\/\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">SQLite databases may also temporarily create:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>*.sqlite-wal\n*.sqlite-shm\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Tor itself maintains runtime information under its own data directory.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Therefore:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Large directory\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">does not imply:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Large browsing-history database\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Much of the storage is simply the application bundle.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<h1 class=\"wp-block-heading\">Persistent Data and Ephemeral Data<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Tor Browser deliberately minimizes persistent browsing state.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">A useful conceptual distinction is:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Automatically generated browsing state\n        \u2193\nTemporary\n\nExplicitly selected information\n        \u2193\nPersistent\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Bookmarks are a good example.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">A session can disappear while deliberately saved bookmarks remain.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">This implements a useful data-minimization principle:<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\">Persistent storage should favor intentionally retained information rather than automatically preserving every browsing event.<\/p>\n<\/blockquote>\n\n\n\n<p class=\"wp-block-paragraph\">That reduces the amount of historical behavior available from local browser data.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<h1 class=\"wp-block-heading\">Data Minimization as a Security Mechanism<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Privacy is not only about network traffic.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">It is also about stored information.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Suppose one browser profile retains:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Years of history\nCookies\nSite databases\nSearch records\nSessions\nDownload records\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">while another retains only:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Configuration\nBookmarks\nMinimal persistent state\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">If both directories are later copied, inspected, or exposed, the second environment reveals much less historical activity.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">This illustrates a general security principle:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Data that was never retained\ncannot later leak from local storage.\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Network anonymity and local data minimization therefore solve different problems.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<h1 class=\"wp-block-heading\">Multiple Tor Browser Instances and Port Conflicts<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Each Tor Browser instance normally launches its own Tor process.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Typical local interfaces include:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>127.0.0.1:9150\n127.0.0.1:9151\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">If two independent Tor Browser environments are launched simultaneously, both may attempt to use the same local ports.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The result can be:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Tor exited during startup\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">This may look like a browser failure, but the cause can simply be:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Instance A\n    \u2193\nalready owns Tor ports\n\nInstance B\n    \u2193\ntries to bind the same ports\n    \u2193\nfails\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Useful diagnostics include:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>pgrep -af 'TorBrowser\/Tor\/tor|firefox\\.real'\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">and:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>ss -lntp | grep -E ':(9150|9151)\\b'\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">If simultaneous execution is unnecessary, the simplest solution is to allow one Tor Browser environment to exit completely before launching another.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<h1 class=\"wp-block-heading\">Why Heavy Customization Can Reduce Privacy<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Tor Browser has a counterintuitive property:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>More customization is not always more secure.<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">A conventional browser may be heavily personalized:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Custom extensions\nCustom fonts\nModified preferences\nSpecial window behavior\nUnusual APIs\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">In an anonymity-oriented browser, every unusual property can potentially contribute to uniqueness.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Tor Browser therefore benefits from standardization.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The safer general principle is:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Stay close to Tor Browser defaults\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">rather than:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Modify every possible preference\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">A highly customized Tor Browser may become easier to distinguish from the larger Tor Browser population.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<h1 class=\"wp-block-heading\">Neutral Naming Is Also Good Operational Practice<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Directory and script names can reveal context unnecessarily.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">For example, names describing:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Personal interests\nSecurity intentions\nBrowsing categories\nIdentity roles\nSpecific use cases\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">provide information that the software itself does not require.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Neutral naming is preferable.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Good examples include:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>TorBrowser-A\/\nTorBrowser-B\/\nTB-01\/\nBrowserEnv\/\nBrowserSet\/\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">and scripts such as:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>launch.sh\nstart.sh\nrun.sh\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">The filesystem should reveal only what is operationally necessary.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">This principle applies beyond Tor Browser.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Neutral names are useful for:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Backup sets\nVirtual machines\nBrowser profiles\nContainer environments\nSSH configurations\nTest directories\nAutomation scripts\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Operational clarity does not require descriptive personal context.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<h1 class=\"wp-block-heading\">Tor Browser Is a Security Environment, Not Just a Browser<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">The most useful way to understand Tor Browser is:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Network anonymity\n        +\nBrowser anti-fingerprinting\n        +\nControlled defaults\n        +\nMinimal persistence\n        +\nCryptographic verification\n        +\nEnvironment isolation\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">This explains many of its architectural choices.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">It distributes a complete browser bundle because the browser itself is part of the security model.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">It carries its own Tor client because Tor configuration is part of the expected environment.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">It standardizes browser behavior because fingerprint uniqueness matters.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">It minimizes persistent state because local history can also become a privacy risk.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">It verifies downloads because software-distribution integrity is essential to the entire security chain.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<h1 class=\"wp-block-heading\">A Clean Arch Linux Layout<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">A neutral Linux organization can look like:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>System\n\u2502\n\u251c\u2500\u2500 pacman\n\u2502   \u2514\u2500\u2500 torbrowser-launcher\n\u2502\n\u251c\u2500\u2500 Primary browser\n\u2502   \u2514\u2500\u2500 Normal persistent profile\n\u2502\n\u2514\u2500\u2500 Tor Browser environment\n    \u251c\u2500\u2500 launch.sh\n    \u251c\u2500\u2500 config\/\n    \u251c\u2500\u2500 cache\/\n    \u2514\u2500\u2500 data\/\n        \u251c\u2500\u2500 Launcher state\n        \u251c\u2500\u2500 GnuPG verification state\n        \u2514\u2500\u2500 Tor Browser bundle\n            \u251c\u2500\u2500 Browser\n            \u251c\u2500\u2500 Tor\n            \u251c\u2500\u2500 Profile\n            \u2514\u2500\u2500 Runtime data\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">If another isolated Tor Browser environment is needed, a separate XDG root can be created:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>TorBrowser-A\/\nTorBrowser-B\/\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Each environment remains understandable without embedding personal meaning in filesystem names.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<h1 class=\"wp-block-heading\">Final Perspective<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Tor Browser initially feels unusual to users accustomed to Chromium&#8217;s flexible <code>--user-data-dir<\/code> model.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The difference reflects different priorities.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Chromium is primarily a general-purpose browser platform with flexible profile management.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Tor Browser is a standardized anonymity environment.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Its architecture asks a different question.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Not:<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\">How easily can arbitrary browser profiles be created?<\/p>\n<\/blockquote>\n\n\n\n<p class=\"wp-block-paragraph\">But:<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\">How can the browser, network stack, stored state, and observable characteristics remain controlled enough that individual users are harder to distinguish?<\/p>\n<\/blockquote>\n\n\n\n<p class=\"wp-block-paragraph\">Once that principle is understood, many behaviors become logical.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">A new XDG environment downloads another full Tor Browser because the launcher considers it a separate installation environment.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The profile lives inside the browser bundle because browser state is part of the security model.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Window behavior is standardized because dimensions contribute to fingerprinting.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Persistent state is minimized because unnecessary historical data creates unnecessary exposure.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">And additional disk usage can be an acceptable tradeoff when it produces clear separation between complete browser environments.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Tor Browser is therefore best understood not merely as a modified Firefox build, but as a deliberately constrained system in which <strong>network routing, browser standardization, local-data behavior, cryptographic verification, and isolation are all components of the same security philosophy<\/strong>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Tor Browser is often described as \u201cFirefox routed through Tor,\u201d but that description is incomplete. Its design is based on a broader security model in which the browser engine, Tor client, browser profile, anti-fingerprinting protections, privacy defaults, update mechanism, and runtime data are treated as parts of one controlled environment. &hellip;<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[120],"tags":[219,245],"class_list":["post-6144","post","type-post","status-publish","format-standard","hentry","category-1s3b6h7r2zay02x","tag-arch-linux","tag-tor"],"_links":{"self":[{"href":"https:\/\/blog.eternalsphere.net\/index.php\/wp-json\/wp\/v2\/posts\/6144","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.eternalsphere.net\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.eternalsphere.net\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.eternalsphere.net\/index.php\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.eternalsphere.net\/index.php\/wp-json\/wp\/v2\/comments?post=6144"}],"version-history":[{"count":1,"href":"https:\/\/blog.eternalsphere.net\/index.php\/wp-json\/wp\/v2\/posts\/6144\/revisions"}],"predecessor-version":[{"id":6145,"href":"https:\/\/blog.eternalsphere.net\/index.php\/wp-json\/wp\/v2\/posts\/6144\/revisions\/6145"}],"wp:attachment":[{"href":"https:\/\/blog.eternalsphere.net\/index.php\/wp-json\/wp\/v2\/media?parent=6144"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.eternalsphere.net\/index.php\/wp-json\/wp\/v2\/categories?post=6144"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.eternalsphere.net\/index.php\/wp-json\/wp\/v2\/tags?post=6144"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}