/usr/sbin/tor-instance-create is in tor 0.2.7.6-1ubuntu1.
This file is owned by root:root, with mode 0o755.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 | #!/bin/bash
# Copyright (c) 2015 Peter Palfrader
#
# Permission is hereby granted, free of charge, to any person obtaining
# a copy of this software and associated documentation files (the
# "Software"), to deal in the Software without restriction, including
# without limitation the rights to use, copy, modify, merge, publish,
# distribute, sublicense, and/or sell copies of the Software, and to
# permit persons to whom the Software is furnished to do so, subject to
# the following conditions:
#
# The above copyright notice and this permission notice shall be
# included in all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
# create an instance of a tor service
set -e
set -u
BASEETC="/etc/tor/instances"
BASEDATA="/var/lib/tor-instances"
shopt -s extglob
usage() {
echo "Usage: $0 <instance-name>"
}
while getopts "h" OPTION
do
case "$OPTION" in
h)
usage
exit 0
;;
*)
usage >&2
exit 1
esac
done
shift $(($OPTIND - 1))
if [ "${1:-}" = "--help" ]; then
usage
exit 0
elif [ "$#" -lt 1 ]; then
usage >&2
exit 1
fi
name="$1"; shift
# XXX verify name is valid
if echo "x$name" | grep -q '[^a-zA-Z0-9]' ||
[ "$name" = "default" ] ; then
echo >&2 "Invalid name: $name."
exit 1
fi
etc="$BASEETC/$name"
torrc="$etc/torrc"
home="$BASEDATA/$name"
user="_tor-$name"
adduser --quiet \
--system \
--disabled-password \
--home "$home" \
--no-create-home \
--shell /bin/false \
--group \
--force-badname \
"$user"
install -d -m 02700 -o "$user" -g "$user" "$home"
install -d "$etc"
[ -e "$torrc" ] || cat > "$torrc" << EOF
# This is the tor configuration file for tor instance $name.
#
# To start/reload/etc this instance, run "systemctl tor@$name start" (or reload, or..).
# This instance will run as user $user; its data directory is $home.
#
SocksPort auto
EOF
[ -x /bin/systemctl ] && systemctl daemon-reload || true
|