This commit is contained in:
Евгений Храмов 2024-11-22 19:44:32 +03:00
parent c638a35432
commit b36a47b2df
3 changed files with 39 additions and 18 deletions

4
.gitignore vendored

@ -1 +1,3 @@
/nsfakeroot
/nsfakeroot
.idea
.gigaide

21
LICENSE

@ -1,6 +1,6 @@
MIT License
Copyright (c) 2023 Elara Musayelyan
Copyright (c) 2024 Евгений Храмов
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
@ -19,3 +19,22 @@ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
---
MIT License
Copyright (c) 2024 Евгений Храмов
Разрешение настоящим предоставляется, бесплатно, любому лицу, получающему копию этого программного обеспечения и
сопроводительной документации (далее "Программное обеспечение"), располагать Программным обеспечением без ограничений,
включая, но не ограничиваясь правами на использование, копирование, модификацию, объединение, публикацию,
распространение, передачу sublicenses и/или продажу копий Программного обеспечения, а также разрешать лицам,
которым Программное обеспечение предоставлено, делать это, при соблюдении следующих условий:
Вышеуказанное уведомление об авторских правах и данное уведомление о разрешении должны быть включены во все копии или
значительные части Программного обеспечения.
ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ ПРЕДОСТАВЛЯЕТСЯ "КАК ЕСТЬ", БЕЗ ГАРАНТИЙ КАКОГО-ЛИБО ВИДА, ЯВНЫХ ИЛИ ПОДРАЗДЕЛЯЕМЫХ,
ВКЛЮЧАЯ, НО НЕ ОГРАНИЧИВАЯСЬ, ГАРАНТИЯМИ ТОРГОВОЙ ПРИГОДНОСТИ, ПРИГОДНОСТИ ДЛЯ ОПРЕДЕЛЕННЫХ ЦЕЛЕЙ И НАРУШЕНИЯ.
В НИКАКОМ СЛУЧАЕ АВТОРЫ ИЛИ ДЕРЖАТЕЛИ АВТОРСКИХ ПРАВ НЕ НЕСУТ ОТВЕТСТВЕННОСТИ ЗА ЛЮБЫЕ ИСКИ, УБЫТКИ ИЛИ
ИНЫЕ ОТВЕТСТВЕННОСТИ, НЕЗАВИСИМО ОТ ТОГО, ВОЗНИКЛИ ЛИ ОНИ В РЕЗУЛЬТАТЕ ДЕЙСТВИЯ ДОГОВОРА, ПРАВОНАРУШЕНИЯ ИЛИ
ИНЫМ ОБРАЗОМ, В СВЯЗИ С, ИЛИ В РЕЗУЛЬТАТЕ ИСПОЛЬЗОВАНИЯ ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ ИЛИ ДРУГИХ ОТНОШЕНИЙ С НИМ.

@ -2,39 +2,39 @@
[![Go Reference](https://pkg.go.dev/badge/lure.sh/fakeroot.svg)](https://pkg.go.dev/lure.sh/fakeroot)
A pure-Go implementation of fakeroot using Linux user namespaces.
Чистая реализация fakeroot на Go с использованием пространств имен пользователей Linux.
### What is fakeroot?
### Что такое fakeroot?
Fakeroot is a utility that runs commands in an environment where they appear to have root privileges even though they don't. The [original `fakeroot` command](https://salsa.debian.org/clint/fakeroot/) does this by intercepting calls to libc functions like `stat()`, `chmod()`, `chown()`, etc. and replacing them with ones that return values that make it seem like the user is root.
Fakeroot — это утилита, которая запускает команды в среде, где они кажутся имеющими права суперпользователя, хотя на самом деле это не так. [Оригинальная команда](https://salsa.debian.org/clint/fakeroot/) fakeroot делает это, перехватывая вызовы функций библиотеки libc, таких как `stat()`, `chmod()`, `chown()` и т. д., и заменяя их на функции, которые возвращают значения, делающие видимым, что пользователь является суперпользователем.
### How is this library different?
### Чем эта библиотека отличается?
Instead of injecting custom libc functions, this library uses the Linux kernel's built-in isolation features to make a sort of container where the user is root. That means even programs that don't use libc (such as Go programs), or programs with a statically-linked libc, will believe they're running as root.
Вместо внедрения собственных функций libc эта библиотека использует встроенные функции изоляции ядра Linux, чтобы создать своего рода контейнер, где пользователь является суперпользователем. Это означает, что даже программы, не использующие libc (такие как программы на Go), или программы с статически связанной libc, будут думать, что они работают от имени root.
You can also nest this type of fakeroot up to 32 times, unlike the original libc-based one, which doesn't support nesting at all.
Вы также можете вложить этот тип fakeroot до 32 раз, в отличие от оригинального варианта на основе libc, который совсем не поддерживает вложение.
However, this approach will only work on Linux kernels new enough (3.8+) and on distros that don't disable this functionality. Most modern Linux systems support it though, so it should work in most cases.
Однако этот подход будет работать только на достаточно новых ядрах Linux (3.8+) и на дистрибутивах, которые не отключают эту функциональность. Тем не менее, большинство современных систем Linux поддерживают это, так что в большинстве случаев это должно работать.
### Why?
### Почему?
Many utilities depend on file permissions and user ownership. For instance, the tar command creates files within a tar archive with the same permissions as the original files. This means that if the files were owned by a specific user, they will retain that ownership when the tar archive is extracted. This can become problematic when building packages because it could lead to system files in a package being owned by non-root users. By making it seem as if the current user is root and therefore all the files are owned by root, fakeroot tricks utilities like `tar` into making its files owned by root.
Многие утилиты зависят от прав доступа к файлам и принадлежности пользователей. Например, команда tar создает файлы в архиве tar с теми же правами, что и у оригинальных файлов. Это означает, что если файлы принадлежали конкретному пользователю, они сохранят эту принадлежность при извлечении архива tar. Это может стать проблемой при создании пакетов, поскольку это может привести к тому, что системные файлы в пакете будут принадлежать пользователям, не являющимся суперпользователями. Создавая иллюзию, что текущий пользователь является суперпользователем и поэтому все файлы принадлежат root, fakeroot обманывает утилиты, такие как tar, заставляя их создавать свои файлы с правами root.
Also, many utilities may require root privileges for certain operations but might return errors even when the specific task doesn't necessarily need those elevated permissions. Fakeroot can be used to execute these programs without actually granting them root privileges, which provides some extra security.
Кроме того, многие утилиты могут требовать права суперпользователя для определенных операций, но могут возвращать ошибки, даже если конкретная задача не требует этих повышенных прав. Fakeroot можно использовать для выполнения этих программ, не предоставляя им реально права суперпользователя, что обеспечивает дополнительную безопасность.
### nsfakeroot
This repo includdes a command-line utility called `nsfakeroot`. To install it, run the following command:
Этот репозиторий включает утилиту командной строки под названием `nsfakeroot`. Чтобы установить его, выполните следующую команду:
```bash
go install lure.sh/fakeroot/cmd/nsfakeroot@latest
```sh
go install plemya-x.ru/fakeroot/cmd/nsfakeroot@latest
```
Running `nsfakeroot` on its own will start your login shell in the fakeroot environment. If you provide arguments, those will be used as the command.
Запуск `nsfakeroot` самостоятельно начнет вашу оболочку входа в среде fakeroot. Если вы предоставите аргументы, они будут использоваться как команда.
Examples:
Примеры:
```bash
```sh
nsfakeroot # -> (login shell)
nsfakeroot whoami # -> root
nsfakeroot id -u # -> 0