Ventrilo语音通信服务器在一个Chrooted环境中的Ubuntu Feisty AMD64
本教程将介绍如何在chroot环境中设置Ventrilo ,一种流行的语音通信服务器,并以非特权用户身份运行。 它的一部分改编自http://pelme.se/~andreas/code/ventrilo-chroot/ 。
这样做的主要原因是安全。 Ventrilo仅以二进制格式分发,有些人不信任。 chrooted环境意味着程序只能访问其主目录,而不是整个系统。 像这样运行就意味着如果Ventrilo中存在漏洞或漏洞,那么系统的其余部分就不可能妥协。
该教程在Ubuntu Feisty AMD64上进行了测试,并配有免费版本的Ventrilo。 最后包括有关32bit系统需要修改的说明。
从Ventrilo的网站下载最新版本的linux服务器。
安装32bit兼容包:
apt-get install ia32-libs linux32
制作chroot服务的目录:
mkdir /opt/chrooted
为ventrilo创建用户:
useradd -r /bin/false -m /opt/chrooted/ventrilo ventrilo
为ventrilo创造新的环境:
mkdir /opt/chrooted
tar zxvf ~/ventrilo_srv-2.3.1-Linux-i386.tar.gz /opt/chrooted/ventrilo
cd /opt/chrooted/ventrilo
mkdir dev
mkdir lib
mkdir lib32
mkdir lib64
mknod dev/null c 1 3
chmod 666 dev/null
chown -R ventrilo /opt/chrooted/ventrilo/*
将所需的库复制到Ventrilo的新环境中,因为它不能访问文件系统的其余部分:
cp /lib32/libdl.so.2 lib32
cp /lib32/libc.so.6 lib32
cp /lib/ld-linux.so.2 lib
cp /lib/libc.so.6 lib
cp /lib64/ld-linux-x86-64.so.2
将以下内容复制到start.c
:
/* ------------------------------------------------------------- This version has been modified by Grant Emsley <grant @emsley.ca> Modified on Sept 17, 2007 A program to start ventrilo in a chroot with dropped privileges Copyright (C) 2005 Andreas Pelme <andreas @pelme.se> This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. --- Installation ------------------------------------------------------------- * Change the UID/GID to the UID/GID your ventrilo server is intended to run as. * Compile this file with this command: gcc -O2 -o start start.c ----------------------------------------------------------------------------- */ #include <stdio.h> #include <unistd.h> // CHANGE THIS TO WHATEVER UID/GID YOU WANT TO RUN VENTRILO AS #define UID 10007 #define GID 10007 // CHANGE THIS TO WHATEVER UID/GID YOU WANT TO RUN VENTRILO AS int main(int argc, char **argv) { int gid = GID; if (setgroups(1, &gid) == -1) { fprintf(stderr, "%s: setgroups() failed!\n", argv[0]); return 1; } if (setgid(GID) == -1) { fprintf(stderr, "%s: setgid() failed!\n", argv[0]); return 1; } if (setuid(UID) == -1) { fprintf(stderr, "%s: setuid() failed!\n", argv[0]); return 1; } execl("/ventrilo_srv", "ventrilo_srv", "-d -fventrilo_srv", 0); }
编辑UID和GID行以匹配Ventrilo用户。 您可以通过运行以下方式找到该号码
cat /etc/passwd | grep ventrilo
编译启动程序:
gcc -O2 -o start start.c
如果该命令给出错误,如“error:stdio.h:没有这样的文件或目录”,请先运行:
apt-get install build-essential
我们现在需要的是启动脚本。 复制到/etc/init.d/ventrilo
:
#!/bin/sh CHROOT="/opt/chrooted/ventrilo/" function start { echo -n "Starting Ventrilo server..." PIDFILE="$CHROOT/ventrilo_srv.pid" if [ ! -e $PIDFILE ] then chroot $CHROOT /start $1 echo "done." else echo "already running!" exit fi } stop() { echo -n "Stopping Ventrilo server..." PIDFILE="${config}/ventrilo_srv.pid" if [ -e $PIDFILE ] then kill -9 `cat $PIDFILE` > /dev/null rm -f $PIDFILE echo "done." else echo "not running!" exit fi } case "$1" in start) start ;; stop) stop ;; restart|reload|force-reload) stop sleep 1 start ;; *) echo "Usage: $0 start|stop|restart|reload|force-reload" exit 1 ;; esac
使用您需要的任何设置编辑ventrilo_srv.ini
。 检查他们的网站上的文件。
将脚本设置为在服务器启动时运行:
update-rc.d ventrilo defaults
而已。 要启动服务器,请运行:
/etc/init.d/ventrilo start
32位Linux
如果您使用的是32位linux,则需要更改以下步骤:
- 不要安装32位兼容包。
- 不要使lib32或lib64目录。
- 在安装结束之前不要复制任何库。
- 而不是安装上面的库,运行:
ldd ventrilo_srv
在箭头右侧有任何东西的任何文件都必须复制到/ opt / chrooted / ventrilo / lib
中的同一个目录中
。
对start命令执行相同的操作,然后再将文件复制到lib目录中:
ldd start