Мне для нужд безопасной передачи файлов нужна инструкция, применяя которую я с Ubuntu 18.04 Server где развернут сервис OpenVPN смогу передавать файлы устройствам которые будут подключены через OpenVPNклиент к моей инфраструктуре за Mikrotik(ом) которые подключается к OpenVPNсерверу через USBмодем + SIMкарта TELE2.

Т.е. схема такая:

OpenVPN-сервер, генерирую ключи для клиента -> через WebDAV передаю их на собственный OwnCloud-сервер -> на клиенте подключаюсь к OwnCloud-серверу (Приложение или Браузер) и забираю сертификтаы.

В роли устройств могут выступать:

  • Windows системы
  • Android смартфоны (к примеру Huawei Honor 5C)
  • Ubuntu Desktop

Исходные данные:

  • Srv-vpn: -> Система Ubuntu 18.04 Server amd64 которая развернута из Template купленной VPS (на ней же развернут OpenVPN-сервер)
  • Srv-cloud: -> Система Ubuntu 18.04 Server amd64 на которой развернут ownCloud 10.0.10 (stable) (172.35.35.6 или WAN-адрес)

На вашем OwnCloud должен уже быть создан каталог у пользователя которого будем монтировать.

Узнать путь по обращению через webdav для OwnCloud 10.0.10 (stable) можно открыв URL страницу: https://IP&DNS – user&pass (Административный) – Настройки – и в окне с названием WebDAV будет URL строка на подключение:

https://IP&DNS/remote.php/dav/files/ekzorchik/ которую я сейчас и буду использовать на консольное подключение к системе, где у меня роль OpenVPN-сервера.

где ekzorchik — это моя учетная запись под которой я авторизуюсь на собственном OwnCloud 10, как в локальной сети, так из вне.

Шаг №1: Обновляю систему srv-bionic до самого последнего состояния в рамках текущего релиза:

ekzorchik@srv-vpn:~$ sudo rm -Rf /var/lib/apt/lists

ekzorchik@srv-vpn:~$ sudo nano /etc/update-manager/release-upgrades

Prompt=never

ekzorchik@srv-vpn:~$ sudo apt-get update && sudo apt-get upgrade -y

ekzorchik@srv-vpn:~$ sudo apt-get autoremove && sudo apt-get autoclean

ekzorchik@srv-vpn:~$ sudo reboot

ekzorchik@srv-vpn:~$ uname -a && lsb_release -a

Linux srv-bionic 4.15.0-60-generic #67-Ubuntu SMP Thu Aug 22 16:55:30 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux

No LSB modules are available.

Distributor ID: Ubuntu

Description:    Ubuntu 18.04.3 LTS

Release:        18.04

Codename:       bionic

ekzorchik@srv-vpn:~$

Шаг №2: Устанавливаю пакет davfs2:

ekzorchik@srv-vpn:~$ sudo apt-get install -y davfs2

Should unprivileged users be allowed to mount WebDAV resources? No
  • No -> это чтобы только от имени повышения прав через sudo можно было взаимодействовать с WebDAV-ресурсом
  • Yes -> это чтобы от имени учетной записи локальной системы которая будет входить в группу davfs2 (sudo usermod -aG davfs2 ekzorchik).

Изменить привилегии взаимодействия с ресурсом WebDAV можно:

ekzorchik@srv-vpn:~$ sudo dpkg-reconfigure davfs2

Шаг №3: Проверяю, через консоль возможность подключения к WebDAV ресурсу:

ekzorchik@srv-vpn:~$ sudo mkdir /media/client

ekzorchik@srv-vpn:~$ sudo mount -t davfs https://IP&DNS/remote.php/dav/files/ekzorchik/client /media/client -o rw

Please enter the username to authenticate with server

https://IP&DNS/remote.php/dav/files/ekzorchik/client or hit enter for none.

Username: ekzorchik

Please enter the password to authenticate user ekzorchik with server

https://IP&DNS/remote.php/dav/files/ekzorchik/client or hit enter for none.

Password:

/sbin/mount.davfs: connection timed out two times;

trying one last time

/sbin/mount.davfs: server temporarily unreachable;

mounting anyway

ekzorchik@srv-vpn:~$

ekzorchik@srv-vpn:~$ df -h | grep client

https://IP&DNS/remote.php/dav/files/ekzorchik/client  1.3T  763G  509G  61% /media/client

ekzorchik@srv-vpn:~$

ekzorchik@srv-vpn:~$ sudo mkdir  /media/client/1

mkdir: cannot create directory ‘/media/client/1’: Resource temporarily unavailable

https://IP&DNS/remote.php/dav/files/ekzorchik/client, где client это каталог на OwnCloud хранилище учетной записи ekzorchik, можно создать, а можно и не создавать, а значит и не указывать при монтировании.

Ресурс не подключен. Т.к. я вспомнил, что данное DNS-имя remote.ekzorchik.ru (в качестве примера) – это CNAME-запись  моего внешнего IP-адреса через который я выхожу в интернет. А раз я в своей локальной сети, то мне нужно указывать внутренний IP-адрес (172.35.35.6) сервиса OwnCloud 10:

ekzorchik@srv-vpn:~$ sudo umount /media/client

/sbin/umount.davfs: waiting while mount.davfs (pid 605) synchronizes the cache .. OK

ekzorchik@srv-vpn:~$ sudo mount -t davfs https://172.35.35.6/remote.php/dav/files/ekzorchik/client /media/client -o rw

Please enter the username to authenticate with server

https://172.35.35.6/remote.php/dav/files/ekzorchik/client or hit enter for none.

Username: ekzorchik

Please enter the password to authenticate user ekzorchik with server

https://172.35.35.6/remote.php/dav/files/ekzorchik/client or hit enter for none.

Password:

/sbin/mount.davfs: the server certificate is not trusted

issuer:      172.35.35.6

subject:     172.35.35.6

identity:    172.35.35.6

fingerprint: 4c:ba:66:59:71:93:0f:b7:ff:d8:ed:b8:9d:b2:ac:55:49:7f:5d:b3

You only should accept this certificate, if you can

verify the fingerprint! The server might be faked

or there might be a man-in-the-middle-attack.

Accept certificate for this session? [y,N] y

/sbin/mount.davfs: warning: the server does not support locks

ekzorchik@srv-vpn:~$

Ошибка: «the server does not support locks» убирается, как редактирование на системе, на которой происходит подключение к WebDAV:

ekzorchik@srv-vpn:~$ sudo nano /etc/davfs2/davfs2.conf

# use_locks       1

use_locks 0

ekzorchik@srv-vpn:~$ df -h | grep client

https://172.35.35.6/remote.php/dav/files/ekzorchik/client   16E  8.0K   16E   1% /media/client

Проверяю, а вижу ли я содержимое каталога /media/client?:

ekzorchik@srv-vpn:~$ ls /media/client/

ca.crt  client2.crt  client2.csr  client2.key  lost+found

ekzorchik@srv-vpn:~$

ekzorchik@srv-vpn:~$ sudo umount /media/client

/sbin/umount.davfs: waiting while mount.davfs (pid 631) synchronizes the cache .. OK

ekzorchik@srv-vpn:~$

Ответ да, вижу файлы, как раз у меня там файлы клиентского сертификата для OpenVPN-клиента.

На заметку: Если все выше проделывать на системе Ubuntu 18.04 Server которая не находится в моей локальной сети, то подключение проходит по FQDN имени.

Шаг №4: Если нужно на постоянку, чтобы OwnCloud папка была смонтирована, то вот действия:

ekzorchik@srv-vpn:~$ sudo nano /etc/davfs2/secrets

https://172.35.35.6/remote.php/dav/files/ekzorchik/client<TAB>ekzorchik<TAB><PASSWORD>

После не забываем сохранить внесенные изменения.

ekzorchik@srv-vpn:~$ sudo nano /etc/fstab

https://172.35.35.6/remote.php/dav/files/ekzorchik/client<TAB>/media/client<TAB>davfs<TAB>rw,user,auto<PROBEL>0<PROBEL>0

После не забываем сохранить внесенные изменения.

Монтируем что было предопределено в файле /etc/fstab сейчас, либо можно перезагрузить систему и в момент, когда она загрузится ресурс будет подключен. Но делает это сейчас дабы распознать какие-либо ошибки:

ekzorchik@srv-vpn:~$ sudo mount -a

/sbin/mount.davfs: the server certificate is not trusted

issuer:      172.35.35.6

subject:     172.35.35.6

identity:    172.35.35.6

fingerprint: 4c:ba:66:59:71:93:0f:b7:ff:d8:ed:b8:9d:b2:ac:55:49:7f:5d:b3

You only should accept this certificate, if you can

verify the fingerprint! The server might be faked

or there might be a man-in-the-middle-attack.

Accept certificate for this session? [y,N] y

ekzorchik@srv-vpn:~$

ekzorchik@srv-vpn:~$ df -h | grep client

https://172.35.35.6/remote.php/dav/files/ekzorchik/client   16E  8.0K   16E   1% /media/client

ekzorchik@srv-vpn:~$

Ресурс смонтирован.

Но для своего сервера с ролью OpenVPN я предпочитаю вручную монтировать OwnCloud каталог, когда это необходимо, либо можно создать отдельного пользователя, указать ему квоту на размер использования и уже его подключать к конечному устройству в момент настройки OpenVPN-клиента. Что кстати, наверное, будет самым правильным и безопасным вариантом. А то мало ли кто-либо проникнем на сервер с ролью сервера OpenVPN и получается получит как бы невзначай доступ и к хранилищу, да и узнает про него.

Шаг №5: Если Ваш OwnCloudсервис и клиент кто к нему подключается из консоли в Вашей доверенной сети, то нужно отдельно заморочиться для автоматического подключения убрав возможность принятия самоподписанного сертификата:

ekzorchik@srv-vpn:~$ openssl s_client -connect 172.35.35.6:443 2>&1 | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > certificate.pem

ekzorchik@srv-vpn:~$ ls -lh certificate.pem && file certificate.pem

-rw-rw-r-- 1 ekzorchik ekzorchik 1.1K Sep 26 12:58 certificate.pem

certificate.pem: PEM certificate

ekzorchik@srv-vpn:~$

ekzorchik@srv-vpn:~$ sudo cp certificate.pem /etc/davfs2/certs/

ekzorchik@srv-vpn:~$ sudo nano /etc/davfs2/davfs2.conf

# trust_server_cert

trust_server_cert<TAB>/etc/davfs2/certs/certificate.pem

После не забываем сохранить внесенные изменения.

Проверяем:

ekzorchik@srv-vpn:~$ sudo umount /media/client

/sbin/umount.davfs: waiting while mount.davfs (pid 689) synchronizes the cache .. OK

ekzorchik@srv-vpn:~$ sudo mount -a

ekzorchik@srv-vpn:~$ df -h | grep client && ls -lh /media/client

https://172.35.35.6/remote.php/dav/files/ekzorchik/client   16E  8.0K   16E   1% /media/client

total 11K

-rw-r--r-- 1 root root 1.8K Sep 26 10:50 ca.crt

-rw-r--r-- 1 root root 5.4K Sep 26 10:49 client2.crt

-rw-r--r-- 1 root root 1.1K Sep 26 10:50 client2.csr

-rw-r--r-- 1 root root 1.7K Sep 26 10:49 client2.key

drwx------ 2 root root    0 Sep 26 12:11 lost+found

ekzorchik@srv-vpn:~$

Вот теперь без каких-либо вопросов касательно того факта что на сервере где поднят сервис OwnCloud стоит самоподписанный сертификат. Все работает. Итого ранее разобранная заметка «Подключение через webdav к OwnCloud”  была доработана и приобщена к практическому делу по передачи клиентских сертификатов на конечное устройство с целью организации OpenVPN соединений, а в Вашем случае под Ваши задачи.

На заметку: от 09.10.2019

При монтировании не нужно указывать каталог .. openvpn/client /media/client после имени учетной записи, частенько пишет что ресурс не доступен, а если просто корень то проблем нет. Вот такое вот наблюдение.

На Вашем купленном сервере, VPS-система, к примеру купленная здесь (https://cloudlite.ru/?from=4116 и промо-код CloudLITE4116 чтобы еще сэкономить.) следует указать вместо 172.35.35.6 – FQDN имя Вашего сервиса OwnCloud (если он у Вас есть и доступен через интернет) и заменить логин ekzorchik на свой.

На этом у меня всё, с уважением автор блога Олло Александр aka ekzorchik.