嵌入式linux FTP服务器
一般嵌入式Linux下的FTP服务器会有什么要求呢?一般来说差不多如下所示
- 账号认证,需要特定用户才能访问(不一定要和登录用户挂钩)
- 根目录固定在一个固定的位置,且不能向上级访问(例如/share)
- 不需要匿名访问(不安全)
- 可能需要配置只读权限
方案选型
busybox自带的ftpd
本来打算考虑使用本身自带的方案的,配置如下
???/etc/inetd.conf
ftp stream tcp nowait root ftpd ftpd -w /share
然后重启设备即可
在网上找ftpd的配置。并没有找到,最后直接看help
ftpd --help
BusyBox v1.24.1 (2020-09-01 09:09:54 UTC) multi-call binary.
Usage: ftpd [-wvS] [-t N] [-T N] [DIR]
Anonymous FTP server
ftpd should be used as an inetd service.
ftpd‘s line for inetd.conf:
21 stream tcp nowait root ftpd ftpd /files/to/serve
It also can be ran from tcpsvd:
tcpsvd -vE 0.0.0.0 21 ftpd /files/to/serve
-w Allow upload
-v Log errors to stderr. -vv: verbose log
-S Log errors to syslog. -SS: verbose log
-t,-T Idle and absolute timeouts
DIR Change root to this directory
可以发现这是个只支持匿名访问的ftp服务器软件,所以不能满足账号认证的要求
于是换了个方案
vsftpd
可以支持匿名,也可以支持限制目录权限,就它了
vsftpd的移植
官网地址
https://security.appspot.com/vsftpd.html
移植教程
https://blog.csdn.net/liuzhanchun/article/details/102814150
开始移植,移植过程非常简单
从官网下载源码
vsftpd-3.0.3.tar.gz,解压
先配置gcc工具
vim Makefile
# CC = gcc
CC = arm-linux-gnueabihf-gcc
然后make
注意:make之前先检查arm-linux-gnueabihf-gcc在不在path中,没有的话先source
编译通过
将可执行文件vsftpd拷到板子上的/usr/sbin
,添加可执行权限
将vsftpd.conf拷到板子上的/etc/
chown root:root /etc/vsftpd.conf
然后运行
vsftpd &
这个时候就可以访问了,但是还不满足需求,然后根据需求修改配置
vsftpd的配置
这里我们需要配置的内容是
#禁止匿名
anonymous_enable=NO
#允许本地用户登录
local_enable=YES
#更改登录后的家目录,默认为各用户的家目录
local_root=/home/root
#不能切换到上级目录
chroot_local_user=YES
#限制访问自身目录
chroot_list_enable=YES
# (default follows)
chroot_list_file=/etc/vsftpd/vsftpd.chroot_list
新增用户
useradd -d /home/ftp1 ftp1 #增加用户ftp1,并制定ftp1用户的主目录为/home/ftp1
passwd ftp1 #为ftp1设置密码
更改权限
usermod -s /sbin/nologin ftp1 #限定用户ftp1不能telnet,只能ftp
usermod -s /sbin/bash ftp1 #用户ftp1恢复正常 #注意这里不一定是/sbin/bash,也可能是/bin/bash,具体用which bash应该可以看到
usermod -d /ftp1 ftp1 #更改用户ftp1的主目录为/ftp1
好了,最后运行一下
vsftpd &