Есть ли способ предоставить конкретное имя хоста для приложения, которое отличается от имени хоста компьютера в Linux? По сути, у меня есть часть программного обеспечения, которая ожидает, что локальный компьютер будет иметь определенное имя хоста, которое отличается от имени хоста моего компьютера. Вместо того, чтобы менять имя хоста компьютера глобально, я хотел бы использовать механизм, в котором я могу либо запустить программу в среде с указанным именем хоста, либо запустить программу напрямую с указанным именем хоста.
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.
Я предполагаю, что у вас нет исходного кода рассматриваемой программы. Чтение имени хоста машины выполняется с помощью вызова sys gethostname(), который было бы трудно обойти без доступа к исходному коду программы.
Затем вы должны использовать виртуальное решение для запуска программы. Контейнеры, докеры, виртуальные машины имеют достаточную степень изоляции, чтобы вы могли переименовать их в требуемое значение, не ставя под угрозу ваш хост-компьютер. Контейнер - это очень легкое решение, которое потребляет очень мало ресурсов вашего хоста.
Если ваше приложение напрямую не читает вывод имени 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 с другим именем хоста, как здесь