OpenBSD 下架设vsftpd
最近玩OpenBSD,由于自己机器不在,只好在别人的机器上用虚拟机来过过瘾了。
相比之前的NetBSD,OpenBSD给我的最大感受就是简单,配置Web服务,ftp服务等原来觉得高深莫测的东西在OpenBSD下都觉得不过如此,简单至极:就是配置就是看看配置文件,运行和停止服务是敲个命令就搞定的事(也可能是内功在不知不觉中提高了,以前觉得不可理解的东西现在都慢慢习惯了)。 废话少说,开始正题。 环境:
系统环境:xp+vmware+OpenBSD
网络环境:虚拟机vmware通过桥接方式连接路由器,路由器使用使用网通动态ip连接。 目的:由于无法直接访问内网ip,因此需要进行端口映射,让可以直接访问虚拟机;又由于使用的是动态ip,每次重启后的ip地址都不一样,因此需要使用动态dns解析来解决这个问题。最后希望达到在通过域名即可访问内网的虚拟机里的OpenBSD上的ftp服务。
1。安装vsftpd
OpenBSD的网络配置在安装时已经搞定,设为192.168.1.103,通过putty来连接操作机器。
关于vsftpd就不做介绍了,百度一下就知道了。我是通过package的形式安装的,步骤略述如下:
(1)设置PKG_PATH
#export PKG_PATH=ftp://ftp.openbsd.org/pub/OpenBSD/4.4/packages/i386/ 或者把该环境变量写到用户shell的配置文件中,这样以后启动shell时就会自动设置该环境变量,否则每次使用时都需要手动设置:
#cd #vi .profile 在里面添加如下代码:
PKG_PATH=ftp://ftp.openbsd.org/pub/OpenBSD/4.4/packages/i386/ export PKG_PATH 保存退出,重启shell。 查看设置是否有效: #echo $PKG_PATH 如果返回
ftp://ftp.openbsd.org/pub/OpenBSD/4.4/packages/i386/ 就说明设置成功了。 (2)安装vsftpd
#pkg_add -v vsftpd-2.0.5.tgz 等待安装完成即可。
2。配置vsftpd
配置参照:http://bbs.chinaunix.net/viewthread.php?tid=561183&extra=&page=1
vsftpd有两种启动方式,我选择最简单的:安装完成后在shell下运行vsftpd命令就可启动vsftpd服务。 #vsftpd
启动这个服务需要root权限,如果提示权限不够的话:
#su - 在启动即可。
vsftp的配置文件是/etc/vsftpd.conf,用vi打开即可查看详细的配置情况,每一项都有具体的说明。保持默认配置不做改动,在浏览器中输入ftp://192.168.1.103即可登入。但奇怪的是默认配置明明允许匿名登陆但实际登陆时却需要用户名和密码,以本地用户(local user,即系统用户)登陆,发现直接打开用户的home目录。
这时服务虽然启动了,但要想做一个真正的ftp服务器还得继续做一些设置。
先说说vsftpd的三种用户:匿名用户(这是我们最常见的anonymous),本地用户(也就是系统用户),虚拟用户(专门为ftp服务添加的用户,不能登陆系统),之所以设置这么多类型主要是考虑系统的安全和用户的权限管理。不同类型的用户配置可能有不同,我这里单说匿名用户。
通常都需要作如下设置:
# useradd nobody //可能你的系统已经存在此帐号,那就不用建立
# mkdir /usr/share/empty //可能你的系统已经存在此目录,那就不用建立 # mkdir /var/ftp //可能你的系统已经存在此目录,那就不用建立
# useradd -d /var/ftp ftp //可能你的系统已经存在此帐号,那就不用建立 # chown root:root /var/ftp # chmod og-w /var/ftp
请记住,如果你不想让用户在本地登陆,那么你需要把他的登陆SHELL设置成/sbin/nologin,比如以上的nobody和ftp我就设置成/sbin/nologin
我前面说默认配置匿名用户无法登陆,可能是因为没有为匿名用户添加相应目录,在 mkdir /var/ftp 后匿名用户也可登陆了。
为了测试,在 /var/ftp 下创建一些目录,放置一些文件,用leapftp登陆即可看到,证明配置ok了。
开放匿名用户的上传权限:
因为 vsftpd 是为了安全需要,/var/ftp目录不能把所有的权限打开,所以我们这时要建一个目录pub,当然也还是需要继续修改配置文件的。
# mkdir /var/ftp/pub
# chmod -R 777 /var/ftp/pub 现在上传即ok。
但是下载刚上传的文件却出了问题:550 Failed to open file.
记得咱们设置了anon_umask=077了吗?所以你下载不了,如果你到服务器上touch 一个文件(4),测试一下,是可以被下载下来的,好了,匿名服务器就说到这里了。
还是权限问题: #cd /var/ftp/pub #chmod 4 *
即把该目录下所有文件的权限都开放了,于是即可顺利下载了。
(这里还有个问题:每当有新文件上传时,都得来手动修改文件的属性,否则就无法下载上传的文件。个人觉得应该有办法,但不知道具体该怎么做,希望有高人能指点)。 现在应该可以在同一个路由下用内网ip来访问OpenBSD的ftp了:
3.端口映射
现在内网可以访问,但还是不行,这得通过端口映射来解决。 在路由器->转发规则->虚拟服务器 里进行设置,将相应服务的端口地址改为虚拟机的地址,这样来的数据就会转发到虚拟机上,就相当于虚拟机的相应端口取代了路由器的相应端口。
此处进行ftp服务,需要将20和21端口映射到虚拟机上,如下图:
如此一来,通过路由器的ip即可访问虚拟机的ftp服务:
4 。动态dns
现在虽然通过ip可以直接访问虚拟机,但是由于使用的是动态ip,重启后地址就会发生变化,因此需要使用动态dns来进行动态域名解析。
提供这类服务的有很多,我这里使用的是希网(www.3322.org)提供的免费动态dns解析。 首先注册用户,申请域名,然后进行动态ip绑定。
申请域名后,一般要下载客户端,运行后就可将当前ip(地址)绑定到该域名。希网提供windows和UNIX的客户端下载,有FreeBSD的,但不确定能否在OpenBSD下使用。这里我使用更简单的办法,不需要下载客户端,执行一行命令即可:
于是我在shell里运行如下命令(需要安装lynx):
# lynx –mime_header –auth=chutianyao:**** “http://www.3322.org/dyndns/update?system=dyndns&hostname=gis114.3322.org”
其中:chutianyao是我在希网的注册用户名
**** 是密码。这是用来进行用户认证的。
(注意用户名和密码间有冒号,不要有空格,否则无法通过认证。如果认证失败的话可能是上述命令没有输对,多试几次可以了)
gis114.3322.org是我在希网注册的域名,我希望将它绑定到虚拟机当前的地址上(其实地址是路由器通过dns从网通的isp服务商那里得到的动态ip,每次都会发生变化)。
关于更多的说明参看希网的域名更新协议:http://www.3322.org/dyndnspage/protocol.html
可以将上述 命令写成一个简单的脚本,然后添加到配置文件里让系统启动时自动运行它,这样就不必每次都来敲这一长串命令了。 # vi updateSite 输入: #/bin/sh
lynx –mime_header –auth=chutianyao:**** “http://www.3322.org/dyndns/update?system=dyndns&hostname=gis114.3322.org”
退出保存,改变属性: #chmod +x updateSite
执行该脚本,如下图即说明绑定成功:
让系统启动时执行该脚本: #vi ~/.profile 添加:
Sh ~/chubins/.profile Sh vsftpd
退出保存。
这样系统启动时就会执行脚本,将路由器当前的ip绑定到注册的域名上,在通过域名访问即可访问内网的虚拟机。
Ok,大功告成!
饶正锋 2008-12-2