java .lang.UnsatisfiedLinkError, когда / tmp смонтирован как noexe c при использовании Mon go CSFLE (mongodb-crypt) - PullRequest
1 голос
/ 27 апреля 2020

Я работал над MongoDB CSFLE (шифрование на уровне клиента), для которого есть зависимость в моем проекте весенней загрузки mongodb-crypt-1.0.1. В целях безопасности раздел /tmp монтируется как noexec в ОС Ubuntu 16.04, работающей в EC2. Сбой запуска приложения со следующей трассировкой стека:

Caused by: java.lang.UnsatisfiedLinkError: /tmp/jna--851256601/jna10844749069600633969.tmp: /tmp/jna--851256601/jna10844749069600633969.tmp: failed to map segment from shared object
    at java.lang.ClassLoader$NativeLibrary.load0(Native Method) ~[?:?]
    at java.lang.ClassLoader$NativeLibrary.load(ClassLoader.java:2430) ~[?:?]
    at java.lang.ClassLoader$NativeLibrary.loadLibrary(ClassLoader.java:2487) ~[?:?]
    at java.lang.ClassLoader.loadLibrary0(ClassLoader.java:2684) ~[?:?]
    at java.lang.ClassLoader.loadLibrary(ClassLoader.java:2617) ~[?:?]
    at java.lang.Runtime.load0(Runtime.java:767) ~[?:?]
    at java.lang.System.load(System.java:1834) ~[?:?]
    at com.sun.jna.Native.loadNativeDispatchLibraryFromClasspath(Native.java:947) ~[jna-4.5.2.jar!/:4.5.2 (b0)]
    at com.sun.jna.Native.loadNativeDispatchLibrary(Native.java:922) ~[jna-4.5.2.jar!/:4.5.2 (b0)]
    at com.sun.jna.Native.<clinit>(Native.java:190) ~[jna-4.5.2.jar!/:4.5.2 (b0)]
    at com.mongodb.crypt.capi.CAPI.<clinit>(CAPI.java:778) ~[mongodb-crypt-1.0.1.jar!/:?]
    at com.mongodb.crypt.capi.MongoCryptImpl.<init>(MongoCryptImpl.java:92) ~[mongodb-crypt-1.0.1.jar!/:?]
    at com.mongodb.crypt.capi.MongoCrypts.create(MongoCrypts.java:36) ~[mongodb-crypt-1.0.1.jar!/:?]
    at com.mongodb.client.internal.Crypts.createCrypt(Crypts.java:35) ~[mongo-java-driver-3.12.3.jar!/:?]
...

Приложение запускается просто отлично, когда вместо /tmp установлено exec.

Есть ли способ решить это не делая /tmp исполняемым?

1 Ответ

2 голосов
/ 27 апреля 2020

Насколько я могу сказать, крипто части используют JNA и, в частности, используют его для извлечения libmongocrypt.so во временный каталог по умолчанию. Соответствующая документация, на мой взгляд, https://github.com/java-native-access/jna/blob/master/www/GettingStarted.md.

Я предлагаю попробовать:

  1. Установка jna.library.path для пути в файловой системе с разрешенным выполнением (и скопировать libmongocrypt.so вручную там?).
  2. Если это не сработает, попробуйте загрузить libmongocrypt.so вручную и поместить его в путь, по которому ваша ОС может загружать библиотеки без конфигурации. Инструкции по загрузке должны быть такими же, как и для Ruby драйвера, которые здесь , используйте nocrypto версию libmongocrypt.

Редактировать: jna.tmpdir кажется более подходящим для комментарий.

...