Skip to content

Commit 9af99b6

Browse files
committed
doc: update/improve automatic tor section of tor.md
1 parent dfc4ce1 commit 9af99b6

File tree

1 file changed

+88
-31
lines changed

1 file changed

+88
-31
lines changed

doc/tor.md

Lines changed: 88 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -117,37 +117,94 @@ for normal IPv4/IPv6 communication, use:
117117

118118
## 3. Automatically create a Bitcoin Core onion service
119119

120-
Starting with Tor version 0.2.7.1 it is possible, through Tor's control socket
121-
API, to create and destroy 'ephemeral' onion services programmatically.
122-
Bitcoin Core has been updated to make use of this.
123-
124-
This means that if Tor is running (and proper authentication has been configured),
125-
Bitcoin Core automatically creates an onion service to listen on. This will positively
126-
affect the number of available .onion nodes.
127-
128-
This new feature is enabled by default if Bitcoin Core is listening (`-listen`), and
129-
requires a Tor connection to work. It can be explicitly disabled with `-listenonion=0`
130-
and, if not disabled, configured using the `-torcontrol` and `-torpassword` settings.
131-
To show verbose debugging information, pass `-debug=tor`.
132-
133-
Connecting to Tor's control socket API requires one of two authentication methods to be
134-
configured. It also requires the control socket to be enabled, e.g. put `ControlPort 9051`
135-
in `torrc` config file. For cookie authentication the user running bitcoind must have read
136-
access to the `CookieAuthFile` specified in Tor configuration. In some cases this is
137-
preconfigured and the creation of an onion service is automatic. If permission problems
138-
are seen with `-debug=tor` they can be resolved by adding both the user running Tor and
139-
the user running bitcoind to the same group and setting permissions appropriately. On
140-
Debian-based systems the user running bitcoind can be added to the debian-tor group,
141-
which has the appropriate permissions. Before starting bitcoind you will need to re-login
142-
to allow debian-tor group to be applied. Otherwise you will see the following notice: "tor:
143-
Authentication cookie /run/tor/control.authcookie could not be opened (check permissions)"
144-
on debug.log.
145-
146-
An alternative authentication method is the use
147-
of the `-torpassword=password` option. The `password` is the clear text form that
148-
was used when generating the hashed password for the `HashedControlPassword` option
149-
in the tor configuration file. The hashed password can be obtained with the command
150-
`tor --hash-password password` (read the tor manual for more details).
120+
Bitcoin Core makes use of Tor's control socket API to create and destroy
121+
ephemeral onion services programmatically. This means that if Tor is running and
122+
proper authentication has been configured, Bitcoin Core automatically creates an
123+
onion service to listen on. The goal is to increase the number of available
124+
onion nodes.
125+
126+
This feature is enabled by default if Bitcoin Core is listening (`-listen`) and
127+
it requires a Tor connection to work. It can be explicitly disabled with
128+
`-listenonion=0`. If it is not disabled, it can be configured using the
129+
`-torcontrol` and `-torpassword` settings.
130+
131+
To see verbose Tor information in the bitcoind debug log, pass `-debug=tor`.
132+
133+
### Control Port
134+
135+
You may need to set up the Tor Control Port. On Linux distributions there may be
136+
some or all of the following settings in `/etc/tor/torrc`, generally commented
137+
out by default (if not, add them):
138+
139+
```
140+
ControlPort 9051
141+
CookieAuthentication 1
142+
CookieAuthFileGroupReadable 1
143+
```
144+
145+
Add or uncomment those, save, and restart Tor (usually `systemctl restart tor`
146+
or `sudo systemctl restart tor` on most systemd-based systems, including recent
147+
Debian and Ubuntu, or just restart the computer).
148+
149+
On some systems (such as Arch Linux), you may also need to add the following
150+
line:
151+
152+
```
153+
DataDirectoryGroupReadable 1
154+
```
155+
156+
### Authentication
157+
158+
Connecting to Tor's control socket API requires one of two authentication
159+
methods to be configured: cookie authentication or bitcoind's `-torpassword`
160+
configuration option.
161+
162+
#### Cookie authentication
163+
164+
For cookie authentication, the user running bitcoind must have read access to
165+
the `CookieAuthFile` specified in the Tor configuration. In some cases this is
166+
preconfigured and the creation of an onion service is automatic. Don't forget to
167+
use the `-debug=tor` bitcoind configuration option to enable Tor debug logging.
168+
169+
If a permissions problem is seen in the debug log, e.g. `tor: Authentication
170+
cookie /run/tor/control.authcookie could not be opened (check permissions)`, it
171+
can be resolved by adding both the user running Tor and the user running
172+
bitcoind to the same Tor group and setting permissions appropriately.
173+
174+
On Debian-derived systems, the Tor group will likely be `debian-tor` and one way
175+
to verify could be to list the groups and grep for a "tor" group name:
176+
177+
```
178+
getent group | cut -d: -f1 | grep -i tor
179+
```
180+
181+
You can also check the group of the cookie file. On most Linux systems, the Tor
182+
auth cookie will usually be `/run/tor/control.authcookie`:
183+
184+
```
185+
stat -c '%G' /run/tor/control.authcookie
186+
```
187+
188+
Once you have determined the `${TORGROUP}` and selected the `${USER}` that will
189+
run bitcoind, run this as root:
190+
191+
```
192+
usermod -a -G ${TORGROUP} ${USER}
193+
```
194+
195+
Then restart the computer (or log out) and log in as the `${USER}` that will run
196+
bitcoind.
197+
198+
#### `torpassword` authentication
199+
200+
For the `-torpassword=password` option, the password is the clear text form that
201+
was used when generating the hashed password for the `HashedControlPassword`
202+
option in the Tor configuration file.
203+
204+
The hashed password can be obtained with the command `tor --hash-password
205+
password` (refer to the [Tor Dev
206+
Manual](https://2019.www.torproject.org/docs/tor-manual.html.en) for more
207+
details).
151208

152209
## 4. Privacy recommendations
153210

0 commit comments

Comments
 (0)