- FakeRoot
- Debian
- Error Messages
- fakeroot: nested operation not yet supported
- Для чего нужна команда `fakeroot` в Linux?
- 1. Что происходит в fakeroot
- 2. След от Fakeroot
- 3. Итак . Зачем тебе это снова?
- 4. Почему бы просто не использовать sudo ?
- Какая потребность в команде `fakeroot` в Linux?
- 1. Что происходит в fakeroot
- 2. След fakeroot
- 3. Итак … Зачем тебе это снова?
- 4. Почему бы просто не использовать sudo ?
- FakeRoot
?Discussion
Gives a fake root environment , to remove the need to become root for a package build.
fakeroot runs a command in an environment where 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 have 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
Debian
This package is intended to enable something like:
i.e. to remove the need to become root for a package build. This is done by setting LD_PRELOAD to libfakeroot.so, which provides wrappers around getuid, chown, chmod, mknod, stat, and so on, thereby creating a fake root environment.
Previously, fakeroot required SYSV IPC to operate, but the current version now supports TCP/IP for messaging as well.
Error Messages
fakeroot: nested operation not yet supported
This error occurs if an attempt is made to run fakeroot from within a fakeroot environment. The error may occur during an attempt to build project code from within a fakeroot environment and has been observed to occur when project builder tools are being used (such as ?debuild).
Источник
Для чего нужна команда `fakeroot` в Linux?
Зачем нам вообще нужна fakeroot команда? Разве мы не можем просто использовать команды sudo или su ?
На странице руководства написано:
fakeroot — запустить команду в среде, подделывающей привилегии root для манипулирования файлами
Дает поддельную корневую среду. Этот пакет предназначен для того, чтобы включить что-то вроде: dpkg-buildpackage -rfakeroot т.е. убрать необходимость стать пользователем root для сборки пакета. Это делается путем установки LD_PRELOAD на libfakeroot.so , который обеспечивает обертки вокруг getuid , chown , chmod , mknod , stat , . тем самым создавая поддельные корневой среды. Если вы не понимаете ничего из этого, вам не нужно fakeroot !
Мой вопрос в том, что особого назначения это решает просто su или sudo нет? Например, для перепаковки всех установленных пакетов в ubuntu мы даем следующую команду:
Можем ли мы выполнить приведенную выше команду с помощью sudo или su вместо fakeroot следующим образом:
РЕДАКТИРОВАТЬ:
дает мне эту ошибку:
контрольный каталог имеет неправильные разрешения 700 (должно быть> = 0755 и sudo su
Представьте, что вы разработчик / сопровождающий пакета и т. Д. Работаете на удаленном сервере. Вы хотите обновить содержимое пакета и перестроить его, загрузить и настроить ядро с сайта kernel.org, собрать его и т. Д. Пытаясь сделать это, вы обнаружите, что для выполнения некоторых действий требуются root права ( UID и GID 0) по разным причинам (безопасность, пропущенные разрешения и т. Д.). Но получить root права невозможно , так как вы работаете на удаленной машине (и у многих других пользователей такая же проблема, как и у вас). Это именно то, что fakeroot делает: оно притворяется эффективным UID и GID 0 для окружающей среды, которая требует их.
На практике вы никогда не получите реальные root привилегии (в противоположном su и sudo что вы говорите).
Чтобы ясно увидеть разницу между fakeroot и настоящим sudo / su, просто выполните:
Пока вы находитесь в оболочке fakeroot, похоже, что вы являетесь пользователем root, если вы не пытаетесь делать что-то, что действительно требует привилегий root. И это именно то, что нужно упаковочному инструменту для создания упаковок, которые будут иметь смысл на любой машине.
Фактически, когда вы используете fakeroot для упаковки, вы хотите, чтобы инструменты, которые вы запускаете под fakeroot, видели ваши файлы как принадлежащие root. Ни больше ни меньше. Так что фактически su или sudo не будут работать для получения правильного владения файлом.
Поскольку ответы трудно понять (для меня самого), и потребовалось некоторое время, чтобы понять их ( этот комментарий помог мне понять это), я собираюсь дать, надеюсь, лучшее объяснение.
1. Что происходит в fakeroot
Ничего больше, чем то, что происходит с вашим собственным пользователем. Абсолютно ничего больше. Если вы fakeroot (который при вызове дает вам новую оболочку, вроде sudo бы), сделаете вид, что делаете то, для чего вам нужно разрешение, и выйдите, абсолютно ничего не произойдет.
Если вы думаете об этом, это пустая трата времени. Почему вы делаете вещи, которые на самом деле не произойдут? Это безумие. Вы могли бы просто не делать ничего из этого, и не было бы никакой разницы, так как нет никаких следов этого.
2. След от Fakeroot
Там может быть след остался fakeroot . Давайте посмотрим на команды в ответе MortenSickel, которые довольно хороши и заслуживают одобрения:
На первый взгляд кажется, что использование fakeroot было пустой тратой времени. В конце концов, если бы вы не использовали fakeroot , вы бы получили то же самое.
Тонкая вещь здесь это:
Это означает, что содержимое файла все еще помнит, что оно является корнем. Вы могли бы сказать, что не использование fakeroot привело бы к тем же результатам. Вы правы, этот пример слишком прост.
Давайте возьмем другой пример:
Посмотрим, что случилось. Я притворился root , что совершенно неэффективен, и создал x и y . Я притворился, x что принадлежу myuser и y должен принадлежать root . На самом деле они оба принадлежат myuser (как мы видим в конце), но я просто притворился, что это так.
Затем я создал список и сохранил свое воображение в файл. Позже, когда я оглядываюсь назад на файл, я вижу, кому я представлял, что файлы должны принадлежать. Опять же, они на самом деле не принадлежат людям, которых я представлял, я просто представлял это.
3. Итак . Зачем тебе это снова?
Вы можете сказать, что мне не нужно было выдавать себя за root, чтобы создать этот список. Я мог бы просто создать список, а затем отредактировать его, чтобы отразить мое воображение. Вы правы, вам это не нужно fakeroot . На самом деле, зная, что на fakeroot самом деле ничего не делает, вы, возможно, не могли получить никакой способности, которой у вас не было раньше.
Но , и это fakeroot главное, редактирование списка может быть нетривиальным. Как и в случае с пакетом, который может быть установлен в вашей системе, у вас есть tar ed, gzip ed, xz ed, bzip2 ed или любой другой формат, который хранит ваши файлы вместе и запоминает их разрешения и владельцев. Вы можете легко изменить сжатый файл и отредактировать владельца файла? Я не знаю о вас, но я не могу придумать способ.
Может ли быть встроенный инструмент, который, после того как все будет сжато, изменяет сжатый файл и программно редактирует права собственности и разрешения? Да, может. Так что либо вы можете подделать владения до сжатия, либо поменять их после. Люди Debian решили, что с первым легче.
4. Почему бы просто не использовать sudo ?
Прежде всего, вам не нужны привилегии root для сборки программного обеспечения, и вам не нужны привилегии root для их сжатия. Так что если вам это не нужно, вам действительно нужно быть пользователем Windows, чтобы даже подумать о получении этого разрешения. Но сарказм в стороне, у вас может даже не быть пароля root.
Кроме того, допустим, у вас есть права root. Допустим, вы хотите сделать вид, что файл должен иметь доступ только для чтения к корню. Таким образом, вы sudo , на самом деле, меняете владельца файла и права доступа root , выходя из корневой оболочки и пытаясь упаковать все. Вы потерпели неудачу, потому что теперь вы не можете больше читать файл, так как у вас нет прав root. Таким образом, вы должны sudo сжать и собрать пакет как root. По сути, вы должны делать все как root.
Как упаковщик, вам не нужны права root и вы не должны его получать. Когда вы устанавливаете пакет, вам может потребоваться установить некоторый файл ( A ) от имени пользователя root, и для этого вам нужны права root. Все fakeroot это делает это возможным. Он позволяет пакетировщику перечислять A как принадлежащий root для архиватора, так что, когда пакет распаковывается пользователем, архиватор требует разрешения root и создает A как принадлежащий root.
Источник
Какая потребность в команде `fakeroot` в Linux?
Зачем нам вообще нужна команда fakeroot ? Разве мы не можем просто использовать команды sudo или su ?
На странице руководства написано:
fakeroot – запуск команды в среде, приносящей привилегии root для манипулирования файлами
Дает фальшивую корневую среду. Этот пакет предназначен для того, чтобы включить что-то вроде: dpkg-buildpackage -rfakeroot т.е. удалить необходимость стать root для сборки пакета. Это делается путем установки LD_PRELOAD в libfakeroot.so , который предоставляет оболочки вокруг getuid , chown , chmod , mknod , stat , …, тем самым создавая фальшивую корневую среду. Если вы этого не понимаете, вам не нужно fakeroot !
Мой вопрос в том, какая специальная цель решает, что просто su или sudo нет? Например, для переупаковки всех установленных пакетов в ubuntu мы приводим следующую команду:
Можем ли мы выполнить приведенную выше команду с помощью sudo или su вместо fakeroot следующим образом:
РЕДАКТИРОВАТЬ:
дает мне эту ошибку:
управляющий каталог имеет плохие разрешения 700 (должен быть> = 0755 и root ( UID и GID 0) по разным причинам (безопасность, пропущенные разрешения и т. Д.). Но получить права root невозможно, так как вы работаете на удаленной машине (и у многих других пользователей такая же проблема, как и у вас). Это то, что именно делает fakeroot : он притворяется эффективным UID и GID 0 для среды, которая их требует.
На практике вы никогда не получаете реальных привилегий root (в противоположность su и sudo о которых вы говорите).
Чтобы четко видеть разницу между fakeroot и реальным sudo / su, просто выполните:
Пока вы находитесь в оболочке fakeroot, похоже, что вы root – если вы не пытаетесь сделать что-либо, что действительно требует прав root. И это именно то, что нужно для создания упаковочного инструмента, что будет иметь смысл на любой машине.
Фактически, когда вы используете fakeroot для упаковки, вы должны сделать инструменты, которые вы запускаете в fakeroot, чтобы увидеть ваши файлы как принадлежащие root. Ни больше ни меньше. Поэтому на самом деле su или sudo не будут работать для получения права собственности на файл.
AFAIK, fakeroot выполняет команду в среде, в которой, как представляется, есть права root для манипуляции с файлами. Это полезно для того, чтобы пользователи могли создавать архивы (tar, ar, .deb и т. Д.) С файлами в них с правами root / правами. Без fakeroot нужно было бы иметь привилегии root для создания составных файлов архивов с правильными разрешениями и правами собственности, а затем их упаковывать или создавать архивы напрямую, без использования архиватора.
fakeroot работает, заменяя библиотечные функции обработки файлов (chmod (), stat () и т. д.) теми, которые имитируют эффект, который могли бы иметь реальные функции библиотеки, если бы пользователь действительно был root.
Сводка:
Подробнее здесь: fakeroot
Поскольку ответы трудно понять (для меня), и подумал, чтобы понять это ( этот комментарий заставил меня понять это), я собираюсь дать, надеюсь, лучшее объяснение.
1. Что происходит в fakeroot
Ничто больше, чем то, что происходит с вашим собственным пользователем. Абсолютно ничего больше. Если вы fakeroot (который при вызове дает вам новую оболочку, например sudo ), притворяйтесь, что делаете то, что вам нужно для разрешения и выхода, абсолютно ничего не произойдет.
Если вы думаете об этом, это пустая трата времени. Почему вы делаете вещи, которые на самом деле не произойдут? Это безумие. Вы бы просто не сделали этого, и не было бы никакой разницы, так как нет никаких следов.
2. След fakeroot
Там может быть след слева от fakeroot . Давайте посмотрим на команды в ответе MortenSickel, которые довольно приятны и заслуживают повышения:
На первый взгляд, похоже, что использование fakeroot было пустой тратой времени. В конце концов, если бы вы не использовали fakeroot , вы бы получили то же самое.
Тонкая вещь здесь такова:
Это означает, что содержимое файла все еще помнит, что является корнем. Вы могли бы сказать, что не использовать fakeroot дали бы те же результаты. Вы правы, этот пример слишком прост.
Возьмем еще один пример:
Посмотрим, что произошло. Я притворился root , что совершенно неэффективно, и создал x и y . Я притворился, что x принадлежит myuser а y принадлежит root . Они на самом деле оба принадлежат к myuser (как мы можем видеть в конце), но я просто притворился, что это так.
Затем я создал список и сохранил свое воображение в файле. Позже, когда я оглядываюсь на файл, я могу видеть, кому я представлял, что файлы должны принадлежать. Опять же, они на самом деле не принадлежат людям, которых я себе представлял, я просто подумал об этом.
3. Итак … Зачем тебе это снова?
Вы можете сказать, что мне не нужно было подделывать root, чтобы создать этот список. Я мог бы просто создать список, а затем отредактировать его, чтобы отразить мое воображение. Вы правы, для этого вам не нужен fakeroot . На самом деле, зная, что fakeroot самом деле ничего не делает, вы не можете получить какие-либо способности, которых у вас не было раньше.
Но , и вот что такое fakeroot , редактирование листинга может быть нетривиальным. Как и в случае с пакетом, который можно установить в вашей системе, у вас есть tar ed, gzip ed, xz ed, bzip2 ed или любой другой формат, который поддерживает ваши файлы вместе и помнит их разрешения и владельцев. Можете ли вы легко изменить сжатый файл и изменить право собственности на файл? Я не знаю о вас, но я не могу придумать способ.
Может ли быть встроенный инструмент, который, когда все сжато, изменяет сжатый файл и программно редактирует владельцы и разрешения? Да, может. Таким образом, вы можете подделывать владельцы перед сжатием или изменить их после. Люди Debian решили, что первое проще.
4. Почему бы просто не использовать sudo ?
Прежде всего, вам не нужны права root для создания программного обеспечения, и вам не нужны права root для их сжатия. Поэтому, если вам это не нужно, вам действительно нужно быть пользователем Windows, чтобы даже думать о получении этого разрешения. Но сарказм в стороне, вы можете даже не иметь пароль root.
Кроме того, допустим, у вас есть права root. Предположим, вы хотите притвориться, что файл должен иметь доступ для чтения только к корню. Итак, вы sudo , на самом деле меняете владельца файла и права на root , вы получаете из корневой оболочки и пытаетесь упаковать все. Вы терпите неудачу, потому что теперь вы больше не можете читать файл, так как у вас нет доступа root. Таким образом, вам нужно sudo и сжать и создать пакет как root. Эффективно, вы должны делать все как root.
Как упаковщик, вам не нужны права root, и вы не должны его получать. Когда вы устанавливаете пакет, вам может потребоваться установить некоторый файл ( A ) в качестве пользователя root, и вам понадобятся права root. Все, что делает fakeroot , это сделать это возможным. Он позволяет списку упаковщиков A как принадлежащим root для архиватора, так что когда пакет распаковывается пользователем, архиватор требует права root и создает A как принадлежащий root.
Я использовал его для сценариев построения пакетов. Я не был уверен, что у человека, выполняющего сценарий, есть доступ к корневому уровню, но сценарий все еще необходим для создания, скажем, файла tar, в котором содержатся файлы, принадлежащие root. Самый простой способ сделать это – запустить скрипт построения пакета под fakeroot, который обманул архиватора, полагая, что файлы принадлежат root, и упаковал их как таковые внутри архива. Таким образом, когда пакет был распакован на конечный компьютер (на другом компьютере вообще), файлы не принадлежали странным или несуществующим пользователям.
Думая об этом, единственным местом, где я это видел, было создание какого-то архива: rootfs встроенных систем, архивы tar.gz, пакеты rpm, пакеты .deb и т. Д.
Одно из распространенных способов – выяснить, какие файлы сбойной бинарности действительно хотел получить. То есть, выяснение и исправление или устранение ошибок, вызванных жесткими закодированными путями и неправильной обработкой исключений.
Вы можете использовать fakeroot без фактических прав root. Если у вас есть su и / или sudo вы сможете уничтожить свою систему с помощью простого rm -rf / , но с максимальной rm -rf / вы сможете удалить свой домашний каталог.
Источник