Отказано в доступе к скрытому каталогу служб в CentOS после перезапуска службы

Я установил tor из EPEL на недавно установленный CentOS7 (минимальный).

После настройки скрытого service Я проверяю и подтверждаю, что служба запущена и работает, просматривая URL-адрес, сгенерированный в файле hostname в браузере tor.

На этом этапе служба настроена на автоматический запуск с использованием systemctl enable tor

Все работает, пока я не перезапущу службу sudo systemctl restart tor . Каталог / var / lib / tor / hidden_service_01 / не может быть прочитан: папка Permission denied

hidden_service_01 автоматически создается службой tor при первом запуске.

если я удалю hidden_service_01 и снова запустите службу. Он запускается (генерирует новый URL-адрес .onion). Но как только он будет остановлен и запущен снова, ошибка разрешения возникает снова.

Почему я получаю ошибку разрешения и как мне заставить ее работать?

PS Я создал фрагмент руководства, который я использовал для своей конфигурации: https://gist.github.com/Dzoge/f059d30da77a21df1a0f29a0b5c528a2

ОБНОВЛЕНИЕ 1: Я проверил права доступа к папке, и они были следующими:

  • права доступа к папке - rwx ------. 2 toranon toranon
  • два файла внутри папки: rw -------. 1 toranon toranon

Я установил chmod на 770 , и теперь все папки и файлы имеют rwxrwx ---. 1 toranon toranon

Я пытаюсь запустить службу tor systemctl start tor , но все равно получаю такое же предупреждение о разрешении.

ОБНОВЛЕНИЕ 2: Я попытался сделать то же самое на сервере Ubuntu, и это сработало очень хорошо. Я также обновил суть и добавил руководство для ubuntu.

Проблема все еще остается с CentOS 7.

ОБНОВЛЕНИЕ 3 (обходной путь): Похоже, временный обходной путь - установить SELinux в разрешающий режим. Тогда все работает как положено.

2
задан 7 January 2018 в 00:44
1 ответ

Если вы посмотрите на модуль tor.service , вы увидите, что у него есть команда, чтобы попытаться проверить конфигурацию Tor перед запуском службы.

ExecStartPre=/usr/bin/tor --runasdaemon 0 --defaults-torrc /usr/share/tor/defaults-torrc -f /etc/tor/torrc --verify-config

Здесь дела идут не так. Когда это запускается, конфигурация не может быть проверена из-за проблемы с разрешениями, отмеченной ранее.

Jan 06 16:18:42 dalaran systemd[1]: Starting Anonymizing overlay network for TCP...
Jan 06 16:18:42 dalaran tor[28731]: Jan 06 16:18:42.650 [notice] Tor 0.2.9.14 (git-3f9bd01bf5736ff6) running on Linux with Libevent 2.0.21-stable, OpenSSL 1.0.2k-fips and Zlib 1.2.7.
Jan 06 16:18:42 dalaran tor[28731]: Jan 06 16:18:42.650 [notice] Tor can't help you if you use it wrong! Learn how to be safe at https://www.torproject.org/download/download#warning
Jan 06 16:18:42 dalaran tor[28731]: Jan 06 16:18:42.650 [notice] Read configuration file "/usr/share/tor/defaults-torrc".
Jan 06 16:18:42 dalaran tor[28731]: Jan 06 16:18:42.650 [notice] Read configuration file "/etc/tor/torrc".
Jan 06 16:18:42 dalaran tor[28731]: Jan 06 16:18:42.653 [warn] Directory /var/lib/tor/hidden_service_01/ cannot be read: Permission denied
Jan 06 16:18:42 dalaran tor[28731]: Jan 06 16:18:42.653 [warn] Checking service directory /var/lib/tor/hidden_service_01/ failed.
Jan 06 16:18:42 dalaran tor[28731]: Jan 06 16:18:42.653 [warn] Failed to parse/validate config: Failed to configure rendezvous options. See logs for details.
Jan 06 16:18:42 dalaran tor[28731]: Jan 06 16:18:42.653 [err] Reading config failed--see warnings above.
Jan 06 16:18:42 dalaran systemd[1]: tor.service: control process exited, code=exited status=1
Jan 06 16:18:42 dalaran systemd[1]: Failed to start Anonymizing overlay network for TCP.
Jan 06 16:18:42 dalaran systemd[1]: Unit tor.service entered failed state.
Jan 06 16:18:42 dalaran systemd[1]: tor.service failed.

В конце концов я проследил это до некоторой степени защиты, которую здесь выполняет systemd. Если вы прочтете далее в файле модуля, вы увидите, что systemd на самом деле запускает Tor в контейнере и очень жестко блокирует разрешения. Он также удаляет некоторые возможности, так что даже root не может выполнять некоторые действия, которые обычно может выполнять пользователь root, например, читать файлы других пользователей (это известно как CAP_DAC_OVERRIDE).

Когда мы пытаемся проверить неудачный запуск , мы находим:

type=PATH msg=audit(1515277122.651:3600): item=0 name="/var/lib/tor/hidden_service_01/" inode=1054341 dev=fd:01 mode=040700 ouid=988 ogid=983 rdev=00:00 obj=system_u:object_r:tor_var_lib_t:s0 objtype=NORMAL
type=CWD msg=audit(1515277122.651:3600):  cwd="/"
type=SYSCALL msg=audit(1515277122.651:3600): arch=c000003e syscall=2 success=no exit=-13 a0=561b6881af10 a1=20000 a2=0 a3=1 items=1 ppid=1 pid=28731 auid=4294967295 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=(none) ses=4294967295 comm="tor" exe="/usr/bin/tor" subj=system_u:system_r:tor_t:s0 key=(null)
type=AVC msg=audit(1515277122.651:3600): avc:  denied  { dac_read_search } for  pid=28731 comm="tor" capability=2  scontext=system_u:system_r:tor_t:s0 tcontext=system_u:system_r:tor_t:s0 tclass=capability
type=AVC msg=audit(1515277122.651:3600): avc:  denied  { dac_override } for  pid=28731 comm="tor" capability=1  scontext=system_u:system_r:tor_t:s0 tcontext=system_u:system_r:tor_t:s0 tclass=capability

Здесь я обнаружил, что команда проверки конфигурации на самом деле не менялась с пользователя root на пользователя toranon перед чтением конфигурации, поэтому доступ к каталогу был запрещен, поскольку systemd не давал процесс CAP_DAC_OVERRIDE. Вы можете видеть, что идентификаторы пользователей были зарегистрированы как uid = 0 gid = 0 euid = 0 suid = 0 fsuid = 0 egid = 0 sgid = 0 fsgid = 0 .

Чтобы решить эту проблему в моей системе, я решил, что systemd запускает Tor как toranon, а не как root, и Tor меняет свой собственный uid / gid.

  1. Я удалил параметр User toranon из / usr / share / tor / torrc-defaults .
  2. Я создал файл переопределения /etc/systemd/system/tor.service.d/override.conf , содержащий:

      [Сервис]
    Пользователь = toranon
    Группа = toranon
    PermissionsStartOnly = нет
     

Необходимо использовать PermissionsStartOnly = no , чтобы гарантировать, что команда ExecStartPre = запускается от имени пользователя toranon. Из документации :

PermissionsStartOnly =
Принимает логический аргумент. Если true, параметры выполнения, связанные с разрешениями, настроенные с помощью User = и аналогичные параметры (см. systemd.exec (5) для получения дополнительной информации), применяются только к запущенному процессу. с ExecStart = , а не с другими ExecStartPre = , ExecStartPost = , ExecReload = , ExecStop = ExecStop = ] и ExecStopPost = команды. Если false, настройка одинаково применяется ко всем настроенным командам. По умолчанию - false.

После systemctl daemon-reload я смог успешно systemctl start tor .

Jan 06 16:22:02 dalaran systemd[1]: Starting Anonymizing overlay network for TCP...
Jan 06 16:22:02 dalaran tor[32030]: Jan 06 16:22:02.541 [notice] Tor 0.2.9.14 (git-3f9bd01bf5736ff6) running on Linux with Libevent 2.0.21-stable, OpenSSL 1.0.2k-fips and Zlib 1.2.7.
Jan 06 16:22:02 dalaran tor[32030]: Jan 06 16:22:02.541 [notice] Tor can't help you if you use it wrong! Learn how to be safe at https://www.torproject.org/download/download#warning
Jan 06 16:22:02 dalaran tor[32030]: Jan 06 16:22:02.541 [notice] Read configuration file "/usr/share/tor/defaults-torrc".
Jan 06 16:22:02 dalaran tor[32030]: Jan 06 16:22:02.541 [notice] Read configuration file "/etc/tor/torrc".
Jan 06 16:22:02 dalaran tor[32030]: Configuration was valid
Jan 06 16:22:02 dalaran systemd[1]: Started Anonymizing overlay network for TCP.
Jan 06 16:22:02 dalaran tor[32035]: Jan 06 16:22:02.665 [notice] Tor 0.2.9.14 (git-3f9bd01bf5736ff6) running on Linux with Libevent 2.0.21-stable, OpenSSL 1.0.2k-fips and Zlib 1.2.7.
Jan 06 16:22:02 dalaran tor[32035]: Jan 06 16:22:02.665 [notice] Tor can't help you if you use it wrong! Learn how to be safe at https://www.torproject.org/download/download#warning
Jan 06 16:22:02 dalaran tor[32035]: Jan 06 16:22:02.665 [notice] Read configuration file "/usr/share/tor/defaults-torrc".
Jan 06 16:22:02 dalaran tor[32035]: Jan 06 16:22:02.665 [notice] Read configuration file "/etc/tor/torrc".
Jan 06 16:22:02 dalaran tor[32035]: Jan 06 16:22:02.668 [notice] Opening Socks listener on 127.0.0.1:9050
Jan 06 16:22:02 dalaran tor[32035]: Jan 06 16:22:02.668 [notice] Opening Control listener on /run/tor/control
Jan 06 16:22:02 dalaran Tor[32035]: OpenSSL version from headers does not match the version we're running with. If you get weird crashes, that might be why. (Compiled with 100020bf: OpenSSL 1.0.2k  26 Jan 2017; running wit
Jan 06 16:22:02 dalaran Tor[32035]: Tor 0.2.9.14 (git-3f9bd01bf5736ff6) running on Linux with Libevent 2.0.21-stable, OpenSSL 1.0.2k-fips and Zlib 1.2.7.
Jan 06 16:22:02 dalaran Tor[32035]: Tor can't help you if you use it wrong! Learn how to be safe at https://www.torproject.org/download/download#warning
Jan 06 16:22:02 dalaran Tor[32035]: Read configuration file "/usr/share/tor/defaults-torrc".
Jan 06 16:22:02 dalaran Tor[32035]: Read configuration file "/etc/tor/torrc".
Jan 06 16:22:02 dalaran Tor[32035]: Opening Socks listener on 127.0.0.1:9050
Jan 06 16:22:02 dalaran Tor[32035]: Opening Control listener on /run/tor/control
Jan 06 16:22:02 dalaran Tor[32035]: Parsing GEOIP IPv4 file /usr/share/tor/geoip.
Jan 06 16:22:02 dalaran Tor[32035]: Parsing GEOIP IPv6 file /usr/share/tor/geoip6.
Jan 06 16:22:02 dalaran Tor[32035]: Bootstrapped 0%: Starting
Jan 06 16:22:02 dalaran Tor[32035]: Bootstrapped 80%: Connecting to the Tor network
Jan 06 16:22:03 dalaran Tor[32035]: Bootstrapped 85%: Finishing handshake with first hop
Jan 06 16:22:04 dalaran Tor[32035]: Bootstrapped 90%: Establishing a Tor circuit
Jan 06 16:22:05 dalaran Tor[32035]: Tor has successfully opened a circuit. Looks like client functionality is working.
Jan 06 16:22:05 dalaran Tor[32035]: Bootstrapped 100%: Done

В конечном итоге это (или что-то подобное) должно быть включено в конфигурацию Tor по умолчанию и модуль systemd, поставляемый Fedora / EPEL, что решит проблему для всех.

5
ответ дан 3 December 2019 в 09:32

Теги

Похожие вопросы