简介:在ARM板上搭建VSFTPD一直出现各种奇怪的问题,搜寻许多资料未果,现已解决,特此分享。
说明:以下的分享均是VSFTPD的初级用法以及我所遇到的问题,x86使用源码安装也可使用此方式进行安装。
硬件: ARM板(AM5728)
软件:vsftpd3.0.2
⑴ 官网获取:https://security.appspot.com/downloads/vsftpd-3.0.2.tar.gz
⑵ 自行百度获取
⑴ 解压
tar -vxf vsftpd-3.0.2.tar.gz
(2) 更改MAKEFILE
① 使用交叉编译
CC = gcc 更改为 CC = arm-linux-gnueabihf-gcc
② 添加支持
LDFLAGS = -fPIE -pie -Wl,-z,relro -Wl,-z,now后添加,-lcap.
以下为我修改后的MAKEFILE
# Makefile for systems with GNU tools
CC = arm-linux-gnueabihf-gcc
INSTALL = install
IFLAGS = -idirafter dummyinc
#CFLAGS = -g
CFLAGS = -O2 -fPIE -fstack-protector --param=ssp-buffer-size=4 \
-Wall -W -Wshadow -Werror -Wformat-security \
-D_FORTIFY_SOURCE=2 \
#-pedantic -Wconversion
LIBS = `./vsf_findlibs.sh`
LINK = -Wl,-s
LDFLAGS = -fPIE -pie -Wl,-z,relro -Wl,-z,now,-lcap
OBJS = main.o utility.o prelogin.o ftpcmdio.o postlogin.o privsock.o \
tunables.o ftpdataio.o secbuf.o ls.o \
postprivparent.o logging.o str.o netstr.o sysstr.o strlist.o \
banner.o filestr.o parseconf.o secutil.o \
ascii.o oneprocess.o twoprocess.o privops.o standalone.o hash.o \
tcpwrap.o ipaddrparse.o access.o features.o readwrite.o opts.o \
ssl.o sslslave.o ptracesandbox.o ftppolicy.o sysutil.o sysdeputil.o \
seccompsandbox.o
.c.o:
$(CC) -c $*.c $(CFLAGS) $(IFLAGS)
vsftpd: $(OBJS)
$(CC) -o vsftpd $(OBJS) $(LINK) $(LDFLAGS) $(LIBS)
install:
if [ -x /usr/local/sbin ]; then \
$(INSTALL) -m 755 vsftpd /usr/local/sbin/vsftpd; \
else \
$(INSTALL) -m 755 vsftpd /usr/sbin/vsftpd; fi
if [ -x /usr/local/man ]; then \
$(INSTALL) -m 644 vsftpd.8 /usr/local/man/man8/vsftpd.8; \
$(INSTALL) -m 644 vsftpd.conf.5 /usr/local/man/man5/vsftpd.conf.5; \
elif [ -x /usr/share/man ]; then \
$(INSTALL) -m 644 vsftpd.8 /usr/share/man/man8/vsftpd.8; \
$(INSTALL) -m 644 vsftpd.conf.5 /usr/share/man/man5/vsftpd.conf.5; \
else \
$(INSTALL) -m 644 vsftpd.8 /usr/man/man8/vsftpd.8; \
$(INSTALL) -m 644 vsftpd.conf.5 /usr/man/man5/vsftpd.conf.5; fi
if [ -x /etc/xinetd.d ]; then \
$(INSTALL) -m 644 xinetd.d/vsftpd /etc/xinetd.d/vsftpd; fi
clean:
rm -f *.o *.swp vsftpd
(3) 编译
make
(4) 移植到ARM板
① 将vsftpd拷贝到ARM板/usr/sbin/下
② 将vsftpd.conf拷贝到ARM板/etc/下
③ 将xinetd.d拷贝到ARM板/etc/下
④ 将RedHat/vsftpd.pam拷贝到ARM板/etc/pam.d/下
⑤ chmod +x /usr/sbin/vsftpd
(4) 修改vsftpd.conf配置文件及其他
① 修改配置文件
#anonymous_enable=YES
local_enable=YES
② FTP默认配置需要
adduser nobody
mkdir /usr/share/empty
③ 查看pam认证
若有以上带libpam.so.0字样,则
pam_service_name=vsftpd
auth required /lib/security/pam_listfile.so item=user sense=deny file=/etc/ftpusers onerr=succeed
auth required /lib/security/pam_shells.so
(5) 运行测试
/usr/sbin/vsftpd &
使用其他设备连接
ftp 192.168.2.224
(1) sysVinit启动方式
直接将/usr/sbin/vsftpd &
添加到/etc/rc.local
中
(2) service启动方式
以下给出vsftpd.service
[Unit]
Description=vsftpd FTP server
After=network.target
[Service]
Type=simple
ExecStart=/usr/sbin/vsftpd /etc/vsftpd.conf
ExecReload=/bin/kill -HUP $MAINPID
ExecStartPre=-/bin/mkdir -p /var/run/vsftpd/empty
[Install]
WantedBy=multi-user.target
① 将vsftpd.service拷贝到/usr/lib/systemd/system下
② systemctl enable vsftpd.service
具体怎么添加,自行百度。
(1) 登录FTP,提示500OPS: vsftpd: cannot locate user specified in ‘ftp_username’:ftp
解决办法:请仔细核对“修改vsftpd.conf配置文件及其他”中的修改"配置文件"小节。
(2) 登录FTP,提示500 OOPS: vsftpd: not found: directory given in ‘secure_chroot_dir’:/usr/share/empty错误
解决办法:请仔细核对“修改vsftpd.conf配置文件及其他"中的"FTP默认配置"需要小节。
(3) 登录FTP,提示 530 Login incorrect错误
解决办法:请仔细核对“修改vsftpd.conf配置文件及其他"中的查看"pam认证"小节。