Как запустить процесс от имени другого пользователя в 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.