本文选择vsftpd作为使用对象,首先从vsftpd官网:https://security.appspot.com/vsftpd.html下载所需vsftpd版本源码,这里使用vsftpd3.0.3作为介绍。
1. 移植vsftpd至开发板
将vsftpd源码进行解压:
tar -vxzf vsftpd-3.0.3.tar.gz
进入解压过后的文件夹,打开Makefile进行编辑:(这里使用的hisi开发板)
CC = aarch64-himix100-linux-gcc //这里选择开发板所需的交叉编译器
保存后编译源码,此时文件夹会得到vsftpd和vsftpd.conf两个文件,将这两个文件拷贝至开发板文件系统中:
sudo cp vsftpd ~/linux/nfs/rootfs/usr/bin/ //拷贝 vsftpd
sudo cp vsftpd.conf ~/linux/nfs/rootfs/etc/ //拷贝 vsftpd.conf
输入指令ll或ls -la查看文件的权限和所有者,若不为开发板"root",则需修改:
chmod +x /usr/bin/vsftpd
chown root:root /etc/vsftpd.conf
2. 修改vsftpd.conf的配置
FTP服务器可通过匿名、本地、虚拟账户三种方式登录,这里仅介绍本地用户登录的配置。
2.1 本地用户登录
默认设置:打开vsftpd.conf,使能以下内容:
local_enable=YES //取消前面的#
write_enable=YES //取消前面的#
2.2 本地用户配置
我们可以继续在vsftpd.conf中根据我们的需求来配置本地用户权限:
local_root=/mnt/sdmnt/store //指定ftp服务器访问目录
file_open_mode=0755 //本地用户上传档案后的档案权限,与chmod所使用的数值相同。默认值为0666。
allow_writeable_chroot=YES //基于访问者写入权力
local_umask=022 //取消前面的注释#,本地用户新增档案时的umask 值。默认值为077。
chroot_local_user=YES //将所有本地用户限制在家目录中
3. 添加新用户
如果第一次添加用户的话要先将 ubuntu 下的 /etc/passwd 和 /etc/group 这两个文件复制到开发板根文件系统的对应目录,若事先配置过则不必该项操作:
sudo cp /etc/passwd ~/linux/nfs/rootfs/etc/ -f
sudo cp /etc/group ~/linux/nfs/test_rootfs/etc/ -f
修改开发板根文件系统中的 /etc/passwd 和 /etc/group 这两个文件,只保留 “root” 这一项。passwd 文件 “root” 行最后改为 “/bin/sh”。
检查开发板根文件系统中是否存在以下目录和文件,不存在手动创建:
/home //目录,不存在的话自行创建
/usr/share/empty //目录,不存在的话自行创建
/var/log //目录,不存在的话自行创建
/var/log/vsftpd.log //文件,不存在的话自行创建
创建 ftp 和 nobody 这两个用户,命令如下:(实测可仅创建nobody这个用户即可)
adduser ftp //创建 ftp用户
adduser nobody //创建 nobody用户
创建一个登录用户:
adduser G1ory
在执行完上述操作以后,要进行授权的步骤,比如上文本地用户登录目录为“local_root=/mnt/sdmnt/store”,则要逐级进行授权,直至最后一级目录为止:
chmod 777 /mnt
chmod 777 /mnt/sdmnt
chmod 777 /mnt/sdmnt/store
chmod 777 /home/G1ory
4. 连接测试
启动vsftpd服务器进行测试:
vsftpd &
接下来则可以尝试在windows中连接开发板的ftp服务,若测试无误,可将vsftpd设为开机自启,打开开机启动项的配置文件:
vi /etc/init.d/rcS
将vsftpd &加载末尾即可。
本文参考了以下链接,此文仅用于个人日后回顾,无商业用途。
https://blog.csdn.net/weixin_43072093/article/details/119133953