Назад | Перейти на главную страницу

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

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

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

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

Все работает найди пока не перезапущу сервис sudo systemctl restart tor. После этого служба tor больше не запускается, регистрируя следующую ошибку: Directory /var/lib/tor/hidden_service_01/ cannot be read: Permission denied

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

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

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

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

ОБНОВЛЕНИЕ 1: Я проверил разрешения для папки, и они были:

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

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

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

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

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

Если вы посмотрите на tor.service unit, вы увидите, что у него есть команда, чтобы попытаться проверить конфигурацию 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 содержащий:

    [Service]
    User=toranon
    Group=toranon
    PermissionsStartOnly=no
    

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

PermissionsStartOnly=
Принимает логический аргумент. Если true, параметры выполнения, связанные с разрешениями, настроены с помощью User= и аналогичные варианты (см. systemd.exec (5) для получения дополнительной информации), применяются только к процессу, запущенному с ExecStart=, а не другим ExecStartPre=, ExecStartPost=, ExecReload=, 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, что решит проблему для всех.