ftp服务器配置

http://blog.chinaunix.net/u/21948/showart_504050.html

 

  据我了解,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服务器,Authentication,library,login,makefile)