嵌入式FTP服务器的移植与配置(1):VSFTPD-2.0.6移植

    据我了解,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月底完成所有的工作和整理文档。

 

 

上周做了嵌入式FTP服务器的移植工作,现在整理成一篇文档
开始移植pureftpd服务器没有成功,配置交叉编译不行,参考了篇移植文档,还是不行,放弃
移植vsftp服务器
1、从网上取得目前最新2.0.5版本:vsftpd-2.0.5.tar.gz

2、解压vsftpd-2.0.5.tar.gz,然后进入该目录:cdvsftpd-2.0.5

3、makeCC=arm-uclibc-linux-gcc,会出现/lib/libcap.so.1: could not read symbols编译错误,找不到libcap.so.1这个库文件

4、修改vsftpd-2.0.5目录下vsf_findlibs.sh文件,屏蔽掉“locate_library/lib/libcap.so.1 && echo "/lib/libcap.so.1";”
   在下面加上“locate_library/opt/hisilicon/toolchains/arm-uclibc-linux-soft/arm-uclibc-linux/lib/libcap.so.1&& echo "/lib/libcap.so.1";”

5、编译成功后,然后makeinstall,默认是安装在/usr/local/sbin/目录下,如果需要更改到自己的目录下,修改Makefile文件,
   把install:下面/usr/local/sbin改成你自己认为的安装目录

6、安装成功后,在/usr/local/sbin/目录下会生成vsftpd可执行文件,为了减小vsftpd的大小,运行一下arm-uclibc-linux-stripvsftpd

7、把vsftpd下载到板子上/usr/local/sbin或者/usr/sbin目录下

8、在vsftpd-2.0.5目录下有一个vsftpd.conf的默认配置文件,修改此默认配置文件,把此配置文件下载到板子/etc目录下
   vsftpd提供匿名用户、本地用户、虚拟用户,具体设置可参考提供的vsftpd.conf的配置文件,在每个选项上面都已做了说明

9、在板子上创建必要的帐号、目录:
  #addusernobody          //VSFTPD默认配置中需要“nobody”用户。可能系统已经存在此帐号,那就不用建立
  #mkdir /usr/share/empty  //VSFTPD默认配置中需要“/usr/share/empty”目录。可能系统已经存在此目录,那就不用建立
  
  #mkdir/var/ftp          //VSFTPD提供匿名FTP服务时,需要“ftp”用户和一个有效的匿名目录。可能系统已经存在此目录,那就不用建立
  #adduser -D /var/ftp ftp  //可能你的系统已经存在此帐号,那就不用建立
  
  #chown root:root /var/ftp
  #chmod og-w /var/ftp
10、创建一个本地用户,创建好之后就可以用zz登录
    #adduser zz
    #passwd 123456
11、添加一个只能从ftp登录服务器,而不能从本地登录的用户
    #adduser –g ftp –s /sbin/nologin ftpuser
    #passwd 123456
12、VSFTPD的文件结构,主要包括:
    /usr/sbin/vsftpd ---- VSFTPD的主程序(必需)
    /etc/rc.d/init.d/vsftpd ---- 启动脚本
    /etc/vsftpd/vsftpd.conf ---- 主配置文件(必需)
    /etc/pam.d/vsftpd ---- PAM认证文件
    /etc/vsftpd/vsftpd.ftpusers ---- 禁止使用VSFTPD的用户列表文件
    /etc/vsftpd/vsftpd.user_list ---- 禁止或允许使用VSFTPD的用户列表文件
    /etc/vsftpd/userconf ------ 指定用户个人配置文件所在的目录
    /var/ftp ---- 匿名用户主目录
    /var/ftp/pub---- 匿名用户的下载目录
    /var/log/vsftpd.log ------- 日志文件
    除vsftpd、vsftpd.conf两个文件外,其他文件的需要具体看主配置文件的配置
13、运行vsftpd程序,然后在PC机启用FTP客户端软件,就可以从板子上下载文件

具体的配置文件没有贴上

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值