如何移植vsftpd到hi3716m v310上?

一、移植方法

1,下载vsftpd源码,vsftpd-2.1.2.tar.gz。

2,解压后,修改Makefile文件。有2点要修改,其一是CC=gcc改为CC=arm-hisiv200-linux-gcc。

其二是LIBS=`./vsf_findlibs.sh` 改为LIBS=`./vsf_findlibs.sh` -lcrypt

3,make


二、使用方法

1,在hi3716系统里创建nobody用户,adduser -D nobody

2,将vsftpd和vsftpd.conf放到某个文件夹下,启动脚本里加上诸如./vsftpd ./vsftpd.conf &。系统重启生效。

3,在自己电脑客户端可以使用FileZilla之类的软件登陆。


三、配置文件vsftpd.conf说明

1,anonymous_enable=NO不允许匿名用户登陆。

2,local_enable=YES允许本地用户登陆。

3,local_root=/app本地用户登陆访问目录。

4,write_enable=NO登陆用户没有写权限。

5,xferlog_enable=NO不允许vsftpd记录日志


四、相关知识充电

1,匿名用户和本地用户的区别,本地用户就是系统存在的用户,比如root。匿名用户是anonymous,可以让系统之外的用户登陆访问FTP资源。

2,如果本地用户密码为空,也可以登陆。

3,如果3716板子内flash空间容量不多,关闭vsftpd记录日志功能,是很有必要的。

4,vsftpd实现让客户端登陆访问读取资源的原理是建立2个socket,一个是信令socket,端口是21,一个是数据socket。

5,如果你移植的vsftpd版本比较高,比如3.0.2。那么在完成上述步骤后,你会发现使用客户端登陆,能够建立信令socket连接,但是在准备获取目录时,会提示500 OOPS:socket。这是因为高版本vsftpd建立数据socket失败,原因是建立前会舍弃当前有root权限的用户,改为别的用户去执行(猜测是nobody)。我们知道,在嵌入式系统里,如果没有root权限,那么socket是建立不成的。解决办法,要么修改vsftpd源码,位置在于secutil.c,关注vsf_sysutil_setgid和vsf_sysutil_setuid这块;要么换低版本vsftpd。我还看到有人改linux内核的,让普通用户也能建立socket,汗一个。


猜你喜欢

转载自blog.csdn.net/yuhengyue/article/details/79296126