services: tor: Make it easier to use UNIX sockets.
* doc/guix.texi (Networking Services): Document it, and mention that tor-service is deprecated. * gnu/services/networking.scm (<tor-configuration>) <socks-socket-type>: New field. (tor-configuration->torrc): When socks-socket-type is 'unix, set SocksPort to UNIX domain socket /var/run/tor/socks-sock and set UnixSocksGroupWritable to 1. * gnu/tests/networking.scm (%tor-os/unix-socks-socket): Instead of using a custom config file, just set socks-socket-type to 'unix.
This commit is contained in:
parent
b0f951e4f0
commit
3bcb305b98
|
@ -11450,16 +11450,57 @@ detailed discussion of each configuration field.
|
||||||
@end deftp
|
@end deftp
|
||||||
|
|
||||||
@cindex Tor
|
@cindex Tor
|
||||||
@deffn {Scheme Procedure} tor-service [@var{config-file}] [#:tor @var{tor}]
|
@defvr {Scheme Variable} tor-service-type
|
||||||
Return a service to run the @uref{https://torproject.org, Tor} anonymous
|
This is the type for a service that runs the @uref{https://torproject.org,
|
||||||
networking daemon.
|
Tor} anonymous networking daemon. The service is configured using a
|
||||||
|
@code{<tor-configuration>} record. By default, the Tor daemon runs as the
|
||||||
|
@code{tor} unprivileged user, which is a member of the @code{tor} group.
|
||||||
|
|
||||||
The daemon runs as the @code{tor} unprivileged user. It is passed
|
@end defvr
|
||||||
@var{config-file}, a file-like object, with an additional @code{User tor} line
|
|
||||||
and lines for hidden services added via @code{tor-hidden-service}. Run
|
@deffn {Scheme Procedure} tor-service [@var{config-file}] [#:tor @var{tor}]
|
||||||
@command{man tor} for information about the configuration file.
|
This procedure is deprecated and will be removed in a future release. Return
|
||||||
|
a service of the @code{tor-service-type} type. @var{config-file} and
|
||||||
|
@var{tor} have the same meaning as in @code{<tor-configuration>}.
|
||||||
@end deffn
|
@end deffn
|
||||||
|
|
||||||
|
@deftp {Data Type} tor-configuration
|
||||||
|
@table @asis
|
||||||
|
@item @code{tor} (default: @code{tor})
|
||||||
|
The package that provides the Tor daemon. This package is expected to provide
|
||||||
|
the daemon at @file{bin/tor} relative to its output directory. The default
|
||||||
|
package is the @uref{https://www.torproject.org, Tor Project's}
|
||||||
|
implementation.
|
||||||
|
|
||||||
|
@item @code{config-file} (default: @code{(plain-file "empty" "")})
|
||||||
|
The configuration file to use. It will be appended to a default configuration
|
||||||
|
file, and the final configuration file will be passed to @code{tor} via its
|
||||||
|
@code{-f} option. This may be any ``file-like'' object (@pxref{G-Expressions,
|
||||||
|
file-like objects}). See @code{man tor} for details on the configuration file
|
||||||
|
syntax.
|
||||||
|
|
||||||
|
@item @code{hidden-services} (default: @code{'()})
|
||||||
|
The list of @code{<hidden-service>} records to use. For any hidden service
|
||||||
|
you include in this list, appropriate configuration to enable the hidden
|
||||||
|
service will be automatically added to the default configuration file. You
|
||||||
|
may conveniently create @code{<hidden-service>} records using the
|
||||||
|
@code{tor-hidden-service} procedure described below.
|
||||||
|
|
||||||
|
@item @code{socks-socket-type} (default: @code{'tcp})
|
||||||
|
The default socket type that Tor should use for its SOCKS socket. This must
|
||||||
|
be either @code{'tcp} or @code{'unix}. If it is @code{'tcp}, then by default
|
||||||
|
Tor will listen on TCP port 9050 on the loopback interface (i.e., localhost).
|
||||||
|
If it is @code{'unix}, then Tor will listen on the UNIX domain socket
|
||||||
|
@file{/var/run/tor/socks-sock}, which will be made writable by members of the
|
||||||
|
@code{tor} group.
|
||||||
|
|
||||||
|
If you want to customize the SOCKS socket in more detail, leave
|
||||||
|
@code{socks-socket-type} at its default value of @code{'tcp} and use
|
||||||
|
@code{config-file} to override the default by providing your own
|
||||||
|
@code{SocksPort} option.
|
||||||
|
@end table
|
||||||
|
@end deftp
|
||||||
|
|
||||||
@cindex hidden service
|
@cindex hidden service
|
||||||
@deffn {Scheme Procedure} tor-hidden-service @var{name} @var{mapping}
|
@deffn {Scheme Procedure} tor-hidden-service @var{name} @var{mapping}
|
||||||
Define a new Tor @dfn{hidden service} called @var{name} and implementing
|
Define a new Tor @dfn{hidden service} called @var{name} and implementing
|
||||||
|
|
|
@ -577,7 +577,9 @@ demand.")))
|
||||||
(config-file tor-configuration-config-file
|
(config-file tor-configuration-config-file
|
||||||
(default (plain-file "empty" "")))
|
(default (plain-file "empty" "")))
|
||||||
(hidden-services tor-configuration-hidden-services
|
(hidden-services tor-configuration-hidden-services
|
||||||
(default '())))
|
(default '()))
|
||||||
|
(socks-socket-type tor-configuration-socks-socket-type ; 'tcp or 'unix
|
||||||
|
(default 'tcp)))
|
||||||
|
|
||||||
(define %tor-accounts
|
(define %tor-accounts
|
||||||
;; User account and groups for Tor.
|
;; User account and groups for Tor.
|
||||||
|
@ -599,7 +601,7 @@ demand.")))
|
||||||
(define (tor-configuration->torrc config)
|
(define (tor-configuration->torrc config)
|
||||||
"Return a 'torrc' file for CONFIG."
|
"Return a 'torrc' file for CONFIG."
|
||||||
(match config
|
(match config
|
||||||
(($ <tor-configuration> tor config-file services)
|
(($ <tor-configuration> tor config-file services socks-socket-type)
|
||||||
(computed-file
|
(computed-file
|
||||||
"torrc"
|
"torrc"
|
||||||
(with-imported-modules '((guix build utils))
|
(with-imported-modules '((guix build utils))
|
||||||
|
@ -615,6 +617,10 @@ User tor
|
||||||
DataDirectory /var/lib/tor
|
DataDirectory /var/lib/tor
|
||||||
PidFile /var/run/tor/tor.pid
|
PidFile /var/run/tor/tor.pid
|
||||||
Log notice syslog\n" port)
|
Log notice syslog\n" port)
|
||||||
|
(when (eq? 'unix '#$socks-socket-type)
|
||||||
|
(display "\
|
||||||
|
SocksPort unix:/var/run/tor/socks-sock
|
||||||
|
UnixSocksGroupWritable 1\n" port))
|
||||||
|
|
||||||
(for-each (match-lambda
|
(for-each (match-lambda
|
||||||
((service (ports hosts) ...)
|
((service (ports hosts) ...)
|
||||||
|
|
|
@ -354,13 +354,7 @@ subnet 192.168.1.0 netmask 255.255.255.0 {
|
||||||
(simple-operating-system
|
(simple-operating-system
|
||||||
(service tor-service-type
|
(service tor-service-type
|
||||||
(tor-configuration
|
(tor-configuration
|
||||||
(config-file
|
(socks-socket-type 'unix)))))
|
||||||
(plain-file "test-torrc"
|
|
||||||
"\
|
|
||||||
SocksPort unix:/var/run/tor/socks-sock
|
|
||||||
UnixSocksGroupWritable 1
|
|
||||||
")
|
|
||||||
)))))
|
|
||||||
|
|
||||||
(define (run-tor-test)
|
(define (run-tor-test)
|
||||||
(define os
|
(define os
|
||||||
|
|
Loading…
Reference in New Issue