linux ftp客户端移植,移植vsftpd FTP服务器到ARM-Linux系统

移植vsftpd FTP服务器到ARM-Linux系统

一、下载并解压

vsftpd 官方网站:

使用当前的最新版本:vsftpd-2.0.6。

[tekkamanninja@Tekkaman-Ninja tarball_for_ftp]$ tar xjvf vsftpd-2.0.6.tar.bz2

[tekkamanninja@Tekkaman-Ninja tarball_for_ftp]$ cd vsftpd-2.0.6

二、交叉编译(for ARM-Linux)

需要修改两处地方。

第一处是Makefile的交叉编译器路径:

[tekkamanninja@Tekkaman-Ninja vsftpd-2.0.6]$ kwrite Makefile

# Makefile for systems with GNU tools

CC     =    /home/tekkamanninja/working/gcc4.1.1/gcc-4.1.1-glibc-2.3.2/arm-9tdmi-linux-gnu/bin/arm-9tdmi-linux-gnu-gcc

第二处是软件源码根目录下的脚本vsf_findlibs.sh。这是因为libcap库的问题。上一次移植我没有成功就是卡在了这里!!网上的修改都是更改到交叉编译器的lib文件夹下,发现即使在lib文件夹下面没有,也不影响。我在网上的提问与那篇文章的作者回复如下:

# re: 嵌入式FTP服务器的移植

您好!我正在移植基于ARM 的Linux下的ftp服务程序。尚未成功,看了您的文章,很受启发。在实际操作中,libcap库的移植出了问题,希望能得到您的帮助。提供一下libcap库的移植文档,谢谢!

E-mail:tekkamanninja@163.com

QQ:78027228

tekkamanninja 评论于 2008-02-20 08:33  回复  更多评论

# re: 嵌入式FTP服务器的移植

不知道你们怎么都要这个libcap库,按照步骤做就可以了,我也没有这个库文件

zz 评论于 2008-02-25 09:14  回复  更多评论

根据CalmArrow( http://blog.chinaunix.net/u/21948/showart.php?id=504050)判断,这个库是没有必要的,直接把这两行注释就可以了。

[tekkamanninja@Tekkaman-Ninja vsftpd-2.0.6]$ kwrite vsf_findlibs.sh

# Look for libcap (capabilities)

# locate_library /lib/libcap.so.1 && echo "/lib/libcap.so.1";

# locate_library /usr/lib/libcap.so && echo "-lcap";

上一次我居然没有试试就放弃了,值得检讨。后来CalmArrow 发现了这个问题,通知了我。我晕,我怎么没想到!!在这里感谢CalmArrow ,并对他的钻研和实验精神表示敬佩!

不过我觉得不能因为libcap库不需要就不去交叉编译他(也许以后需要),libcap库的交叉编译(需要一定技巧)可以锻炼一下ARM-Linux的交叉编译技能,有空一定试试!

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

[tekkamanninja@Tekkaman-Ninja vsftpd-2.0.6]$ make

三、处理动态库依赖及其相应的配置文件

(1)因为是动态编译,查看相应的动态库。

[tekkamanninja@Tekkaman-Ninja vsftpd-2.0.6]$ file vsftpd

vsftpd: ELF 32-bit LSB executable, ARM, version 1, dynamically linked (uses shared libs), for GNU/Linux 2.4.3, stripped

[tekkamanninja@Tekkaman-Ninja vsftpd-2.0.6]$ /home/tekkamanninja/working/gcc4.1.1/gcc-4.1.1-glibc-2.3.2/arm-9tdmi-linux-gnu/bin/arm-9tdmi-linux-gnu-readelf -d vsftpd

Dynamic section at offset 0x130e4 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]

0x0000000c (INIT) 0x97b4

0x0000000d (FINI) 0x17efc

0x00000004 (HASH) 0x8128

0x00000005 (STRTAB) 0x8d78

0x00000006 (SYMTAB) 0x8548

0x0000000a (STRSZ) 1245 (bytes)

0x0000000b (SYMENT) 16 (bytes)

0x00000015 (DEBUG) 0x0

0x00000003 (PLTGOT) 0x231d4

0x00000002 (PLTRELSZ) 952 (bytes)

0x00000014 (PLTREL) REL

0x00000017 (JMPREL) 0x93fc

0x00000011 (REL) 0x93cc

0x00000012 (RELSZ) 48 (bytes)

0x00000013 (RELENT) 8 (bytes)

0x6ffffffe (VERNEED) 0x935c

0x6fffffff (VERNEEDNUM) 2

0x6ffffff0 (VERSYM) 0x9256

0x00000000 (NULL) 0x0

[tekkamanninja@Tekkaman-Ninja vsftpd-2.0.6]$

把需要的动态库文件(我是从/home/tekkamanninja/working/gcc4.1.1/gcc-4.1.1-glibc-2.3.2/arm-9tdmi-linux-gnu/arm-9tdmi-linux-gnu/lib中)拷贝到rootfs的/lib下。

(2)把vsftpd拷贝到rootfs中。

我的是拷贝到了/usr/sbin下。

[tekkamanninja@Tekkaman-Ninja vsftpd-2.0.6]$ cp vsftpd /home/tekkamanninja/working/nfs/rootfs/usr/sbin/

(3)配置文件vsftpd.conf。

我是直接将vsftpd-2.0.6/vsftpd.conf拷贝到了rootfs的 /etc中

[tekkamanninja@Tekkaman-Ninja vsftpd-2.0.6]$ cp vsftpd.conf /home/tekkamanninja/working/nfs/rootfs/etc/

然后我对配置文件进行了修改,实现本地和匿名的文件上传和下载。(暂不考虑安全问题,只为实现其基本功能),具体修改不再赘述,提供我的vsftpd.conf文件,你可以直接使用!

rar.gif

文件:

vsftpd.rar

大小:

1KB

下载:

(4)为vsftpd建创建用户。

首先有一个本地用户,这样可以通过本地用户进行访问;其次要匿名用户,需要ftp用户(具体用户明和配置文件有关);至于nobody用户我没有创建照样可用。

[root@~]#adduser -g user ftpChanging password for ftp

Enter the new password (minimum of 5, maximum of 8 characters)

Please use a combination of upper and lower case letters and numbers.

Enter new password:

Bad password: too short.

Warning: weak password (continuing).

Re-enter new password:

passwd[785]: password for `ftp' changed by user `root'

Password changed.

(5)创建必须的目录:/usr/share/empty,否则在访问时会出现:500 OOPS: vsftpd: not found: directory given in 'secure_chroot_dir':/usr/share/empty

这个与的配置选项相关的。因为默认情况下 secure_chroot_dir为/usr/share/empty。在我的 vsftpd.conf文件中,并没有配置secure_chroot_dir。

[root@~]#mkdir /usr/share

[root@~]#mkdir /usr/share/empty

经过以上配置,用本地和匿名登录都成功了,本地和匿名传输文件也成功,(与的配置选项相关)。这只是初步工作,实现其基本功能。对于配置问题(如安全设置)请参考vstfpd的使用和配置的资料,这里不再赘述。给出以下连接方便学习:

《vsFTPd 服务器初学者指南(欢迎大家参与补充)》

《VSFTPD 服务器安装配置》

这里只介绍我遇到的一个问题(其它问题看以上两个资料或google):

当我一开始用匿名登录时,会出现:500 OOPS: vsftpd: refusing to run with writable anonymous root

解决方法:

但注意:使用我的配置方法:ftp用户的家目录(也就是匿名登录的根目录)并非/var/ftp,而是/home/ftp

[root@~]#cat /etc/passwd

root:x:0:0:root:/root:/bin/sh

httpd:x:500:500:user:/home/httpd:/bin/sh

boa:x:501:501:user:/home/boa:/bin/sh

lighttpd:x:502:502:user:/home/lighttpd:/bin/sh

ftp:x:503:503:user:/home/ftp:/bin/sh

所以修正这个错误,应该用下面的办法:[root@localhost ~]# chown root:root /home/ftp

[root@localhost ~]# chmod 755 /home/ftp

以下是我在fedora 7下用gFTP时的截图:一张是root登录,一张是匿名登录。rar.gif

文件:

截图.rar

大小:

240KB

下载:

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值