嵌入式linux vsftp,基于vsftp的嵌入式设备受控访问方法

摘  要: 介绍了嵌入式Linux系统上vsftp的搭建和配置方法。给出了一种不使用Linux USB gadget driver API进行复杂的驱动开发仍能方便快捷地访问嵌入式设备SD卡等多种外设的统一方法,并介绍了利用用户权限来实现嵌入式设备受控访问的方法。

关键词: vsftp;嵌入式Linux;SD卡;受控访问

嵌入式设备与通用计算机相比,一般不具备像硬盘那样大容量的存储介质,大多使用闪存(NAND Flash)作为存储介质。对于采用Linux操作系统的嵌入式设备,64 MB的NAND Flash可以满足Bootloader、内核和文件系统的存放,如果使用过程中涉及大容量的数据读写,则多采用SD卡作为扩展存储介质。这里的SD卡是指普通SD卡、MiniSD卡和MicroSD卡三种类型的存储卡。对SD卡上的数据进行访问一般有两种解决方法:(1)将SD卡从嵌入式设备中取出,使用特定的读卡器连接到PC上进行操作。这种方法需要用户购买特定的读卡器,使用不方便,用户也不愿意接受;(2)在嵌入式设备上增加一个USB从设备接口,为嵌入式设备开发USB从设备驱动(USB gadget driver),将SD卡模拟成U盘设备进行访问。这种方法涉及到硬件的改动和驱动的开发,开发难度大,耗费时间长。本文提供了一种方便快捷的方法,可以满足用户对SD卡上文件的访问。

vsftp是一个基于GPL发布的类Unix系统上使用的FTP服务器软件,具有非常安全且快速稳定的特点,目前已经被许多大型站点所采用。vsftp可以方便地移植到嵌入式Linux操作系统中,如果将嵌入式设备作为FTP服务器,以PC作为客户端,用户即可通过FTP客户端软件实现PC与嵌入式设备之间的文件传输。如果再将SD卡挂载到文件系统的某个目录下,用户就可通过FTP服务来访问SD卡。

1 移植vsftp到ARM-Linux系统

1.1 交叉编译

要移植vsftp,首先到vsftpd 官方网站下载程序源码,本文使用的是vsftpd-2.3。4。tar。gz。解压vsftpd-2.3。4。tar。gz,然后进入vsftpd-2.3.4目录,修改Makefile文件,将“CC=gcc”修改为“CC=/usr/local/arm/4.3.2/bin/arm-linux-gcc”,即使用交叉编译器进行编译。执行make指令,会出现“/lib/libcap.so.1: could not read symbols: File in wrong format”编译错误,提示找不到libcap.so.1库文件,修改vsftpd-2.3.4目录下的vsf_findlibs.sh文件,注释掉如下语句:

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";

locate_library /lib64/libcap.so && echo "-lcap";

fi

再次执行make指令,编译成功,生成vsftpd文件,执行file vsftpd指令,则可显示如下语句:

vsftpd: ELF 32-bit LSB executable, ARM, version 1 (SYSV), dynamically linked(uses shared libs), for GNU/Linux 2.6.14, stripped

将vsftpd拷贝到嵌入式设备文件系统的/usr/sbin目录下。

1.2 查看依赖及其相应的配置文件

执行arm-linux-readelf –d vsftpd指令查看vsftpd需要的动态链接库,则显示如下语句:

Dynamic section at offset 0x16a9c contains 29 entries:

Tag        Type            Name/Value

0x00000001 (NEEDED)        Shared library: [libcrypt.so.1]

0x00000001 (NEEDED)        Shared library: [libdl.so.2]

0x00000001 (NEEDED)        Shared library: [libnsl.so.1]

0x00000001 (NEEDED)        Shared library: [libresolv.so.2]

0x00000001 (NEEDED)        Shared library: [libutil.so.1]

0x00000001 (NEEDED)        Shared library: [libc.so.6]

将以上所列的动态库从/usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/lib目录下拷贝到嵌入式设备文件系统的/lib目录下;将vsftpd-2.3.4目录下的默认配置文件vsftpd。conf拷贝到嵌入式设备文件系统的/etc目录下。

1.3 启动设置

在嵌入式设备文件系统的/etc/rc.d/init.d目录下添加名为vsftpd的脚本,内容如下:

#!/bin/sh

base=vsftpd

# See how we were called.

case "$1" in

start)

/usr/sbin/$base

;;

stop)

pid=`/bin/pidof $base`

if [ -n "$pid" ]; then

kill -9 $pid

fi

;;

esac

exit 0

在/etc/init.d/rcS文件中添加/usr/sbin/vsftpd &语句,以便在开机时启动vsftpd服务器。

2 用户和目录设置

为了使用户登录FTP服务器后能够直接进入SD卡目录中,需要对用户及目录进行设置。vsftpd提供了匿名用户、本地用户、虚拟用户三种访问方式。

(1)匿名用户形式:在默认安装的情况下,系统只提供匿名用户访问。

(2)本地用户方式:以/etc/passwd中的用户名为认证方式。

(3)虚拟用户方式:支持将用户名和口令保存在数据库文件或数据库服务器中。

由于创建用户较为麻烦,可以采用从host直接拷贝的方式,将/etc目录下的passwd、passwd-、group、group-、shadow和shadow-文件拷贝到嵌入式设备文件系统的

/etc目录下。

执行下面命令为访问SD的用户创建一个本地用户,创建好之后就可以用admin登录,并且其主目录为/sdcard。这里使用/sdcard作为SD卡的挂载目录。

#adduser admin –h /sdcard -D

#passwd 123456

admin用户存在的问题就是可以对主目录的上层目录进行访问。处于安全的考虑,大多数情况下需要对用户隐藏掉系统文件以防止用户的误操作造成的系统崩溃。这就需要对admin用户的权限进行限制,使其只可访问/sdcard主目录文件,其他文件都对用户不可见。对vsftpd。conf配置文件做如下修改:

chroot_local_user=NO

chroot_list_enable=YES

chroot_list_file=/etc/vsftpd。chroot_list

然后把admin用户名添加到文件vsftpd。chroot_list中即可(一行一个用户名)。vsftpd。chroot_list是一个用户名列表,其中存放的是禁止访问上层目录的用户名。

3 访问SD卡

使用网线连接嵌入式设备和PC,启动嵌入式设备,vsftpd服务器会在开机过程中自启动。将嵌入式设备和PC的IP地址设置在同一网段,在PC端打开FTP客户端软件,在服务器栏中输入嵌入式设备的IP地址,使用用户名和密码进行连接登录。快速连接界面如图1所示。

cadb0b9b276accb9d171b8cf8fd8bede.gif

登录成功后,用户将会看到如图2所示的界面,从界面右侧的地址栏可以看到/sdcard目录已被作为用户的根目录/,用户无法看到上层目录的内容,达到了使用户受控访问的目的。

b834ebf6808b5a9ae9f720918f8853bb.gif

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值