Зачем нам вообще нужна fakeroot
команда? Разве мы не можем просто использовать команды sudo
или su
?
На странице руководства написано:
fakeroot - запустить команду в среде, подделывающей привилегии root для манипулирования файлами
About.com говорит:
Дает поддельную корневую среду. Этот пакет предназначен для того, чтобы включить что-то вроде:
dpkg-buildpackage -rfakeroot
т.е. убрать необходимость стать пользователем root для сборки пакета. Это делается путем установкиLD_PRELOAD
наlibfakeroot.so
, который обеспечивает обертки вокругgetuid
,chown
,chmod
,mknod
,stat
, ..., тем самым создавая поддельные корневой среды. Если вы не понимаете ничего из этого, вам не нужноfakeroot
!
Мой вопрос в том, что особого назначения это решает просто su
или sudo
нет? Например, для перепаковки всех установленных пакетов в ubuntu мы даем следующую команду:
$ fakeroot -u dpkg-repack `dpkg --get-selections | grep install | cut -f1`
Можем ли мы выполнить приведенную выше команду с помощью sudo или su вместо fakeroot следующим образом:
$ sudo dpkg-repack `dpkg --get-selections | grep install | cut -f1`
РЕДАКТИРОВАТЬ:
Бег:
$ sudo dpkg-repack `dpkg --get-selections | grep install | cut -f1`
дает мне эту ошибку:
контрольный каталог имеет неправильные разрешения 700 (должно быть> = 0755 и <= 0775)
Есть причина почему?
sudo
илиsu
потому, что это ваша машина.fakeroot
имеет два применения: 1) обманывает программы, заставляя их верить, что вы действительно являетесь пользователем root, что может потребоваться некоторым плохо написанным проприетарным программам, даже если в этом нет необходимости (как правило, разработчик Windows - Linux), и 2) разрешать эмуляцию режима файла и изменений владельца, которые вы не захотите. в противном случае это можно сделать, главным образом, для созданияtar
файла с правильными разрешениями и владельцем, что полезно, например, при упаковке программного обеспечения.fakeroot
! Если вы не можете придумать ситуацию, когдаfakeroot
это полезно, то вам это буквально не нужно. Но люди, которые действительно нуждаются в этом, полностью понимают сценарий использования.Ответы:
Представьте, что вы разработчик / сопровождающий пакета и т. Д. Работаете на удаленном сервере. Вы хотите обновить содержимое пакета и перестроить его, загрузить и настроить ядро с сайта kernel.org, собрать его и т. Д. Пытаясь сделать это, вы обнаружите, что для выполнения некоторых действий требуются
root
права (UID
иGID
0) по разным причинам (безопасность, пропущенные разрешения и т. Д.). Но получитьroot
права невозможно , так как вы работаете на удаленной машине (и у многих других пользователей такая же проблема, как и у вас). Это именно то, чтоfakeroot
делает: оно притворяется эффективнымUID
иGID
0 для окружающей среды, которая требует их.На практике вы никогда не получите реальные
root
привилегии (в противоположномsu
иsudo
что вы говорите).источник
fakeroot
для изменения настроек системы ?? Потому что команда, которую мы будем запускать, будет думать, что она работает от имени пользователя root, и делать то, что мы хотим, чтобы она делала. не так ли?Чтобы ясно увидеть разницу между fakeroot и настоящим sudo / su, просто выполните:
Пока вы находитесь в оболочке fakeroot, похоже, что вы являетесь пользователем root, если вы не пытаетесь делать что-то, что действительно требует привилегий root. И это именно то, что нужно упаковочному инструменту для создания упаковок, которые будут иметь смысл на любой машине.
Фактически, когда вы используете fakeroot для упаковки, вы хотите, чтобы инструменты, которые вы запускаете под fakeroot, видели ваши файлы как принадлежащие root. Ни больше ни меньше. Так что фактически su или sudo не будут работать для получения правильного владения файлом.
источник
.deb
файл, все мои/usr
файлы принадлежат тому, кто звонил пользователюfakeroot
?fakeroot
оболочки они выглядят так, как они есть. Когда внутри этой оболочки создается пакет .deb, владелец файла считывается из файловой системы (котораяfakeroot
перехватывает и возвращаетroot
) и сохраняется в пакете. При установке пакета dpkg тогда требуется доступ с правами root, поскольку пакет указывает, что файл должен принадлежать пользователю root.Поскольку ответы трудно понять (для меня самого), и потребовалось некоторое время, чтобы понять их ( этот комментарий помог мне понять это), я собираюсь дать, надеюсь, лучшее объяснение.
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.источник
So either you could fake the ownerships before compressing, or change them after. Debian people decided the former is easier.
Это помогло мне, так как я продолжал думать «почему бы не изменить его после?».AFAIK, fakeroot запускает команду в среде, в которой он имеет привилегии root для манипулирования файлами. Это полезно для того, чтобы позволить пользователям создавать архивы (tar, ar, .deb и т. Д.) С файлами в них с правами root / владельцем. Без fakeroot нужно было бы иметь права суперпользователя для создания составных файлов архивов с правильными разрешениями и владельцем, а затем упаковать их, иначе придется создавать архивы напрямую, без использования архиватора.
fakeroot работает путем замены функций библиотеки управления файлами (chmod (), stat () и т. д.) на функции, имитирующие эффект, который могли бы оказать реальные функции библиотеки, если бы пользователь действительно был пользователем root.
Синопсис:
Проверьте больше здесь: fakeroot
источник
the program running in it thinks it has root privileges
программой и привилегиями root? Если я могу сделать arm -rf /
и программу, при запуске она думает, что у меня есть привилегии root ...rm
проверку наличия достаточных разрешений, но само ядро не позволит вам сделать это;unlink
системный вызов потерпит неудачу. Не только приложение обрабатывает разрешения, либо вы сможете написать свое собственное приложение, которое не проверяет разрешения и делает с ним все, что вы хотитеЯ использовал его для скриптов сборки пакетов. Я не был уверен, что у человека, выполняющего скрипт, есть доступ на уровне root, но скрипту все еще нужно было создать, скажем, tar-файл, который содержал файлы, принадлежащие root. Простейший способ сделать это - запустить скрипт сборки пакета в fakeroot, который обманом заставил архиватора поверить, что файлы принадлежат root, и упаковал их как таковые в архив. Таким образом, когда пакет был распакован на конечный компьютер (на другом компьютере), файлы не принадлежали странным или несуществующим пользователям.
Размышляя об этом, единственное место, где я видел это, было для создания какого-то архива: rootfs встроенных систем, архивов tar.gz, пакетов rpm, пакетов .deb и т. Д.
источник
fakeroot
это обходной путь для программного обеспечения с ошибочными пакетами: нет причин, по которым вам нужно быть пользователем root для создания таких пакетов, но поскольку они не позволяют указывать права доступа к файлам каким-либо иным способом, кроме как устанавливать их непосредственно в файловую систему, прежде чем у вас нет ВыборОдно из распространенных применений - выяснить, к каким файлам действительно хотел получить доступ сбойный двоичный файл. Таким образом, обнаружение и исправление или устранение ошибок, вызванных жестко заданными путями и неправильной обработкой исключений.
источник
Вы можете использовать fakeroot, фактически не имея привилегий root. Если бы у вас было
su
и / илиsudo
вы могли бы уничтожить вашу систему с помощью простогоrm -rf /
, но не более fakeroot, вы бы удалили ваш домашний каталог.источник
fakeroot
. Вы можете удалить свой домашний каталог как вы сами.Простой ответ:
su и sudo запускают команды от имени пользователя root. fakeroot нет, за исключением его частичной песочницы.
источник