有没有办法为应用程序提供与 Linux 上的机器主机名不同的特定主机名?

有没有办法为应用程序提供与 Linux 上的机器主机名不同的特定主机名?

有没有办法为应用程序提供与 Linux 上的机器主机名不同的特定主机名?基本上,我有一个软件,它希望本地机器具有与我的机器主机名不同的特定主机名。我不想全局更改机器主机名,而是想要一种机制,让我可以在具有指定主机名的环境中运行程序,或者直接使用指定的主机名运行程序。

答案1

有 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

默认情况下,命名空间仅限于其创建者进程,因此新主机名仅对你运行的程序可见里面“取消共享”的窗口。

笔记:不要忘记将新主机名实际添加/etc/hosts为 127.0.0.1,因为许多程序都期望/依赖于它是可解析的。


1不要问“UTS”是什么意思。我唯一知道的是它是古老 Unix 的遗留。

答案2

如果您的应用程序不直接读取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,例如这里

答案3

我假设您没有该程序的源代码。读取机器的主机名是通过系统调用完成的,获取主机名()如果不访问程序源代码,就很难规避这一问题。

然后,您应该使用虚拟解决方案来运行该程序。容器、docker、VM 具有足够的隔离度,允许您将它们重命名为所需的值,而不会损害您的主机。容器是非常轻量级的解决方案,它几乎不会消耗您的主机资源。

相关内容