Почему некоторые пакеты отправляют двоичные файлы в / usr / lib?

Проблема

Ваша проблема связана с наследованием разрешений. cdbootstrap унаследует разрешения fakeroot , которые можно повысить с помощью sudo . Проблема:

sudo fakeroot cdbootstrap / tmp / foo

Если вышеуказанная команда завершилась успешно, проблема заключается в разрешениях на / tmp . См. Каковы общие права для / tmp? Я непреднамеренно установил все публично рекурсивно , каковы должны быть разрешения по умолчанию. Как правило, запись в / tmp чего-либо, что не было добавлено приложением, - плохая идея, а fakeroot имеет свои проблемы. На странице руководства:

LIMITATIONS

   Library versions
          Every command executed within fakeroot needs to be linked to the
          same version of the C library as fakeroot itself.

   open()/create()
          fakeroot  doesn't  wrap open(), create(), etc. So, if user joost
          does either

          touch foo
          fakeroot
          ls -al foo

          or the other way around,

          fakeroot
          touch foo
          ls -al foo

          fakeroot has no way of knowing that in the first case, the owner
          of  foo  really  should be joost while the second case it should
          have been root.  For the Debian packaging, defaulting to  giving
          all "unknown" files uid=gid=0, is always OK. The real way around
          this is to wrap open() and  create(),  but  that  creates  other
          problems, as demonstrated by the libtricks package. This package
          wrapped many more functions, and tried to do  a  lot  more  than
          fakeroot .  It turned out that a minor upgrade of libc (from one
          where the stat() function didn't use open() to one with a stat()
          function that did (in some cases) use open()), would cause unex-
          plainable segfaults  (that  is,  the  libc6  stat()  called  the
          wrapped  open(),  which  would then call the libc6 stat(), etc).
          Fixing them wasn't all that easy, but once fixed, it was just  a
          matter  of  time  before another function started to use open(),
          never mind trying to port it to a  different  operating  system.
          Thus  I decided to keep the number of functions wrapped by fake-
          root as small as possible, to limit the  likelihood  of  'colli-
          sions'.

   GNU configure (and other such programs)
   of the file will be 000. The bug is that if root does the same,  open()
   will succeed, as the file permissions aren't checked at all for root. I
   choose not to wrap open(), as open() is used by many other functions in
   libc  (also  those  that  are already wrapped), thus creating loops (or
   possible future loops, when the implementation of  various  libc  func-
   tions slightly change).

Лучшее решение

Вместо использования повышения привилегий для достижения того, что вы пытаетесь сделать, рассмотрите возможность использования правильного chroot , как указано в Документации DebootstrapChroot для Ubuntu или Официальная документация Debian для DebBootStrap .

3
04.01.2018, 20:42
1 ответ

Как правило, это команды, которые не предназначены для непосредственного вызова пользователем. /usr/libexecраньше было более распространенным для этого.

5
27.01.2020, 21:15

Теги

Похожие вопросы