Remote System Explorer之FTP移植(vsftpd)

2019-07-13 04:05发布

Remote System Explorer之FTP移植           openssh自带Sftp Server,但移植到开发板上时无法启动,所以只能移植其他的FTP服务器,经过一番搜索后确定使用vsftpd。          vsftpd是一款在Linux发行版中最受推崇的FTP服务器程序,特点是小巧轻快,安全易用。它还可以移植到嵌入式Linux中,我们可以把开发板当作一个FTP服务器。   编译vsftpd程序
1. 获得源码包:vsftpd-2.1.2.tar.gz
2. 解压,进入源码目录:
          tar xzvf vsftpd-2.1.2.tar.gz
          cd vsftpd-2.1.2
3. 修改Makefile,指定交叉编译器:
          CC = arm-linux-gcc
4. make
          编译时会出现错误,跟libcap.so有关
          修改vsf_findlibs.sh:
          45-53行注释掉:
修改配置文件vsftpd.conf
需要用到哪一项,就把这一项前面的注释‘#’去掉,这里给出一个示例:
anonymous_enable=YES
no_anon_password=YES
local_enable=YES
write_enable=YES
local_umask=022
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
chown_uploads=YES
xferlog_file=/var/log/vsftpd.log
xferlog_std_format=YES
async_abor_enable=YES
ascii_upload_enable=YES
ascii_download_enable=YES
ftpd_banner=Welcome to blah FTP service.
ls_recurse_enable=YES
listen=YES
listen_port=21
把修改后的vsftpd.conf文件放到根文件系统的/etc/vsftpd目录下,否则运行里会出错:500 OOPS vsftpd: cannot open config
创建必要的帐号、目录
1. 建立FTP目录:
    mkdir -p /var/ftp/pub
    因为ftp目录不能开启所有权限,所以建一个pub目录加上所有权限,用来传输文件
    mkdir -p /usr/share/empty
    程序运行所用到的目录
2. 改变目录权限
    chown root:root /var/ftp
    chmod 755 /var/ftp
    cd /var/ftp
    chmod 777 pub
3. 添加帐号(如果系统中有,就不用添加)
    useradd nobody
    useradd -d /var/ftp ftp
在开发板上运行vsftpd
把制作好的文件系统下载到开发板上,在后台运行程序:
vsftpd /etc/vsftpd/vsftpd.conf&
也可以把它写入启动脚本,vsftpd后面的参数就是要使用的配置文件
注意:如果以vsftpd  &这种方式来启动vsftpd ,vsftpd 使用的是默认配置文件,而不是/etc/vsftpd/vsftpd.conf,切记!
程序运行后可能出会现错误:
500 OOPS: could not bind listening IPv4 socket
解决方法:
1. 复制vsftpd源码目录下的xinetd.d文件夹到文件系统/etc目录下,里面有一个文件vsftpd,修改其内容:disable = yes。
2. 可能是已经启动了vsftpd,端口已被占用,再次启动vsftpd就会报错,可以先杀死vsftpd进程,再启动。
连接 之后便可在DS-5中创建FTP连接。   附上openssh的编译过程,今后会一直留心openssh Sftp Server的移植或其他Sftp Server的移植。 libz前面已经编译过了,下边列出openssl和openssh的编译过程。  编译openssl: 
       tar zxvf openssl-1.0.0.tar.gz 
       cd openssl-1.0.0 
      ./Configure --prefix=~/sftp/pack/openssl os/compiler:/usr/local/arm/3.4.1/bin/arm-linux-gcc
       make;make install
编译openssh: 
      tar zxvf openssh-5.3p1.tar.gz
      cd openssh-5.3p1/ 
      ./configure --host=arm-linux --prefix=/home/phil/sftp/pack/openssh --disable-strip --with-libs --with-zlib=/home/phil/sftp/pack/zlib --with-ssl-dir=/home/phil/sftp/pack/openssl --disable-etc-default-login CC=/usr/local/arm/3.4.1/bin/arm-linux-gcc AR=/usr/local/arm/3.4.1/bin/arm-linux-ar 
     make
     不要make install
 
注意:1)因为openssh链接的是zlib动态库,所以编译zlib时要加--shared
 
          2)--with-zlib必须用绝对路径,--prefix有的可以用~,但openssh要求--prefix必须用绝对路径
安装    
 
    (1) 将 openssh-5.5p1目录下的 sshd 拷贝到 目标板的/usr/sbin目录下
 
    (2) 再copy scp  sftp  ssh  ssh-add  ssh-agent  ssh-keygen  ssh-keyscan  到目标板/usr/local/bin目录下
 
            copy sftp-server  ssh-keysign    到/usr/local/libexec       
 
    (3) 在目标板下:
 
        mkdir -p /usr/local/etc/   
        然后将openssh下的sshd_config,ssh_config 拷贝到该目录下 
        mkdir -p /var/run; mkdir -p /var/empty/sshd  
        chmod 755 /var/empty  
   (4)在主机上:
         ssh-keygen -t rsa1 -f ssh_host_key -N ""
         ssh-keygen -t rsa -f ssh_host_rsa_key -N ""
         ssh-keygen -t dsa -f ssh_host_dsa_key -N ""
        将生存的 ssh_host_* 4个文件copy到目标板的 /usr/local/etc/目录下
     (5) 添加用户:
          将主机上 /etc/目下的 passwd, shadow, group 三个文件copy到目标板的 /etc目录下, 同时记得将passwd的最后 /bin/bash 该为 /bin/sh 
          其实可以删除不需要的一些用户。
          这一步也可以这样,在目标板的passwd中添加sshd用户:
          sshd:x:110:65534::/var/run/sshd:/usr/sbin/nologin
          在shadow中也添加对应的项就行了:
          sshd:!:14069:0:99999:7:::
测试
sshd在开发板上能启动,通过DS-5也能连接上,但:Sftp Server在开发板上启动时没有反应。通过PS查看进程,没有找到相应的进程,这个
问题先留着,慢慢解决!!! 欢迎讨论交流。