서버 설정 · 3 min read · Jan 24, 2026
FreeBSD에서 VNC 서버로 감옥 만들기
FreeBSD에서 VNC 서버로 감옥 만들기
이 문서에서는 FreeBSD의 감옥 내에서 VNC 서버를 실행하는 방법을 설명합니다.
소스에서 감옥 만들기:
감옥이 저장될 디렉토리를 만듭니다:
# mkdir -p /home/jails또는 /usr 디렉토리에서:
# mkdir -p /usr/jails# mkdir /home/jails/testjail/usr/src 디렉토리로 이동하여 FreeBSD 소스 코드가 있는지 확인합니다.
# cd /usr/src# ls다음과 같은 내용이 표시되어야 합니다:
COPYRIGHT contrib release
LOCKS crypto rescue
MAINTAINERS etc sbin
Makefile games secure
Makefile.inc1 gnu share
ObsoleteFiles.inc include sys
README kerberos5 tools
UPDATING lib usr.bin
bin libexec usr.sbin빈 디렉토리이거나 sys 디렉토리만 있는 경우 FreeBSD 소스 코드를 설치해야 합니다: sysinstall을 실행하거나 cvs에서 소스 코드를 다운로드할 수 있습니다.
# sysinstall구성으로 이동한 다음 배포로 가서 “src”를 선택하고 확인을 누릅니다. 그 후 /usr/src/ 디렉토리에 모든 소스 코드가 있어야 합니다. 그런 다음 cvs에서 최신 버전으로 소스 코드를 업데이트해야 합니다. 홈 디렉토리 또는 다른 곳에 “stable-supfile”이라는 파일을 만들어야 합니다.
# vi ~/stable-supfile그리고 다음과 같은 줄을 입력합니다:
# FreeBSD 소스 코드의 더 가까운 미러, 저에게는 폴란드에서
*default host=cvsup.pl.FreeBSD.org
*default base=/usr
*default prefix=/usr
# FreeBSD 7.2 버전의 경우 RELENG_7_2 7.1 - RELENG_7_1 7.0 - RELENG_7_0 6.4 RELENG_6_4를 입력합니다.
*default release=cvs tag=RELENG_7_2
*default delete use-rel-suffix
*default compress
src-all파일을 저장한 후 csup로 FreeBSD 소스 코드를 업데이트할 수 있습니다:
# csup /root/stable-supfile그 후 소스 코드에서 감옥을 컴파일할 수 있습니다:
# cd /usr/src# make world DESTDIR=/home/jails/testjail# make distribution DESTDIR=/home/jails/testjail한 번 World를 컴파일하면 두 개의 명령으로 추가 감옥을 생성할 수 있으며, 다시 World를 컴파일할 필요가 없습니다:
# make installworld DESTDIR=/home/jails/otherjail# make distribution DESTDIR=/home/jails/otherjail감옥이 준비되면 일부 구성 파일에서 몇 가지 변경을 해야 합니다.
# vi /home/jails/testjail/etc/rc.conf그리고 다음을 입력합니다:
sendmail_enable="NONE"
sshd_enable="YES"# cp /etc/resolv.conf /home/jails/testjail/etc/# touch /home/jails/testjail/etc/fstab처음으로 감옥 실행하기:
감옥을 실행하려면 devfs를 감옥에 마운트해야 합니다:
# mount -t devfs devfs /home/jails/testjail/dev그런 다음 네트워크 인터페이스에 대한 별칭을 구성해야 합니다. 제 FreeBSD에서는 bge0 인터페이스가 있으며, 다음과 같이 별칭을 만듭니다:
# ifconfig bge0 alias 192.168.2.2감옥 실행:
# jail /home/jails/testjail shell 192.168.2.2 /bin/tcsh감옥에 들어가면 루트 비밀번호를 설정할 수 있습니다:
# passwd그런 다음 ssh를 통해 감옥에 접근할 수 있는 비루트 계정을 하나 추가해야 합니다.
# adduser감옥을 나가려면 exit 명령을 사용해야 합니다.
# exit감옥이 거의 준비되었습니다. /etc/rc.conf 파일에 몇 줄을 추가해야 하며, 그 후 서버가 시작될 때 감옥이 시작됩니다.
# 네트워크 인터페이스에 대한 별칭
ifconfig_bge0_alias0="192.168.2.2"
# FreeBSD에서 감옥을 활성화하는 줄
jail_enable="yes"
# 감옥 목록 예: "testjail otherjail httpjail sshjail"
jail_list="testjail"
jail_testjail_rootdir="/home/jails/testjail"
jail_testjail_hostname="testjail"
jail_testjail_ip="192.168.2.2"
jail_testjail_exec_start="/bin/sh /etc/rc"
jail_testjail_exec_stop="/bin/sh /etc/rc.shutdown"
jail_testjail_devfs_enable="YES"감옥에서 포트 트리를 가지고 싶고 복제하고 싶지 않다면 /etc/fstab 파일에 한 줄로 /usr/ports/ 디렉토리를 감옥에 마운트할 수 있습니다. 다음과 같은 줄:
/usr/ports /home/jails/testjail/usr/ports/ nullfs rw,auto 0 0시스템을 재부팅하지 않고 감옥을 시작하고 중지하기:
# /etc/rc.d/jail start testjail# /etc/rc.d/jail stop testjail감옥 목록을 얻으려면 다음 명령으로 얻을 수 있습니다:
# jls패키지에서 감옥에 xorg 및 vnc 설치하기:
# pkg_add –r xorg# pkg_add –r vnc사용자 계정에서 vnc를 실행하려면 다음과 같이 입력합니다:
$ vncserver처음 vncserver를 실행할 때 vnc 연결을 위한 비밀번호를 설정해야 합니다.
기본적으로 vnc에 연결하면 twm이 실행됩니다. ~/.vnc/xstartup 파일을 편집하여 이를 변경할 수 있습니다. 마지막 줄을 “twm &”에서 예를 들어 “wmaker &”로 변경해야 합니다.
vnc 감옥에 연결하려면 vncviewer에 jail_ip_address와 vnc 포트를 입력해야 합니다. 예: 192.168.2.2:1
감옥에서 vnc와 관련된 몇 가지 오류: 색상을 인식하지 못하는 메시지가 표시되면 /usr/local/bin/vncserwer 파일을 편집하고 다음 줄을 변경해야 합니다:
$cmd .= " -co /usr/X11R6/lib/X11/rgb";“!!!!!!!!!!!!!!!!!!!!!!!!!!” 메시지가 표시되면 감옥 이름에 대해 사용 가능한 디스플레이가 없다는 의미입니다. /usr/local/bin/vncserver를 편집하고 CheckDisplayNumber 함수의 두 줄에서 pack 함수를 sockaddr_in으로 변경해야 합니다:
[…]
pack ---> sockaddr_in(6000 +$n, &INADDR_ANY))) {
[…]
pack ---> sockaddr_in(5900 +$n, &INADDR_ANY))) {
[…]코드는 다음과 같아야 합니다:
sub CheckDisplayNumber
{
local ($n) = @_;
socket(S, $AF_INET, $SOCK_STREAM, 0) || die "$prog: socket failed: $!\n";
eval 'setsockopt(S, &SOL_SOCKET, &SO_REUSEADDR, pack("l", 1))';
if (!bind(S, sockaddr_in(6000 + $n, &INADDR_ANY))) {
close(S);
return 0;
}
close(S);
socket(S, $AF_INET, $SOCK_STREAM, 0) || die "$prog: socket failed: $!\n";
eval 'setsockopt(S, &SOL_SOCKET, &SO_REUSEADDR, pack("l", 1))';
if (!bind(S, sockaddr_in(5900 + $n, &INADDR_ANY))) {
close(S);
return 0;
}
close(S);
}감옥을 위한 IPWF에서 포트 포워딩
감옥으로 일부 포트를 포워딩하려면 몇 가지 옵션이 활성화된 FreeBSD 커널을 컴파일해야 합니다:
options IPFIREWALL
options IPFIREWALL_DEFAULT_TO_ACCEPT
options IPFIREWALL_VERBOSE
options IPFIREWALL_FORWARD
options IPDIVERT포트 포워딩 규칙:
ipfw add fwd ip_adres_jail,port_jail tcp from any to adresip_local port_local
예:
ipfw add fwd 192.168.2.2,21 tcp from any to me 21
ipfw add fwd 192.168.2.2,21 tcp from any to 72.46.154.23 21새 게시물을 받은 편지함에서 받기
스팸은 없습니다. 언제든지 구독 해지 가능합니다.