3

Есть ли способ предоставить конкретное имя хоста для приложения, которое отличается от имени хоста компьютера в Linux? По сути, у меня есть часть программного обеспечения, которая ожидает, что локальный компьютер будет иметь определенное имя хоста, которое отличается от имени хоста моего компьютера. Вместо того, чтобы менять имя хоста компьютера глобально, я хотел бы использовать механизм, в котором я могу либо запустить программу в среде с указанным именем хоста, либо запустить программу напрямую с указанным именем хоста.

3 ответа3

3

Это возможно с правами root. Используйте unshare --uts использование для создания нового пространства имен UTS 1, установите желаемое имя хоста в нем, то su обратно в свой аккаунт и запустить приложение. Например:

ongun@foo$ sudo -s
~ create a new namespace ~
root@foo# unshare --uts /bin/sh
~ this terminal now has its own namespace – change the hostname ~
root@foo# hostname quux
~ switch back ~
root@quux# sudo -s -u ongun
ongun@quux$ /usr/bin/game

Пространства имен по умолчанию ограничены процессом их создания, поэтому новое имя хоста будет видно только для программ, которые вы запускаете в окне "unshare" d.

Примечание. Не забудьте на самом деле добавить новое имя хоста в /etc/hosts как 127.0.0.1, так как многие программы ожидают / зависят от его разрешения.


1 Не спрашивайте, что означает "UTS". Лучшее, что я знаю, это то, что осталось от древнего Unix.

0

Я предполагаю, что у вас нет исходного кода рассматриваемой программы. Чтение имени хоста машины выполняется с помощью вызова sys gethostname(), который было бы трудно обойти без доступа к исходному коду программы.

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

0

Если ваше приложение напрямую не читает вывод имени hostname или файла /etc/hostname , вы всегда можете создать псевдоним для своего компьютера, как показано ниже.

#
# /etc/hosts: static lookup table for host names
#

#<ip-address>   <hostname.domain.org>   <hostname>
127.0.0.1       localhost.localdomain   localhost MYHOSTNAME   OTHER_ALIAS
::1             localhost.localdomain   localhost MYHOSTNAMEv6 OTHER_ALIASv6

или вы можете попробовать создать chroot с другим именем хоста, как здесь

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .