免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 955 | 回复: 0
打印 上一主题 下一主题

FTP系列1: VSFTPD-2.0.6移植 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-01-16 00:28 |只看该作者 |倒序浏览

据我了解,FTP服务器vsftpd,proftpd,pureftpd等。考虑到我的CentOS4.5上装的是vsftpd,而且vsftpd很小,但功能还是比较强大。从网上搜索资料,发现该ftp服务器的移植难度也不大,主要是配置问题。所以就选择了移植vsftpd。有两篇文章写的不错:

    1、
http://www.cnitblog.com/zouzheng/archive/2008/03/03/32543.html
    2、
http://blog.chinaunix.net/u1/48368/showart_382006.html

    我在移植时,并没有完全采用这个思路。主要的想法是尽量利用Host上的配置,先得到相应的依赖关系,然后再深入。

(1)下载vsftpd

    官方网站::
http://vsftpd.beasts.org/

    当前的最新版本是:vsftpd-2.0.6,压缩包只有155k。

(2)交叉编译

    需要修改的地方有两处。第一处是Makefile的CC:

# Makefile for systems with GNU tools
CC = /usr/local/arm/3.4.1/bin/arm-linux-gcc

    就是修改为你自己的交叉编译器的地址。我因为前面编译一些工具都是使用了3.4.1,所以这里也就继续使用了。

    第二处是脚本vsf_findlibs.sh。这里主要是牵扯到库libcap的问题。网上的修改都是更改到交叉编译器的lib文件夹下,发现即使在lib文件夹下面没有,也不影响。那么,我判断,这个库是没有必要的,直接把这两行注释就可以了。

# Look for libcap (capabilities)
# locate_library /lib/libcap.so.1 && echo "/lib/libcap.so.1";
# locate_library /usr/lib/libcap.so && echo "-lcap";

   改完后,执行make,动态编译就成功了。如下:

[root@lqm vsftpd-2.0.6]# file vsftpd
vsftpd: ELF 32-bit LSB executable, ARM, version 1 (ARM), for GNU/Linux 2.4.3, dynamically linked (uses shared libs), stripped
[root@lqm vsftpd-2.0.6]# ls -l vsftpd
-rwxr-xr-x 1 root root 81728 Mar 22 16:46 vsftpd

(3)查看依赖及其相应的配置文件

    首先,因为是动态链接,查看相应的动态库。

[root@lqm vsftpd-2.0.6]# /usr/local/arm/3.4.1/bin/arm-linux-readelf -d vsftpd
Dynamic segment at offset 0x134a4 contains 25 entries:
  Tag Type Name/Value
0x00000001 (NEEDED) Shared library: [libcrypt.so.1]
0x00000001 (NEEDED) Shared library: [libdl.so.2]
0x00000001 (NEEDED) Shared library: [libnsl.so.1]
0x00000001 (NEEDED) Shared library: [libresolv.so.2]
0x00000001 (NEEDED) Shared library: [libutil.so.1]
0x00000001 (NEEDED) Shared library: [libc.so.6]

    把这些库从/usr/local/arm/3.4.1/arm-linux/lib下拷贝到rootfs的lib下。

    第一步工作完成了。

    第二步工作,把vsftpd拷贝到rootfs的/usr/sbin或者是/usr/local/sbin下面。我的是拷贝到了/usr/sbin下面。

    第三步工作就是配置文件vsftpd.conf。我是直接从CentOS4.5的/etc/vsftpd/vsftpd.conf拷贝到了rootfs的/etc/vsftpd.conf。这里测试时有一个问题,如果在rootfs下跟host一样,建立一个vsftpd的话,那么直接启动vsftpd都会产生一个oops错误,就是说只能由inetd或者xinetd来启动。而事实上,我已经设置为listen=YES,应该可以standalone启动。根据情况,屏蔽了几条记录:

#pam_service_name=vsftpd
#userlist_enable=YES
#enable for standalone mode
listen=YES
tcp_wrappers=NO

    就是只更改了最后四行。关于具体的配置后面再做探讨。先走通再说。

    第四步工作就是牵扯到用户问题了。首先有一个本地用户,这样可以通过本地用户进行访问;其次要匿名用户,这就需要ftp用户;还需要有一个nobody用户。直接创建比较麻烦,所以直接拷贝host的/etc/passwd,/etc/group,/etc/shadow。

[root@listentec ~]#cat /etc/group
root::0:root
ftp:x:50:
nobody:x:99:
users:x:100:
500:x:500:boa
501:x:501:armlinux

    这样用户问题就解决了。

    第五步工作就是相应的目录需要创建。支持匿名用户需要创建/var/ftp,根据一般惯例,我在ftp下建立了pub目录。还需要建立/usr/share/empty目录,否则在访问时会出现:

500 OOPS: vsftpd: not found: directory given in 'secure_chroot_dir':/usr/share/empty

   这个是与你的配置选项相关的。

/usr/sbin/vsftpd ---- VSFTPD的主程序(必需)
/etc/rc.d/init.d/vsftpd ---- 启动脚本
/etc/vsftpd.conf ---- 主配置文件(必需)
/etc/pam.d/vsftpd ---- PAM认证文件
/etc/vsftpd.ftpusers ---- 禁止使用VSFTPD的用户列表文件
/etc/vsftpd.user_list ---- 禁止或允许使用VSFTPD的用户列表文件
/etc/userconf ------ 指定用户个人配置文件所在的目录
/var/ftp ---- 匿名用户主目录
/var/ftp/pub---- 匿名用户的下载目录
/var/log/vsftpd.log ------- 日志文件
除vsftpd、vsftpd.conf两个文件外,其他文件的需要具体看主配置文件的配置

   我就建立了这两个目录。其余参考绿色部分,前面已经建立好了。然后制作映象,烧写到目标板上,通过standalone模式启动。

[root@listentec /usr]#vsftpd &
[root@listentec /usr]#pgrep vsftpd
775

   在host上测试:

[root@lqm ~]# ftp 192.168.1.100
Connected to 192.168.1.100.
220 (vsFTPd 2.0.6)
530 Please login with USER and PASS.
530 Please login with USER and PASS.
KERBEROS_V4 rejected as an authentication type
Name (192.168.1.100:armlinux): anonymous
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls
227 Entering Passive Mode (192,168,1,100,201,91)
150 Here comes the directory listing.
drwxr-xr-x 2 0 0 0 Mar 22 08:24 pub
226 Directory send OK.
ftp>

[root@lqm ~]# ftp 192.168.1.100
Connected to 192.168.1.100.
220 (vsFTPd 2.0.6)
530 Please login with USER and PASS.
530 Please login with USER and PASS.
KERBEROS_V4 rejected as an authentication type
Name (192.168.1.100:armlinux): armlinux
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> cd /var
250 Directory successfully changed.
ftp> ls
227 Entering Passive Mode (192,168,1,100,50,108)
150 Here comes the directory listing.
drwxr-xr-x 3 0 0 0 Mar 22 08:24 ftp
drwxr-xr-x 2 0 0 0 Mar 19 07:57 lock
drwxr-xr-x 3 0 0 0 Mar 22 08:35 log
drwxr-xr-x 2 0 0 0 Mar 19 07:57 run
drwxr-xr-x 2 0 0 0 Mar 20 00:03 spool
drwxr-xr-t 2 0 0 0 Mar 19 07:57 tmp
drwxrwxrwx 4 0 0 0 Mar 19 09:23 www
226 Directory send OK.
ftp>

   可见成功了。当然,这只是初步工作。对配置部分还很陌生,安全设置也没有。而这些工作才是最为复杂的,要想在开发板上把ftp server弄安全稳定也不容易。不过得慢慢来。


附:开发板rootfs当前已经具备的功能示例

1、ping功能

[root@listentec ~]#ping sdu.edu.cn
PING sdu.edu.cn (202.194.15.6): 56 data bytes
64 bytes from 202.194.15.6: seq=0 ttl=58 time=25.015 ms
64 bytes from 202.194.15.6: seq=1 ttl=58 time=24.863 ms
64 bytes from 202.194.15.6: seq=2 ttl=58 time=27.460 ms
--- sdu.edu.cn ping statistics ---
3 packets transmitted, 3 packets received, 0% packet loss
round-trip min/avg/max = 24.863/25.779/27.460 ms

    ping域名、内网外网ip,都没有问题。

2、nfs client

NFS client is on now and the mounted point is /mnt/nfs

    看看启动信息就可以了。

3、telnet client and server

[root@listentec ~]#telnet 192.168.1.100
Entering character mode
Escape character is '^]'.
listentec login: root
login[792]: root login on `pts/0

4、时间校正

22 Mar 16:34:12 ntpdate[722]: step time server 210.72.145.44 offset 1206174847.300081 sec

5、df -h

[root@listentec ~]#df -h
Filesystem Size Used Available Use% Mounted on
rootfs 3.0M 2.1M 884.0k 71% /
/dev/root 3.0M 2.1M 884.0k 71% /
mdev 14.7M 0 14.7M 0% /dev
192.168.1.106:/home/armlinux/nfs
                         11.2G 5.1G 5.5G 48% /mnt/nfs

6、busybox ftpget ftpput

   这个没有什么问题,只不过我觉得不太方便。还是要移植一个比较好用的ftp client。待完成。

7、boa server

   这个是按照Tekkaman Nin的笔记来的。测试没有问题,比较稳定。后续功能可以逐步开发。

8、tinylogin

   也算是一个功能吧。不过现在还有个bug,就是在输入用户名的时候,退格键不起作用,需要解决。

9、ftp server

   现在移植好了vsftpd。估计抽时间研究一下配置问题。

   后续工作还有很多。希望把大部分可能用到的功能都做一下,选出最优方案定型。这样从bootloader,到kernel,到fs,就都做稳定了。需要什么功能,只需要根据情况再次裁减rootfs和kernel就可以了。也算是自己的工作完成了吧,争取4月底完成所有的工作和整理文档。

本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u3/110004/showart_2150573.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP