Go to file
2025-02-06 14:08:22 +03:00
cmd/nsfakeroot Fakeroot - 0.0.1 2025-02-06 14:08:22 +03:00
loginshell Initial Commit 2023-10-23 14:18:20 -07:00
.gitignore Fakeroot 2024-11-22 19:44:32 +03:00
fakeroot_test.go Fakeroot - 0.0.1 2025-02-06 14:08:22 +03:00
fakeroot.go Initial Commit 2023-10-23 14:18:20 -07:00
go.mod Fakeroot - 0.0.1 2025-02-06 14:08:22 +03:00
go.sum plemya-x 2024-06-01 16:10:03 +03:00
LICENSE Fakeroot 2024-11-22 19:44:32 +03:00
README.md Fakeroot - 0.0.1 2025-02-06 14:08:22 +03:00

fakeroot

Чистая реализация fakeroot на Go с использованием пространств имен пользователей Linux. a

Что такое fakeroot?

Fakeroot — это утилита, которая запускает команды в среде, где они кажутся имеющими права суперпользователя, хотя на самом деле это не так. Оригинальная команда fakeroot делает это, перехватывая вызовы функций библиотеки libc, таких как stat(), chmod(), chown() и т. д., и заменяя их на функции, которые возвращают значения, делающие видимым, что пользователь является суперпользователем.

Чем эта библиотека отличается?

Вместо внедрения собственных функций libc эта библиотека использует встроенные функции изоляции ядра Linux, чтобы создать своего рода контейнер, где пользователь является суперпользователем. Это означает, что даже программы, не использующие libc (такие как программы на Go), или программы с статически связанной libc, будут думать, что они работают от имени root.

Вы также можете вложить этот тип fakeroot до 32 раз, в отличие от оригинального варианта на основе libc, который совсем не поддерживает вложение.

Однако этот подход будет работать только на достаточно новых ядрах Linux (3.8+) и на дистрибутивах, которые не отключают эту функциональность. Тем не менее, большинство современных систем Linux поддерживают это, так что в большинстве случаев это должно работать.

Почему?

Многие утилиты зависят от прав доступа к файлам и принадлежности пользователей. Например, команда tar создает файлы в архиве tar с теми же правами, что и у оригинальных файлов. Это означает, что если файлы принадлежали конкретному пользователю, они сохранят эту принадлежность при извлечении архива tar. Это может стать проблемой при создании пакетов, поскольку это может привести к тому, что системные файлы в пакете будут принадлежать пользователям, не являющимся суперпользователями. Создавая иллюзию, что текущий пользователь является суперпользователем и поэтому все файлы принадлежат root, fakeroot обманывает утилиты, такие как tar, заставляя их создавать свои файлы с правами root.

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

nsfakeroot

Этот репозиторий включает утилиту командной строки под названием nsfakeroot. Чтобы установить его, выполните следующую команду:

go install gitea.plemya-x.ru/Plemya-x/fakeroot/cmd/nsfakeroot@latest

Запуск nsfakeroot самостоятельно начнет вашу оболочку входа в среде fakeroot. Если вы предоставите аргументы, они будут использоваться как команда.

Примеры:

nsfakeroot        # -> (login shell)
nsfakeroot whoami # -> root
nsfakeroot id -u  # -> 0
nsfakeroot id -g  # -> 0