объект libgtk3-nocsd.so.0 из LD_PRELOAD не может быть предварительно загружен при запуске хрома

Описание проблемы

Когда я запускаю оболочку bash, я получаю это сообщение:ERROR: ld.so: object 'libgtk3-nocsd.so.0' from LD_PRELOAD cannot be preloaded (failed to map segment from shared object): ignored.Однако когда я запускаю обычный исполняемый файл, например программу, скомпилированную gcc, сообщение об ошибке не генерируется.

Платформа

Мое исследование

я используюlddнайти, и оказывается, что обаhelloworldи может правильно найти абсолютный путь к этому общему объекту.

      $ ldd helloworld | grep -F libgtk3-nocsd.so.0
    libgtk3-nocsd.so.0 => /lib/aarch64-linux-gnu/libgtk3-nocsd.so.0 (0x0000ffffa9a73000)

$ ldd /snap/bin/chromium | grep -F libgtk3-nocsd.so.0
    libgtk3-nocsd.so.0 => /lib/aarch64-linux-gnu/libgtk3-nocsd.so.0 (0x0000ffff7e370000)

$ ldd /snap/chromium/current/usr/lib/chromium-browser/chrome | grep -F libgtk3-nocsd.so.0
    libgtk3-nocsd.so.0 => /lib/aarch64-linux-gnu/libgtk3-nocsd.so.0 (0x0000ffff7a299000)

Некоторая информация об общем объекте приведена ниже. Обратите внимание, что естьsetuidбит в своих правах доступа.

      $ ls -l /lib/aarch64-linux-gnu/libgtk3-nocsd.so.0 
-rwSr--r-- 1 root root 26464 Mar  3  2018 /lib/aarch64-linux-gnu/libgtk3-nocsd.so.0

Переменная среды устанавливается здесь:

      $ sudo grep -2r LD_PRELOAD /etc/
...
/etc/X11/Xsession.d/51gtk3-nocsd-detect-          if [ x"$GTK_CSD"x = x"0"x ] ; then
/etc/X11/Xsession.d/51gtk3-nocsd-detect:              export LD_PRELOAD="libgtk3-nocsd.so.0${LD_PRELOAD:+:$LD_PRELOAD}"
/etc/X11/Xsession.d/51gtk3-nocsd-detect-          fi
...

Следующий документ может объяснить эту проблему?

      $ sudo grep -2r LD_PRELOAD /etc/
...
/etc/apparmor.d/abstractions/ubuntu-helpers-  # While the chromium and chrome sandboxes are setuid root, they only link
/etc/apparmor.d/abstractions/ubuntu-helpers-  # in limited libraries so glibc's secure execution should be enough to not
/etc/apparmor.d/abstractions/ubuntu-helpers:  # require the santized_helper (ie, LD_PRELOAD will only use standard system
/etc/apparmor.d/abstractions/ubuntu-helpers-  # paths (man ld.so)).
...

$ man ld.so
...
              In  secure-execution  mode, preload pathnames containing slashes are ignored.  Furthermore, shared objects are preloaded only from the stan‐
              dard search directories and only if they have set-user-ID mode bit enabled (which is not typical).
...

Мои решения

Согласно приведенному выше документу, я разработал два решения.

  • установлен абсолютный путь. В
    документе предполагается, чтоLD_PRELOAD will only use standard system pathsв случае . Поэтому можно заменитьexport LD_PRELOAD="libgtk3-nocsd.so.0${LD_PRELOAD:+:$LD_PRELOAD}"сexport LD_PRELOAD="/lib/aarch64-linux-gnu/libgtk3-nocsd.so.0${LD_PRELOAD:+:$LD_PRELOAD}"в/etc/X11/Xsession.d/51gtk3-nocsd-detectа затем перезапустите среду рабочего стола. Обратите внимание, что абсолютный путь варьируется на разных платформах.
  • запускать от имени пользователя root без использования песочниц.
    Проблема, похоже, связана с использованиемthe chromium and chrome sandboxesкоторыеsetuid root, как указано в документе. Бегchromiumот имени пользователя root без использования песочниц (например,sudo chromium --no-sandbox), кажется, подавляет сообщение об ошибке. К сожалению, такое поведение может привести к предупреждению браузера (You are using an unsupported command-line flag:--no-sandbox. Stability and security will suffer.).

Мои вопросы

  • Что означает так называемыйstandard system paths/standard search directoriesв документе имеется в виду? Есть запись оlibgtk3-nocsd.so.0в/etc/ld.so.cache, и входит в/etc/ld.so.conf.d/aarch64-linux-gnu.conf. Разве это не/lib/aarch64-linux-gnuаstandard system path/standard search directory?
            $ grep -aoP '(?<=\x00)[^\x00]*?libgtk3-nocsd\.so\.0' /etc/ld.so.cache
    libgtk3-nocsd.so.0
    /lib/aarch64-linux-gnu/libgtk3-nocsd.so.0
    
    $ cat /etc/ld.so.conf.d/aarch64-linux-gnu.conf
    # Multiarch support
    /usr/local/lib/aarch64-linux-gnu
    /lib/aarch64-linux-gnu
    /usr/lib/aarch64-linux-gnu
    
  • Как показано в документе,in secure-execution mode, preload pathnames containing slashes are ignored. Означает ли это$LD_PRELOADбудет игнорироваться, если это абсолютный путь, например/lib/aarch64-linux-gnu/libgtk3-nocsd.so.0?
  • Какое решение безопаснее и разумнее? Есть ли лучшие решения? Есть ли что-то еще, что я неправильно понял?

0 ответов

Другие вопросы по тегам