Linux의 시스템 호스트 이름과 다른 특정 호스트 이름을 애플리케이션에 제공하는 방법이 있습니까?

Linux의 시스템 호스트 이름과 다른 특정 호스트 이름을 애플리케이션에 제공하는 방법이 있습니까?

Linux의 시스템 호스트 이름과 다른 특정 호스트 이름을 애플리케이션에 제공하는 방법이 있습니까? 기본적으로 로컬 컴퓨터가 내 컴퓨터 호스트 이름과 다른 특정 호스트 이름을 가질 것으로 예상하는 소프트웨어가 있습니다. 시스템 호스트 이름을 전체적으로 변경하는 대신 지정된 호스트 이름을 사용하여 환경에서 프로그램을 실행하거나 지정된 호스트 이름을 사용하여 프로그램을 직접 실행할 수 있는 메커니즘을 원합니다.

답변1

루트권한으로 가능합니다. 사용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

네임스페이스는 기본적으로 생성 프로세스로 제한되므로 새 호스트 이름은 실행하는 프로그램에만 표시됩니다.내부에"공유 해제" 창.

메모:실제로 새 호스트 이름을 127.0.0.1로 추가하는 것을 잊지 마세요. /etc/hosts많은 프로그램이 이를 확인할 수 있을 것으로 기대하거나 이에 의존하기 때문입니다.


1 "UTS"가 무엇을 의미하는지 묻지 마십시오. 내가 아는 가장 좋은 것은 고대 유닉스의 잔재라는 것입니다.

답변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

문제의 프로그램의 소스 코드가 없는 것 같습니다. 시스템의 호스트 이름 읽기는 sys 호출을 통해 수행됩니다.gethostname(), 프로그램 소스 코드에 액세스하지 않으면 우회하기 어려울 것입니다.

그런 다음 가상 솔루션을 사용하여 프로그램을 실행해야 합니다. 컨테이너, 도커, VM은 호스트 시스템을 손상시키지 않고 필요한 값으로 이름을 바꿀 수 있을 만큼 충분한 격리 수준을 갖추고 있습니다.컨테이너호스트 리소스를 거의 소모하지 않는 매우 가벼운 솔루션입니다.

관련 정보