使用VNC服务器在FreeBSD上创建Jail

使用VNC服务器在FreeBSD上创建监狱

本文介绍如何在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

并放在这样的一些行:

# Your closer mirror of freebsd source code, for me is from Poland
*default host=cvsup.pl.FreeBSD.org
*default base=/usr
*default prefix=/usr
# for version 7.2 of FreeBSD you put 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

当您编译世界时,您可以使用两个命令创建新的监视器,而无需再次编译世界:

# 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

当你在监狱里你可以设置一个root密码:

# passwd

那么你必须添加一个非root帐户,这将通过ssh给你访问监狱。

# adduser

要监狱,你必须使用exit命令。

# exit

你的监狱几乎准备好了 您必须在/etc/rc.conf文件中添加一些行,之后您的监控器将启动时,您的监狱将启动。

# alias to your network interface
ifconfig_bge0_alias0="192.168.2.2"
# line that enabling jails in freebsd
jail_enable="yes"
# list of your jails ex. “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"

如果要将ports树挂在监狱中,不想复制,我们可以将/ usr / ports /目录挂载到/ etc / fstab文件中的一行。 如下所示:

/usr/ports              /home/jails/testjail/usr/ports/         nullfs  rw,auto 0 0

启动和停止jail而不重新启动系统:

# /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”更改为ex。 “wmaker&”用于WindowMaker环境。

要连接到vnc监狱,您必须在vncviewer jail_ip_address和vnc端口中写入。 例如 192.168.2.2:1

vnc在监狱中出现一些错误:当您有不识别颜色的消息时,必须编辑/ usr / local / bin / vncserwer文件并更改行:

$cmd .= " -co /usr/X11R6/lib/X11/rgb";

当我们有消息
!!!!!!!!!!!!!!!!!!!!!!!!!!
没有免费显示监狱名称

您必须在函数CheckDisplayNumber中编辑/ usr / local / bin / vncserver并将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
ex.
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
赞(52) 打赏
未经允许不得转载:优客志 » 系统运维
分享到:

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏