vsftp之必要的安装目录与交叉编译问题


高版本为什么编译不成功:linux

在版本比较高的vsftp源码中的Makefile中可能会有这么一句话:ui

LDFLAGS = -fPIE -pie -Wl,-z,relro -Wl,-z,nowspa

如可此时交叉编译,虽然能够编译成功,但 file vsftpd 会发现,vsftpd是  shared object,而不是咱们想要的executableip

scw@scw-VB:~/buildroot-2017.02.3/dl/vsftpd-3.0.3$ file vsftpd
vsftpd: ELF 32-bit LSB shared object, ARM, EABI5 version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux.so.3, for GNU/Linux 2.6.38, stripped源码

通过试验发现,把 ( LDFLAGS = -fPIE -pie -Wl,-z,relro -Wl,-z,now  )中的  -pie 去掉就能够编译出咱们想要的可执行文件it

scw@scw-VB:~/buildroot-2017.02.3/dl/vsftpd-3.0.3$ file vsftpd
vsftpd: ELF 32-bit LSB executable, ARM, EABI5 version 1 (SYSV), statically linked, for GNU/Linux 2.6.38, stripped
io


(pie  :position independent executables)是安卓中的一种保护机制,而咱们如今的系统时arm板Linux,因此不须要 -pie编译

同理 :之后再移植其余软件时,如果发现此类问题,能够采起此种处理机制table




在vsftp源码中:登录

1:vsf_findlibs.sh 文件是vsftp安装包所用到的库路径指定文件

2:builddefs.h文件定义了一些必要的宏定义

3:INSTALL文件列举了必要的安装配置步骤



Step 1) Build vsftpd

Step 2) Satisfy vsftpd pre-requisites(必要步骤)

2a)  useradd nobody  添加nobody用户

2b)  mkdir /usr/share/empty/    建立一个目录

2c)   mkdir /var/ftp/

useradd -d /var/ftp ftp(建立匿名用户FTP)

chown root.root   /var/ftp

chmod og-w /var/ftp

Step 3) Install vsftpd config file(可手动复制)


在用FTP用户登陆时,发现ls 没法显示FTP下的内容,虽然FTP用户默认的根目录是、var/tfp,但依然须要在配置文件中手动添加这么一句:anon_root=/var/ftp,而后在ls 就能够显示、var/ftp下的目录或文件。

注:在使用FTP传输数据是必定要注意所要操做的目录的权限问题。