2

Я пытаюсь настроить скрытый сервис Tor в CentOS 7 (с systemd), используя пакет tor из репозитория EPEL.

Раньше это работало нормально, пока несколько дней назад не перестало работать. Ничто в системе не было перезапущено в это время, хотя автоматические обновления включены через yum-cron, так что возможно что-то обновлено.

Тем не менее, несмотря ни на что, я также видел эту проблему на стандартной установке Fedora Server и на рабочей станции Fedora.

Теперь, когда я пытаюсь запустить службу tor со скрытыми служебными строками в /etc/tor/torrc , она не запускается.

Я проверял сообщения об ошибках с помощью journalctl -xn , и они не согласованы - однако основные ошибки выглядят так:

Nov 09 22:05:18 hostname tor[7561]: Nov 09 22:05:18.245 [warn] Directory /var/lib/tor/sshservice/ cannot be read: Permission denied

и иногда:

Nov 09 22:12:33.119 [warn] /var/lib/tor/sshservice/ is not owned by this user (root, 0) but by toranon (997). Perhaps you are running Tor as the wrong user

Я обеспечил следующее относительно всего пути /var/lib/tor , но безуспешно:

  • Каталог принадлежит пользователю / группе toranon (по умолчанию для пользователя для пакета EPEL)
  • Разрешения установлены соответствующим образом (я пробовал 700, 770, 600, 660) для каталога.
  • Контексты SELinux установлены соответствующим образом для каталога, и я проверил это с помощью restorecon .

Другая информация:

  • Если я поменяю владельца каталога на root, я получу то же сообщение "неправильный пользователь", что и раньше, но с обратными именами пользователей.
  • Я попытался полностью отключить SELinux и убедился, что служба tor по-прежнему не запускается.
  • Скрытый каталог службы уже заполнен файлами закрытых ключей и имен хостов, и они были созданы демоном tor в этой системе. Эта конфигурация ранее полностью работала.
  • Если я полностью удаляю строки HiddenServiceDir и HiddenServicePort из конфигурации, Tor запускается, как и ожидалось.

Некоторые потенциально полезные результаты из /etc/tor/torrc:

# Do not run as client
SocksPort 0 #Run Tor only as a relay and do not create a local SOCKS proxy
SocksPolicy reject *

# Define hidden service for SSH
HiddenServiceDir /var/lib/tor/sshservice/
HiddenServicePort 44674 127.0.0.1:22 #Redirect local SSH port to a nonstandard public port

ls -Z из /var/lib/tor:

[root@sagan tor]# ls -Z
-rw-------. toranon toranon system_u:object_r:tor_var_lib_t:s0 cached-certs
-rw-------. toranon toranon system_u:object_r:tor_var_lib_t:s0 cached-microdesc-consensus
-rw-------. toranon toranon unconfined_u:object_r:tor_var_lib_t:s0 cached-microdescs
-rw-------. toranon toranon unconfined_u:object_r:tor_var_lib_t:s0 cached-microdescs.new
-rw-------. toranon toranon unconfined_u:object_r:tor_var_lib_t:s0 lock
drwx------. toranon toranon system_u:object_r:tor_var_lib_t:s0 sshservice
-rw-------. toranon toranon unconfined_u:object_r:tor_var_lib_t:s0 state

Не уверен, что может быть причиной этой проблемы, но я подозреваю, что это связано с точной настройкой systemd. Я экспериментировал с комментированием и удалением некоторых строк в файле systemd tor.service по умолчанию, но безуспешно.

В настоящее время я пытаюсь запустить tor с помощью systemctl start tor используя стандартный файл systemd tor.service поставляемый с CentOS.

Есть идеи? Помощь будет принята с благодарностью.

4 ответа4

3

Я просто решил эту проблему сам, не благодаря ужасному отсутствию отладочной способности systemd.

Оказывается, что systemd вмешивался в мой случай. Он разрешал пользователю toranon читать /var/lib/tor/ но не его подкаталог /var/lib/tor/hidden_service при запуске. Таким образом, если я запустил tor с правами root с помощью той же команды, это сработало бы, но запуск под systemd привел к его загадочному сбою. Разрешения на каталог были правильными, что было еще более непонятным.

Я решил эту проблему, изменив свой torrc файл и записав скрытые служебные файлы в каталог, который позволил процессу записать процесс. То есть вы можете изменить свою строку с:

HiddenServiceDir /var/lib/tor/sshservice/

в

HiddenServiceDir /var/lib/tor/

и все, наконец, может работать.

Другим вариантом, вероятно, будет указание systemd разрешить процессу читать подкаталог, изменив файл конфигурации systemd для tor.service , вероятно, в:

/usr/lib/systemd/system/tor.service

И изменив опцию ReadWriteDirectories чтобы включить созданный вами подкаталог, возможно, добавив строку:

ReadWriteDirectories=/var/lib/tor/sshservice/

Или добавьте этот путь в виде списка через пробел к одной из существующих записей в этом файле. (У него уже есть две разные строки ReadWriteDirectories но я не уверен, работает ли вторая, так как журналы не пишутся.) Согласно документации для systemd, запись должна представлять собой список абсолютных путей, разделенных пробелами, например:

ReadWriteDirectories=/var/lib/tor /var/lib/tor/sshservice /var/log/tor

Хотя я не пытался сделать это более неясное изменение, молча надеясь, что systemd умрет в пожаре, поэтому нам не нужно поддерживать третий набор файлов и разрешений.

1

Несколько исправлений, которые были опубликованы в ответ на этот вопрос, работают, но с переменным уровнем успеха.

Я обнаружил одно исправление, которое работает последовательно - загрузка нескольких исключений в SELinux.

Шаг 1

Создайте файл tor-selinux-workaround.cil со следующим содержимым:

(typeattributeset cil_gen_require tor_t) (allow tor_t self (capability (dac_override dac_read_search)))

Шаг 2

Импортируйте этот файл в SELinux с помощью следующей команды:

sudo semodule -i tor-selinux-workaround.cil

Это должно работать безупречно для современных систем Fedora и CentOS.

Больше информации

Для более полного объяснения, см. Мой пост здесь: https://alexhaydock.co.uk/tech/fix-tor-onion-services-on-centos-fedora

0

В моем случае мне пришлось добавить CAP_DAC_READ_SEARCH в CapabilityBoundingSet службы systemd:

/etc/systemd/system/multi-user.target.wants/tor@xxx.service

@@ -30,7 +30,7 @@
 ReadWriteDirectories=/run/tor
 ReadWriteDirectories=/var/lib/tor
 ReadWriteDirectories=/var/log/tor
-CapabilityBoundingSet=CAP_SETUID CAP_SETGID CAP_NET_BIND_SERVICE
+CapabilityBoundingSet=CAP_SETUID CAP_SETGID CAP_NET_BIND_SERVICE CAP_DAC_READ_SEARCH
 PermissionsStartOnly=yes

 [Install]

(изменение ReadWriteDirectories не требовалось)

  • /etc/centos-release: CentOS Linux выпуск 7.2.1511 (Core)
  • systemctl - версия: systemd 219
  • версия - Tor версия 0.2.8.7.
  • selinux: отключен

Если selinux включен, tor все равно не работает! /var/log/audit/audit.log:

type=AVC msg=audit(1475960766.994:123): avc:  denied  { dac_override } for  pid=2317 comm="tor" capability=1  scontext=system_u:system_r:tor_t:s0 tcontext=system_u:system_r:tor_t:s0 tclass=capability
type=AVC msg=audit(1475960766.994:123): avc:  denied  { dac_read_search } for  pid=2317 comm="tor" capability=2  scontext=system_u:system_r:tor_t:s0 tcontext=system_u:system_r:tor_t:s0 tclass=capability

Следуйте https://bugzilla.redhat.com/show_bug.cgi?id=1292626, чтобы это исправить.

Вышеуказанное представляется необходимым только в случае использования скрытых сервисов.

0

в Debian Jessie это сработало для меня (я храню скрытую служебную информацию в /opt /tor)

отредактируйте /etc /tor /torrc, добавив соответствующие директивы HiddenServiceDir и HiddenServicePort:

HiddenServiceDir /opt /tor /

HiddenServicePort 80 127.0.0.1:8080

Отредактируйте /lib/systemd/system/tor@default.service, добавьте эту строку в конец файла:

ReadWriteDirectories =/ Opt / тор

создать каталог и установить владельца и разрешения:

mkdir /opt /tor

Чоун дебиан-тор. / Опт / тор

chmod go-rwx /opt /tor

перезагрузить конфигурацию сервиса:

systemctl daemon-reload

и запустить сервис:

systemctl start tor

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .