LINUX.ORG.RU

Чем fakeroot отличается от sudo?


0

3

Ввиду удаления темы «Где прочитать по-русски про fakeroot?» (удалено JB по причине 'тупак (0)', наверно все кроме меня знают все тонкости fakeroot), задаю следующий вопрос.

Вот единственное внятное описание команды fakeroot на русском в интернете:

http://www.opennet.ru/prog/info/2558.shtml

Позволяет запускать программы в Linux с привилегиями суперпользовтеля для выполнения любых файловых операций. Изменения видны только для запущенной под fakeroot программы, реально в системе ничего не меняется, т.е. для программы создается некая виртуальная оболочка, в которой отражаются все действия. fakeroot позволяет сохранять и подгружать подобные оболочки. Система выполнена в виде библиотеки подгружаемой через LD_PRELOAD и подменяющей файловые функции (например, getuid(), stat(),chmod() и т.д.).



Вопрос в следующем: чем же запуск программы под fakeroot отличается от запуска под sudo? Учитываем, что в *NIX все объекты, к которым имеет доступ программа, идеологически представляют собой файлы, а посему можно сказать что «Команда sudo позволяет запускать программы в Linux с привилегиями суперпользовтеля для выполнения любых файловых операций».

★★★★★

Говорят вот, что в правильно поставленном вопросе содержится бо́льшая часть ответа. В твоем же случае в вопросе содержится весь ответ.

Dobriy_i_Prostoy
()
Ответ на: комментарий от Dobriy_i_Prostoy

Говорят вот, что в правильно поставленном вопросе содержится бо́льшая часть ответа. В твоем же случае в вопросе содержится весь ответ.

Только я его не вижу. Чем запуск программы под fakeroot отличается от запуска под sudo? В чем разница между «симуляцией root окружения» и «переключением в root окружение»?

Xintrea ★★★★★
() автор топика
Ответ на: комментарий от sergv

http://docs.openembedded.ru/recipes_fakeroot.html

Иногда пакета требуют root привилегий для выполнения таких действий, как смена пользователя, группы или создание файла устройства. Так как OpenEmbedded не сохраняет информацию о пользователях или группах, то лучше удалить эти команды из make файлов. Для файлов устройств лучше выбрать создание списков инициализации либо конфигурацию средствами udev.

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

Использование fakeroot осуществляется добавлением префикса к задаче:
fakeroot do_install() {

Поскольку fakeroot требуется сам по себе, то fakeroot-native необходимо включить в список зависимостей:
DEPENDS = «fakeroot-native»

Для примера можно посмотреть рецепт fuse. Более подробная информация и принципы работы fakeroot можно найти в соответствующем разделе справочника: fakeroot.


Ниочём.

http://packages.debian.org/ru/lenny/fakeroot

fakeroot
создаёт фиктивное окружение суперпользователя

Предполагается, что данная программа будет использована в местах типа:
dpkg-buildpackage -rfakeroot

то есть для того, чтобы для сборки пакета не требовалось прав суперпользователя. Это достигается путём установки LD_PRELOAD в значение libfakeroot.so, которая предоставляет обёртку вокруг getuid, chown, chmod, mknod, stat и подобных функций, таким образом создавая фиктивное окружение суперпользователя.


Тоже ни о чем. Зачем это нужно, если есть sudo?

Xintrea ★★★★★
() автор топика
Ответ на: комментарий от Xintrea

Блин, по ссылка сходи, да?

fake - подложный. Не рут там ниразу, просто программе все попытки проверить свой UID/EUID подменяют, чтоб думала, что оно рут.

P.S.: Таки да, тупак.

sergv
()
Ответ на: комментарий от Xintrea

В чем разница между ... симуляцией ... и ... переключением

обычно в таких случаях советуют начальную школу

anonymous
()
Ответ на: комментарий от sergv

Не рут там ниразу, просто программе все попытки проверить свой UID/EUID подменяют, чтоб думала, что оно рут.

Ага, вот это ближе к истине. Ты, значит, написал пример касаемо getuid().

А что можешь сказать про chmod()? Под fakeroot chmod() будет всегда возвращать 0, то есть программа будет думать что изменила режим доступа у какого-то файла, хотя на самом деле изменения режима доступа у файла не происходит. Так чтоли?

Если так, то видимо измененный через chmod() у какого-то файла режим доступа наверно запоминается на весь сеанс fakeroot, и stat() затем в этом же сеансе будет возвращать этот измененный режим. Правильно я понял?

Xintrea ★★★★★
() автор топика
Ответ на: комментарий от Xintrea

Из исходника:

  The following functions are currently wrapped:
     getuid(), geteuid(), getgid(), getegid(),
     mknod()
     chown(), fchown() lchown()
     chmod(), fchmod()
     mkdir(),
     lstat(), fstat(), stat() (actually, __xlstat, ...)
     unlink(), remove(), rmdir(), rename()

Из мануала:

fakeroot  works  by  replacing  the file manipulation library functions (chmod(2), stat(2) etc.) by ones that  simulate  the  effect  the  real library  functions would have had, had the user really been root.

sergv
()
Ответ на: комментарий от sergv

Из исходника
Из мануала

В общем, ты сам толком не знаешь. Но все равно спасибо.

Xintrea ★★★★★
() автор топика

ну сам же пишешь:

Изменения видны только для запущенной под fakeroot программы, реально в системе ничего не меняется,

вот и весь ответ

marvin_yorke ★★★
()

Что-то вы тупите.

Вместо того, чтобы спрашивать в баше пару команд набрали бы и все.

# sudo whoami
root
# fakeroot whoami
root

Вроде одинаково? А вот и нет.

В первом случае whoami делает запрос на id пользователя, ЯДРО ему отвечает 0, whoami говорит вам, что вы root.

Во втором случае whoami делает запрос на id пользователя, запрос перехватывается ОБЕРТКОЙ, ОБЕРТКА отвечает 0, whoami говорит вам, что вы root. Но для ядра ваш id как был 1000 (допустим) так и остался.

К чему это приводит:

# sudo touch hello_sudo
# fakeroot touch hello_fakeroot
# ls -l hello_sudo hello_fakeroot
-rw-r--r-- 1 user users  0 мая    4 11:36 hello_fakeroot
-rw-r--r-- 1 root  root  0 мая    4 11:36 hello_sudo

Тадам!

Belkrr
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.