使用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