Создание нового поддельного пользователя в пространстве имен пользователей: пошаговая инструкция

Как запустить процесс от имени другого пользователя в Linux

Запуск процесса от имени другого пользователя в Linux — задача, которая может быть полезной для тестирования или разработки. В этой статье мы рассмотрим различные способы достижения этой цели, включая использование unshare, fakeroot и управление пространствами имен.

Почему нужно запускать процессы от имени другого пользователя?

Может возникнуть необходимость имитировать поведение системы в условиях, когда вы работаете под разными учетными записями. Это может быть полезно для тестирования, создания заметок или просто для понимания работы программ с разными правами доступа. Вам может потребоваться запускать команды от имени пользователей, у которых могут быть различные разрешения и ограничения.

Первые шаги с unshare

Команда unshare позволяет создавать новые пространства имен в Linux. Это означает, что вы можете создать отдельное пространство для управления пользователями и их идентификаторами. Пример команды, которую можно использовать для создания нового пространства имен:

unshare --user --map-root-user bash

Как вы могли заметить, попытка изменить владельца файла с помощью команды chown может вызвать ошибку, подобную этой:

chown: changing ownership of 'a': Invalid argument

Это происходит потому, что вам необходимо правильно сопоставить UID с использованием newuidmap.

Использование fakeroot

Если работа с unshare слишком сложна, можно попробовать команду fakeroot. Эта утилита создает "виртуальную" среду, в которой вы можете имитировать выполнение от имени другого пользователя без фактического использования прав администратора и создания новых учетных записей.

Пример использования:

fakeroot
touch a b
chown 1 a
chown 2 b
ls -l

Запуск скрипта с другой учетной записью

Теперь возникает вопрос: как запустить программу с другим UID, если соответствующей учетной записи не существует? Простая команда su не сработает:

su 3 ...

Вы получите сообщение об ошибке: No passwd entry for user '3'. Изменение целых пространств имен или создание новых учетных записей может показаться излишним для простых задач.

Настройка newuidmap

Чтобы использовать unshare с привилегированными операциями, такими как сопоставление пользователей, вам нужно убедиться, что ваши внутренние UID сопоставлены с внешними. Пример команды:

unshare -r --map-users=1:2000001:9

Это позволяет вашему пространству имен пользователей использовать определенные UID, начиная с 1, сопоставляя их с внешними UID, начинающимися с 2000001.

Использование setpriv

Как только пользовательские пространства имен настроены, вы можете использовать команду setpriv, чтобы запустить команды от имени произвольного UID:

setpriv --reuid=1 /bin/id

Создание изолированного пространства имен

Если вам нужно запускать sudo с различными учетными данными, вам может потребоваться создать изолированное пространство имен монтирования, чтобы монтировать измененные файлы /etc/passwd и /etc/group. Пример:

(unshare -r [...] -m)
mount --bind ~/passwd.fake /etc/passwd
mount --bind ~/group.fake /etc/group

Заключение

Запуск процессов от имени другого пользователя в Linux может быть сложной задачей, но используя инструменты, такие как unshare, fakeroot, и setpriv, вы можете упростить этот процесс. Понимание пространств имен и управления пользователями — ключ к успешной реализации этой возможности. Благодаря этой статье вы теперь обладаете необходимыми знаниями для работы с идентификаторами пользователей в Linux.

Источник

Ответить

Ваш адрес email не будет опубликован. Обязательные поля помечены *