嵌入式 移植FTP到ARM2410

2019-07-12 16:21发布

1.       下载源码交叉编译 vsftpd 官方网站:http://vsftpd.beasts.org/ 目前最新的是2.1.0 修改Makefile中编译器的CC宏, CC = arm-linux-gcc 之后注释掉脚本vsf_findlibs.sh中关于libcap语句, # Look for libcap (capabilities) #if locate_library /lib/libcap.so.1; then #  echo "/lib/libcap.so.1"; #else #  locate_library /usr/lib/libcap.so && echo "-lcap"; #  locate_library /lib/libcap.so && echo "-lcap"; #fi 最后make即可 2.       修改相关配置文件 用linux-gnu-readelf -d vsftpd 命令查看程序所需库文件,在自己的交叉编译工具的库中找到相关库后将其放入根文件系统源码的lib目录下。 把vsftpd拷贝到根文件系统usr/sbin下。 修改vsftpd.conf配置文件(此文件的配置很重要)。 我是根据vsftpd源码下的vsftpd.conf文件修改的,添加了FTP用户及匿名用户访问读写权限(这里没有考虑安全问题)。 anonymous_enable=YES local_enable=YES write_enable=YES local_umask=022 anon_upload_enable=YES anon_mkdir_write_enable=YES dirmessage_enable=YES xferlog_enable=YES connect_from_port_20=YES chown_uploads=YES xferlog_file=/var/log/vsftpd.log listen=YES local_root=/ 之后将vsftpd.conf拷贝到根文件系统的etc下。 同时需要将用户管理配置文件也拷贝到etc下,它们分别是passwd、group、shadow。 Passwd内容 [root@vm-dev rootfs]# vi etc/passwd root::0:0:root:/root:/bin/bash bin:*:1:1:bin:/bin: daemon:*:2:2:daemon:/sbin: nobody:*:99:99:Nobody:/: ftp:x:14:50:FTP User:/var/ftp:/bin/bash 其中添加了ftp用户及其在开发板上的登陆目录 Group内容 [root@vm-dev rootfs]# vi etc/group root:x:0: bin:x:1: sys:x:2: kmem:x:3: tty:x:4: tape:x:5: daemon:x:6: floppy:x:7: disk:x:8: lp:x:9: dialout:x:10: audio:x:11: video:x:12: utmp:x:13: usb:x:14: cdrom:x:15: ftp:x:50: shadow文件可以不加进来 创建必须的目录empty,在文件系统的usr/share目录下,否则在访问时会出现: 500 OOPS: vsftpd: not found: directory given in 'secure_chroot_dir':/usr/share/empty 3.       重新制作文件系统下载到开发板上,并在开发板的/var/目录下建立ftp目录,且还需在ftp目录下建立匿名登陆的 pub目录,注意ftp的权限是 755而pub的权限是777。 4.       手动执行./vsftpd &就可以使用FTP服务了,可以匿名登陆或使用ftp用户密码是ftp。 5.       此间还可能遇到很多不同的问题, google 一下所有的问题都可以解决。 6.       也可以开机自启动FTP服务,修改相关文件系统中的配置文件即可。 修改etc/rc.d/rc.sysinit文件添加相关FTP目录 # by sprife if [ ! -d /root/system/var/ftp ] then         mkdir /root/system/var/ftp fi if [ ! -d /root/system/var/ftp/pub ] then         mkdir /root/system/var/ftp/pub         chmod 777 /root/system/var/ftp/pub/ fi # by sprife echo "Running vsftpd server." /usr/sbin/vsftpd & 即可上电启动FTP服务。 ftp的使用使得我们可以快速的上传到ftp所在服务器或者下载文件,对于嵌入式开发来说,ftp无疑使很好地选择,使得pc用户方便快捷的便可访问arm板的文件,下面我就讲述一下如何在arm上搭建ftp服务器:
ftp移植(默认端口号21 一、下载软件包:vsftpd-2.1.2.tar.gz,解压(tar –zxvf vsftpd-2.1.2.tar.gz) 二、交叉编译: 1、  修改Makefile:修改CC=gccCC=arm-linux-gcc 2、  修改vsf_findlibs.sh文件,去掉#Look for libcap部分,因为源码版本的不同,语句可能不同,2.1.2版本去掉的代码如下: # Look for libcap (capabilities) #if locate_library /lib/libcap.so.1; then #  echo "/lib/libcap.so.1"; #elif locate_library /lib/libcap.so.2; then #  echo "/lib/libcap.so.2"; #else #  locate_library /usr/lib/libcap.so && echo "-lcap"; #  locate_library /lib/libcap.so && echo "-lcap"; #fi     3#make,之后会生成几个可执行文件其中vsftpd就是我们需要的查看vsftpd的类型        #file vsftpd        #arm-linux-readelf d vsftpd查看vsftpd文件的依赖库        拷贝相应库到板子的/usr/lib目录下此步骤可省略不添加库时运行也正常 三、文件下载和配置: 1、将vsftpd拷贝到/usr/sbin目录下 2、    拷贝vsftpd.conf到/etc目录下,修改配置如下: anonymous_enable=YES //允许匿名用户 local_enable=YES  //本地访问 write_enable=YES  //可修改 local_umask=077   //创建的文件权限 anon_upload_enable=YES  //允许匿名用户上传 anon_mkdir_write_enable=YES  //可创建文件夹和修改文件夹内的文件 dirmessage_enable=YES xferlog_enable=YES connect_from_port_20=YES xferlog_std_format=YES pam_service_name=vsftpd   //服务名称   ftp_username=ftp no_anon_password=YES   //匿名用户登录不需要密码 anon_root=/home/ftp   //匿名用户根目录 anon_world_readable_only=YES tcp_wrappers=NO 3、创建用户,可根据需要创建和设置用户权限 4、    创建文件夹:                         i.              mkdir /var/ftp                        ii.              mkdir /var/ftp/pub                     iii.              chmod 777 /var/ftp/pub 注:所有的都必须跟/etc/vsftpd.conf中的完全一致才行 5、与配置相关的: /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两个文件外,其他文件的需要具体看主配置文件的配置
6、用户设置:一般只要刚启动root用户是可以登录的,而且权限很高,如果向增加用户,可以用如下命令:a #dduser G ftp h/根目录 用户名 #passwd 用户名 #chown 用户名.ftp /目录 R #chmod 755 /目录 R         之后重启vsftpd服务,就可以用新的用户名登录了 7、测试的时候一定要保证板子是能够ping通的! 8、具体配置:Vsftpd.conf配置: 
anonymous_enable=YES
   
#允许匿名访问
local_enable=YES
       
#允许本地用户访问(/etc/passwd中的用户)
write_enable=YES
#允许写入权限,包括修改,删除
local_umask=022
#本地用户文件上传后的权限是-rw-r-r
#anon_umask=077
#匿名用户上传后权限是-rw----
anon_world_readable_only=YES
#允许匿名用户浏览,下载文件
anon_upload_enable=YES
#允许匿名用户上传
#anon_mkdir_write_enable=YES
#允许匿名用户建立目录
anon_other_write_enable=YES
#允许匿名用户具有建立目录,上传之外的权限,如重命名,删除
dirmessage_enable=YES
#当使用者转换目录,则会显示该目录下的.message信息
xferlog_enable=YES
#记录s使用者所有上传下载信息
xferlog_file=/var/log/vsftpd.log
#将上传下载信息记录到/var/log/vsftpd.log中
connect_from_port_20=YES
#确保ftp-datad
 数据传送使用port 20
idle_session_timeout=600
#如果使用者600秒没有动作,则踢出

chroot_list_enable=YES
#限制使用者不能离开家目录,例如blue登陆后位于/home/blue下,设置该选项后,他不可以转到/home/blue的上层目录,如/bin,
 /usr,/opt...etc。
chroot_list_file=/etc/vsftpd.chroot_list
#与上条同时使用,设置限制使用者的存放文件为/etc/vsftpd.chroot_list
 
#建立文本文件/etc/vsftpd.chroot_list,写入要限制的用户,一行一个。
#如果希望限制所有用户,则可以设置chroot_local_user=YES
 代替上面两行
tcp_wrappers=YES
#支持tcp_wrappers,限制访问(/etc/hosts.allow,/etc/hosts.deny)
listen=YES
#使用standalone启动vsftpd,而不是super daemon(xinetd)控制它 (vsftpd推荐使用standalone方式)
listen_port=21
#ftp监听端口
userlist_enable=YES
userlist_deny=YES
userlist_file=/etc/vsftpd.user_list
#以上三条设定不允许登陆的用户,用户列表存放在/etc/vsftpd.user_list中,一行一个帐号
pam_service_name=vsftpd
#PAM所 使用的名称.同userlist_*一样限制用户登陆,不同的是userlist_*在进行密码验证之前拒绝用户登陆,pam是在密码验证之后拒绝登陆. (提示密码错误)
 用户列表默认存放在/etc/ftpusers中,一行一个. (可通过/etc/pam.d/vsftpd重定向用户列表存放文件)
#获得
 /etc/pam.d/vsftpd:
#[root@LFS
 vsftpd-2.0.1]#cp RedHat/vsftpd.pam /etc/pam.d/vsftpd

max_clients=100
#最大用户在线数量
max_per_ip=2
#每ip最大线程
anon_max_rate=30000
#匿名用户最大传输速度
  单位: bytes/秒
local_max_rate=50000
#本地用户最大传输速度
  单位:bytes/秒
user_config_dir=/etc/userconf
#个别用户配置目录(用来设定特殊帐号),例如我想让blue这个用户的传输速度是100KB
就可以在/etc/userconf/下创建文本文件blue(与用户名相同),加入local_max_rate=100000即可
anon_root=/var/ftp
 
#设定匿名用户登陆后所在的目录
local_root=/var/local_user
 
#设定所有本地用户登陆后的目录,如不设置此项,则本地用户登陆后位于各自家目录下。
use_localtime=YES
#使用本地时间而不是GMT

nopriv_user=vsftpd
#设定服务执行者为vsftpd,默认使用的是nobody,vsftpd推荐使用一个权限很低的用户.这里用vsftpd代替nobody,创建
 vsftpd用户:
  9、创建ftp虚拟用户: a)   安装db_load:apt-get install db4.6-util
FTP服务器
一,FTP概述
1,概念
File Transfer Protocol文件传输协议
2,传输模式
a,主动模式:由服务器主动连接客户端建立数据链路
b,被动模式:FTP服务器等待客户端建立数据链路
3,使用端口
21 用于与客户机建立命令链路
20 在主动模式下服务器使用20向客户机建立数据链路
4,常用的FTP软件
服务器
windows: IIS Serv-U
linux:  wu-ftpd proftpd vsftpd(RHEL默认)
客户机
windows: cuteFTP FileZilla
linux:  gftp
二,配置vsftpd(very secure非常安全)
1,安装
vsftpd
主配置文件
/etc/vsftpd/vsftpd.conf  vsftpd服务器的主配置文件
/etc/vsftpd.ftpusers         黑名单
/etc/vsftpd.user_list  白/黑名单
当userlist_deny=YES被禁止
当userlist_deny=NO被允许
/var/ftp/ 默认共享出来的目录   
匿名用户登陆用
ftp anonymous
2,配置
a,禁止匿名用户访问
 把anonymous_enable=YES改为anonymous_enable=NO
b,允许匿名用户上传
 把anon_upload_enable=YES
     anon_mkdir_write_enable=YES
 在把上传目录的权限+上
 如你想让上传的匿名用户修改文件名的话在加上
 anon_other_write_enable=YES
c,禁锢普通用户在家目录
 chroot_local_user=YES
d,自定义用户访问文件夹
 local_root=路径 系统用户
 anon_root=路径 匿名用户
e,max_per_ip=每个客户机最大连接数
  local_max_rate=50000  本地用户下载50k
  anon_max_rate=30000 匿名用户下载30k
f,连接服务器的欢迎信息
 ftpd_banner=welcome to linux FTP server~!
 进入每个目录提示信息
 在每个目录下建立.message
g,虚拟用户
  a,建立虚拟用户口令库文件
#cat logins.txt 
mike
123
john
321
口令库文件中奇数行设置用户名,偶数行设置口令 
  b,生成vsftpd的认证文件(在第3张光盘中安装)
#rpm -ivh db4-utils*   
#db_load -T -t hash -f /root/logins.txt /etc/vsftpd/vsftpd_login.db  生成认证文件
  c, 设置认证文件只对用户可读可写 
# chmod 600 /etc/vsftpd/vsftpd_login.db 
  d,建立虚拟用户所需的PAM配置文件 
手工建立vsftpd.vu文件 在这里需要注意 小心写错了,最好看看书上面的
# cat /etc/pam.d/vsftpd.vu
auth required /lib/security/pam_userdb.so  db=/etc/vsftpd/vsftpd_login
account required  /lib/security/pam_userdb.so db=/etc/vsftpd/vsftpd_login 
e,建立虚拟用户及要访问的目录并设置相应的权限 
建立所有FTP虚拟用户帐号使用的系统用户帐号,并设置该帐号宿主目录的权限
# useradd -d /home/ftpsite virtual
# chmod 700 /home/ftpsite
f,设置vsftpd.conf配置文件
在配置文件中添加虚拟用户的配置内容
guest_enable=YES
guest_username=virtual
pam_service_name=vsftpd.vu 
重新启动vsftpd服务程序 
g,对vsftpd.conf文件修改后需要重新启动vsftpd服务程序
# service vsftpd restart
现在就应该可以用虚拟帐号登陆了,但是什么权限都没的,只能登陆。。。 4,对虚拟用户设置不同的权限
设置主配置文件 
在vsftpd.conf文件中添加用户配置文件目录设置
user_config_dir=/etc/vsftpd_user_conf 
建立用户配置文件目录
使用mkdir命令建立用户配置文件目录
# mkdir /etc/vsftpd_user_conf 
为虚拟用户建立单独的配置文件
用户配置文件名称与用户名相同
/etc/vsftpd_user_conf/mike 
/etc/vsftpd_user_conf/john
里面的内容如下: 
anon_world_readable_only=NO    表示用户可以浏览FTP目录和下载文件
anon_upload_enable=YES        表示用户可以上传文件 
anon_mkdir_write_enable=YES    表示用户具有建立和删除目录的权限
anon_other_write_enable=YES    表示用户具有文件改名和删除文件的权限
没有的配置项默认按照vsftpd.conf的配置内容 
5,FTP服务器的资源限制 这可以在vsftpd.conf中添加 这我就不演示了 大家看看  知道就可以了 
在企业中用的很多的
  max_clients=100      允许最大的客户端连接数
  max_per_ip=5        同一IP最大客户端的连接数
  local_max_rate=5000000       设置本地用户最大传输数率
  anon_max_rate=2000000       匿名用户最大的传输数率
三,启动
#service vsftpd restart
/etc/init.d/vsftpd restart
四,常用ftp命令
? ! Lcd pwd get put mget mput