[tahoe-lafs-trac-stream] [tahoe-lafs] #2055: Building tahoe safely is non-trivial
tahoe-lafs
trac at tahoe-lafs.org
Thu Aug 8 20:08:17 UTC 2013
#2055: Building tahoe safely is non-trivial
-----------------------------------+---------------------------
Reporter: leif | Owner: daira
Type: defect | Status: new
Priority: normal | Milestone: undecided
Component: unknown | Version: 1.10.0
Keywords: install security eggs | Launchpad Bug:
-----------------------------------+---------------------------
Summary: to safely build Tahoe on an untrustworthy (read: any) network it
currently seems necessary to take an unintuitive step such as setting up a
restrictive firewall or simply disconnecting from the internet in order to
prevent {{{setup.py}}} from downloading and running arbitrary code via
http.
In this ticket I describe the two approaches I've tried: virtualenv v1.9.1
(w/ pip v1.3), and the "Desert Island" build. If appropriate precautions
are taken, both methods can yield what I believe are relatively "safe"
builds (that is to say, they at least use HTTPS (and require CA-signed
certificates) to ensure the integrity of the downloaded dependencies).
The former requires blocking pip's port 80 connections and the latter
requires disconnecting from the internet during the build.
== virtualenv+pip ==
Ideally, {{{pip install allmydata-tahoe}}} would be an easy and safe
command to run!
Version 1.3 of pip finally added certificate verification when making
https connections, but when installing allmydata-tahoe v1.10 it still
attempts to fetch foolscap and pycrypto via HTTP first. If that fails,
perhaps because you've configured a firewall to not allow port 80
connections, it will fall back to downloading them from PyPI via HTTPS.
^Note that using virtualenv 1.9 and pip 1.3, {{{pip install allmydata-
tahoe}}} fails unless {{{pip install twisted}}} is run first. This might
be because the former installs Twisted 11.0 while the latter installs
Twisted 13.0.^
== The "Desert Island" Build ==
On the AdvancedInstall wiki page there are instructions for a "Desert
Island" build, which consists of downloading and extracting https://tahoe-
lafs.org/source/tahoe-lafs/deps/tahoe-deps.tar.gz in the tahoe-lafs source
directory and running "{{{python setup.py build}}}".
While this does work fine without an internet connection, it still tries
repeatedly to connect to the internet. These are the lines of "{{{python
setup.py build}}}" output which contain "Reading http":
{{{
Reading http://pypi.python.org/simple/zope.interface/
Reading http://pypi.python.org/simple/
Reading https://tahoe-lafs.org/source/tahoe-lafs/deps/tahoe-lafs-dep-
sdists/
Reading https://tahoe-lafs.org/source/tahoe-lafs/deps/tahoe-lafs-dep-eggs/
Reading http://pypi.python.org/simple/mock/
Reading http://pypi.python.org/simple/
Reading http://pypi.python.org/simple/pyasn1/
Reading http://pypi.python.org/simple/pycrypto/
Reading http://pypi.python.org/simple/Nevow/
Reading http://pypi.python.org/simple/pyOpenSSL/
Reading http://pypi.python.org/simple/foolscap/
Reading http://pypi.python.org/simple/simplejson/
Reading http://pypi.python.org/simple/zfec/
Reading http://pypi.python.org/simple/pyutil/
Reading http://pypi.python.org/simple/zbase32/
}}}
Here is the context around one of them on my offline system (the others
are similar):
{{{
Reading http://pypi.python.org/simple/foolscap/
Download error: [Errno -2] Name or service not known -- Some packages may
not be found!
Couldn't retrieve index page for 'foolscap'
Best match: foolscap 0.6.4
Processing foolscap-0.6.4.tar.gz
Running foolscap-0.6.4/setup.py -q bdist_egg --dist-dir /tmp/easy_install-
vIEtM6/foolscap-0.6.4/egg-dist-tmp-Ipvbv_
zip_safe flag not set; analyzing archive contents...
foolscap.test.test_appserver: module references __file__
Adding foolscap 0.6.4 to easy-install.pth file
Installing flappserver script to support/bin
Installing flappclient script to support/bin
Installing flogtool script to support/bin
Installed /fake-path-to-my-source-checkout/tahoe-
lafs/support/lib/python2.7/site-packages/foolscap-0.6.4-py2.7.egg
}}}
I'm assuming (but have not confirmed) from the "Best match" part of this
output that if any of these attempted requests were successful and the
response indicated that there is a newer version of one of the
dependencies than the corresponding egg in tahoe-deps, it would actually
download and execute that code.
--
Ticket URL: <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/2055>
tahoe-lafs <https://tahoe-lafs.org>
secure decentralized storage
More information about the tahoe-lafs-trac-stream
mailing list