2

Я написал веб-страницу, которая позволяет мне удаленно монтировать зашифрованную папку encfs, которая затем доступна через WebDAV. По сути, это просто форма пароля с кнопкой монтирования / размонтирования, которая пытается смонтировать / размонтировать предварительно определенный зашифрованный диск encfs с паролем, предоставленным через форму. В основном это доступная в Интернете оболочка для

encfs --stdinpass /encfs/drive/encrypted/ /var/www/unencrypted

Это работает как задумано, так как я могу подключить / отключить зашифрованный диск и увидеть / прочитать незашифрованные данные через WebDAV.

Но происходит нечто странное: незашифрованный вид папки доступен ТОЛЬКО через WebDAV.

Если я запускаю sudo -u www-data ls -la /var /www (www-data - это пользователь, запускающий веб-сервер и, следовательно, также пользователь, монтирующий диск, я подтвердил это с помощью htop) или как любой другой пользователь, я Посмотрите точку монтирования (в приведенном выше примере это будет /var /www /unencrypted) как обычную папку, а не как обычную папку encfs, которая обычно должна выглядеть примерно так:

drwxr-xr-x  5 www-data www-data  4096 Feb  1 02:25 .
drwxr-xr-x 15 root     root      4096 Jan 31 11:46 ..
d?????????  ? ?        ?            ?            ? unencrypted

но на самом деле это выглядит так:

drwxr-xr-x  5 www-data www-data  4096 Feb  1 02:25 .
drwxr-xr-x 15 root     root      4096 Jan 31 11:46 ..
drwxr-xr-x  2 www-data www-data  4096 Jan 31 21:47 unencrypted

как обычная папка (которая считается пустой, хотя в той же папке есть данные при доступе к ней через WebDAV).

Также в /etc /mtab нет записи, указывающей, что диск encfs когда-либо был смонтирован. По сути, все выглядит так, как будто диск никогда не был подключен, хотя на самом деле это так, потому что я могу получить к нему доступ через WebDAV, а также процесс ecnfs явно работает, как показано в htop.

Как это происходит и как это исправить?

PS: если я бегу

sudo -u www-data bash -c "echo $(cat /tmp/passwort_file) | encfs --stdinpass /encfs/drive/encrypted/ /var/www/unencrypted"

из терминала такого поведения нет. Папка по-прежнему доступна через WebDAV, но в этом случае она также правильно отображается в /etc /mtab и также отображается как диск encfs при использовании ls -la.

1 ответ1

1

Я предполагаю, что это Debian Linux или Ubuntu с systemd в качестве менеджера сервисов.

Linux поддерживает "пространства имен монтирования", которые обеспечивают разные представления файловой системы для разных процессов (например, chroot, но гораздо более гибкие и вызывающие головную боль). Systemd позволяет использовать эту функцию для защиты системы от проблем безопасности и атак; например, некоторые службы могут видеть /home пустым или /etc как доступный только для чтения.

Большинство дистрибутивов используют эти параметры безопасности в apache2.service - если вы запустите systemctl cat apache2 , вы увидите, что он настроен на использование своего собственного частного каталога /tmp :

[Service]
...
PrivateTmp=true

Побочным эффектом пространств имен монтирования является то, что они несколько глобальны: когда systemd "unshares" / может создавать монтируемые под Apache монтирования под ним, даже если для этого требуется только одно монтирование, тот же эффект все еще применяется ко всем монтированиям, созданным сервис Apache. (Для сервисов это в некоторой степени преднамеренно: зачем веб-серверу монтировать файловые системы? Принцип наименьших привилегий.)

Поэтому, если вы запустите findmnt или cat /proc/self/mounts , вы увидите только монтирование в корневом пространстве имен. Но если вы запустите nsenter --mount --target <APACHE_PID> findmnt или cat /proc/<APACHE_PID>/mounts , вы увидите как унаследованные от корневого пространства имен, так и частные от процесса Apache.

Чтобы отключить эту защиту, запустите systemctl edit --full apache2 и удалите все настройки, начиная с Private* , ReadOnly* или Inaccessible* .

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