Как fakeroot не является нарушением безопасности в Linux?

Простой можно было бы выбрать только первую строку, удалить из нее символов без пробелов и подсчитать, сколько символов осталось :

head -n 1 | tr -cd ' \t' | wc -c
18
12.07.2018, 12:47
3 ответа

So far, what I can gather is that fakeroot is used to give ownership to a file that needs to be root when it is unzip/tar'ed. My question, is why can't you just do that with chown?

Потому что вы не можете просто сделать это с помощью chown, по крайней мере, не как не -root-пользователь. (И если вы работаете как root, вам не нужно fakeroot. )В этом весь смыслfakeroot:— позволить программам, которые ожидают запуска от имени пользователя root, работать от имени обычного пользователя, при этом делая вид, что операции, требующие выполнения root -, выполняются успешно.

Это обычно используется при сборке пакета, чтобы процесс установки устанавливаемого пакета мог проходить без ошибок (, даже если он запускается chown root:rootили install -o rootи т. д. ). fakerootзапоминает фальшивое право собственности, которое он претендовал на предоставление файлов, поэтому последующие операции, просматривающие право собственности, видят это, а не реальное; это позволяет последующим запускам tar, например, сохранять файлы как принадлежащие пользователю root.

How does fakeroot stop unwanted privilege escalations on Linux? If fakeroot can trick tar into making a file that was owned by root, why not do something similar with SUID?

fakerootне заставляет tarчто-либо делать, он сохраняет изменения, которые хочет сделать сборка, не позволяя этим изменениям вступить в силу в системе, в которой находится сборка. Вам не нужно fakerootдля создания архива, содержащего файл, принадлежащий root и suid; если у вас есть двоичный файл evilbinary, запуск tar cf evil.tar --mode=4755 --owner=root --group=root evilbinaryот имени обычного пользователя создаст tar-архив, содержащий evilbinary, принадлежащий пользователю root, и suid. Однако вы не сможете распаковать этот архив и сохранить эти разрешения, если не сделаете это как root :, здесь нет повышения привилегий. fakeroot— это привилегия de-инструмент эскалации :он позволяет вам запускать сборку от имени обычного пользователя, сохраняя при этом эффекты, которые имела бы сборка, если бы она была запущена от имени пользователя root, позволяя эти эффекты для повторного воспроизведения позже. Применение эффектов «по-настоящему» всегда требует привилегий root; fakerootне предоставляет никаких способов их получения.

Чтобы понять использование fakerootболее подробно, учтите, что типичная сборка дистрибутива включает следующие операции (среди многих других):

  • установочные файлы, принадлежащие пользователю root
  • ...
  • заархивировать эти файлы,по-прежнему принадлежат пользователю root, так что при извлечении они будут принадлежать пользователю root

Первая часть явно не работает, если вы не root. Однако при работе под fakerootв качестве обычного пользователя процесс становится

  • установить файлы, принадлежащие пользователю root — это не удается, но fakerootделает вид, что успешно, и запоминает изменение владельца
  • ...
  • заархивировать те файлы, которые все еще принадлежат пользователю root — когдаtar(или какой-либо другой архиватор используется )запрашивает у системы, кто является владельцем файла, fakerootизменяет ответ, чтобы он соответствовал ранее записанному владельцу

Таким образом, вы можете запускать сборку пакета, не будучи пользователем root, и получать те же результаты, что и при работе с правами root. Использование fakerootбезопаснее, :система по-прежнему не может делать то, что не может сделать ваш пользователь, поэтому мошеннический процесс установки не может повредить вашу систему (, кроме прикосновения к вашим файлам ).

В Debian инструменты сборки были улучшены, чтобы больше не требовать этого, и вы можете собирать пакеты безfakeroot. Это поддерживается dpkgнапрямую с директивой Rules-Requires-Root(, см. rootless-builds.txt).

Чтобы понять назначение fakerootи аспекты безопасности при работе от имени пользователя root или без него, полезно рассмотреть назначение упаковки. Когда вы устанавливаете часть программного обеспечения из исходного кода для использования во всей системе -, вы действуете следующим образом:

  1. собрать программное обеспечение (, которое можно сделать без привилегий)
  2. установить программное обеспечение (, что необходимо сделать от имени пользователя root или, по крайней мере, от имени пользователя, которому разрешено записывать в соответствующие системные папки)

Когда вы упаковываете часть программного обеспечения, вы задерживаете вторую часть; но чтобы сделать это успешно, вам все равно нужно «установить» программное обеспечение в пакет, а не в систему. Итак, когда вы упаковываете программное обеспечение,процесс становится:

  1. собрать программное обеспечение (без специальных привилегий)
  2. сделать вид, что устанавливает программное обеспечение (снова без особых привилегий)
  3. записать установку программного обеспечения в виде пакета (то же самое)
  4. сделать пакет доступным (то же самое)

Теперь пользователь завершает процесс, устанавливая пакет, что необходимо сделать как пользователь root (или, опять же, пользователь с соответствующими привилегиями для записи в соответствующие места ). Именно здесь реализуется отложенный привилегированный процесс, и это единственная часть процесса, которая требует специальных привилегий.

fakerootпомогает с шагами 2 и 3, описанными выше, позволяя нам запускать процессы установки программного обеспечения и отслеживать их поведение без запуска от имени пользователя root.

37
27.01.2020, 19:45

НЕТ. Фальшивый корень позволяет вам запускать инструменты управления разрешениями и создания отчетов, он будет сообщать последовательно. Однако на самом деле он не предоставит эти разрешения. Это просто будет выглядеть так, будто они у вас (фальшивые ). Он ничего не изменит вне среды.

Это полезно, если вы хотите создать структуру каталогов, содержащую владельцев и разрешения, которые не могут быть установлены вашим пользователем, которые вы затем заархивируете, заархивируете или заархивируете другим пакетом.

Это не повышает права доступа, это подделка. Он не позволяет вам делать ничего (удалять, писать, читать ), чего вы не могли бы сделать иначе. Теоретически пакет (можно было бы создать )и без него. Вы можете получить поддельный отчет(ls)и без него.

Это не недостаток безопасности, потому что не разрешается доступ или что-либо, без чего вы не можете обойтись. Он работает без привилегий. Все, что он делает, это перехватывает вызовы chown, chmodи т. д. Он делает их операциями no -, за исключением того, что он записывает то, что должно было произойти. Он также перехватывает вызовы statи т. д., чтобы сообщать о разрешениях и владельцах из собственной внутренней базы данных, как если бы были выполнены другие команды. Это полезно, потому что если вы затем заархивируете каталог,у него будут поддельные разрешения. Если потом разархивировать, как root, то разрешения станут реальными.

Любые файлы, которые ранее были недоступны для чтения/записи, останутся недоступными для чтения/записи. Любые специальные файлы (, например. созданные устройства ), не будут иметь особых полномочий. Любой набор -uid (для другого пользователя ), файлы не будут устанавливать -uid. Любое другое повышение привилегий не сработает.

Это тип виртуальной машины. :Виртуальная машина, как правило, может имитировать любую среду/ОС, но не может сделать с хостом ничего, чего не могло бы сделать любое другое приложение. В виртуальной машине вы можете делать что угодно. Вы можете заново изобрести систему безопасности, чтобы она была такой же или другой, однако все это будет существовать на хосте как ресурсы, принадлежащие пользователю/группе процесса, выполняющего виртуальную среду.

7
27.01.2020, 19:45

Здесь уже есть два хороших и очень подробных ответа, но я просто отмечу, что вводный абзац оригинальнойfakerootсправочной страницы1на самом деле объясняет это довольно ясно и лаконично:

fakeroot runs a command in an environment wherein it appears to have root privileges for file manipulation. This is useful for allowing users to create archives (tar, ar,.deb etc.) with files in them with root permissions/ownership. Without fakeroot one would need to have root privileges to create the constituent files of the archives with the correct permissions and ownership, and then pack them up, or one would have to construct the archives directly, without using the archiver.

Fakeroot позволяет не -пользователю root создавать архивы, содержащие файлы, принадлежащие root -, что является важной частью создания и распространения бинарных программных пакетов в Linux. Без fakerootархивы пакетов должны были бы создаваться при работе от имени пользователя root, чтобы они содержали правильную информацию о владельце файла и правах доступа. Это будет угрозой безопасности. Создание и упаковка потенциально -ненадежного программного обеспечения представляет собой огромную опасность, если это делается с привилегиями root. Благодаря fakerootнепривилегированный пользователь с непривилегированными файлами по-прежнему может создавать архивы, содержащие файлы с правами root.2

Но это не угроза безопасности, потому что ничего в архиве на самом деле не принадлежит пользователю root, пока файлы НЕ ИЗВЛЕЧЕНЫ . И даже в этом случае файлы будут извлечены с неповрежденными корневыми правами только в том случае, если это будет сделано привилегированным пользователем. На этом шаге — когда привилегированный пользователь извлекает архив с помощью fakeroot-, содержащий «корневые» файлы, — именно здесь «фальшивый» корень, наконец, становится реальным. До этого момента никакие фактические привилегии root никогда не были получены или обойдены.

Примечания

  1. Fakeroot породил некоторых конкурентов/подражателей, которые при установке будут маскироваться под fakeroot, в том числеfakeroot-ngиpseudo. Но, ИМХО, ни одна из справочных страниц «имитатора» не дает такой четкой информации о том, как перейти к сути этого вопроса. Придерживайтесь оригинала, единственного и неповторимого fakerootO.G.
  2. Другие системы дистрибутивов/упаковок -преодолевают это, просто не используя права суперпользователя в своих архивах пакетов. В Fedora, например, программное обеспечение может компилироваться, устанавливаться и упаковываться непривилегированным пользователем без необходимости fakeroot.Все это делается в пользовательском $HOME/rpmbuild/пространстве, и обычно -привилегированные шаги, такие как make install, перенаправляются (с помощью таких механизмов, как --prefixи DESTDIR), в $HOME/rpmbuild/BUILDROOT/иерархию, которую можно считать своего рода пространство "fakechroot" (без фактического использованияfakechroot).

    Но даже во время make installвсе исполнялось и принадлежало непривилегированный пользователь. Владение извлеченным файлом и права доступа будут установлены на root,rootи0644(или 0755для исполняемых файлов )по умолчанию, если они не переопределены в файле определения пакета (.spec), и в этом случае они сохраняются как метаданные в окончательном упаковка. Поскольку никакие разрешения или права собственности на самом деле не применяются до тех пор, пока пакет rpm (привилегированный )В процессе установки ни root, ни fakerootне нужны во время упаковки. Но fakerootна самом деле просто другой путь к тому же результату.

4
27.01.2020, 19:45

Теги

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