树莓派上搭建FTP服务器

分类: 小鸟云代金券 发布时间:2019-02-11 04:06

版权:  凌云物网智科实验室

版本:  v1.0.0

一、安装并配置vsftpd

在Linux中,可供我们选择的FTP服务器种类众多。但如果我们想在树莓派上 搭建一个安全、高性能且稳定性好的FTP服务器,那么就非vsftpd莫属了。Vsftpd 的全称是Very Secure FTP Daemon(非常安全的FTP进程),是一个基于GPL发布的类UNIX类操作系统上运行的FTP服务器,可以运行在Linux、BSD、Solaris、 HP-UX以及Irix等系统上面。同时,vsftpd也支持很多其他传统的FTP服务器不支持的良好特性,用八个字概括其特点就是“小巧轻快,安全易用”,十分合树莓派的胃口。

pi@raspberrypi:~ $ sudo apt-get install vsftpd

备份默认的配置文件:

pi@raspberrypi:~ $ cd /etc/

pi@raspberrypi:/etc $ sudo mv vsftpd.conf vsftpd.conf.orig

使用vi命令编辑新的FTP配置文件如下,该配置文件使能了本地用户登陆同时也使能匿名账号免密登陆,并指定默认的登陆路径为 /srv/ftp。

pi@raspberrypi:/etc $ sudo vi vsftpd.conf

anonymous_enable=YES

anon_mkdir_write_enable=NO

no_anon_password=YES

chown_uploads=YES

chown_username=pi

delete_failed_uploads=YES

local_enable=YES

local_root=/srv/ftp

allow_writeable_chroot=YES

anon_root=/srv/ftp/

write_enable=YES

local_umask=022

listen_ipv6=NO

listen_port=21

ftpd_banner=Welcome to LingYun IoT system Lab. FTP service.

xferlog_enable=YES

xferlog_file=/var/log/vsftpd.log

#是否限制本地所有用户切换根目录的权限,YES为开启限制,即登录后的用户不能访问ftp根目录以外的目录,当然要限制啦

chroot_local_user=YES

pam_service_name=vsftpd

#是否启动userlist为通过模式,YES的话只有存在于userlist文件中的用户才能登录ftp(可以理解为userlist是一个白名单),

# NO的话,白名单失效,和下面一个参数配合使用

userlist_enable=YES

#是否启动userlist为禁止模式,YES表示在userlist中的用户禁止登录ftp(黑名单),NO表示黑名单失效,我们已经让

#userlist作为一个白名单,所以无需使用黑名单功能

userlist_deny=NO

#指定哪个文件作为userlist文件,我们稍后编辑这个文件

userlist_file=/etc/vsftpd.userlist

创建 vsftpd.userlist文件,该文件下指定允许登录的帐号:

pi@raspberrypi:/etc $ sudo vim vsftpd.userlist

把FTP根目录给相应用户和默认权限并创建空的测试文件,注意匿名用户(anonymous)也在该路径下,所以该目录不能给777的权限,否则匿名用户不能登录:

pi@raspberrypi:~ $ sudo chown pi.pi /srv/ftp/

pi@raspberrypi:~ $ sudo chmod 755 /srv/ftp/

pi@raspberrypi:~ $ touch /srv/ftp/raspberry_ftp

二、启动和测试

我们可以使用 service 命令重启vsftpd服务,启动后可以使用netstat命令查看vsftpd是否正常启动并正常监听FTP的21号端口:

pi@raspberrypi:/etc $ sudo service vsftpd restart

pi@raspberrypi:/etc $ sudo netstat -tlnp

Active Internet connections (only servers)

Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name

tcp        0      0 0.0.0.0:21              0.0.0.0:*               LISTEN      5607/vsftpd

tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      518/sshd

tcp6       0      0 :::22                   :::*                    LISTEN      518/sshd

如果这里看不到vsftp的运行,则可能是vsftpd的配置问题,具体可以查看vsftpd的启动运行日志文件 /var/log/syslog 。也可以使用systemctl命令查看或重启:

pi@raspberrypi:/etc $ sudo systemctl status vsftpd.service

pi@raspberrypi:/etc $ sudo systemctl restart vsftpd.service

如果一切正常,我们就可以在浏览器上输入FTP站点地址匿名登录访问,FTP访问的地址格式为: ftp://树莓派IP, 如 ftp://192.168.2.20/

在之前的配置文件中,我们限定了匿名帐号是不能创建、上传、删除文件的,但可以使用本地用户登录后实现这些功能,这时候就可以使用FTP客户端软件flashfxp来使用客户端软件登录操作,如下图所示:

三、多用户管理配置

有时我们需要FTP支持多个帐号登录,而不同的帐号访问不同的路径。这时可以修改vsfptd的配置文件,需要在配置文件里添加一行 user_config_dir=/etc/vsftpd/userconfig , 即:

pi@raspberrypi:~ $ vim /etc/vsftpd.conf

anonymous_enable=YES

anon_mkdir_write_enable=NO

no_anon_password=YES

chown_uploads=YES

chown_username=pi

delete_failed_uploads=YES

local_enable=YES

local_root=/srv/ftp

allow_writeable_chroot=YES

anon_root=/srv/ftp/

write_enable=YES

local_umask=022

listen_ipv6=NO

listen_port=21

ftpd_banner=Welcome to LingYun IoT system Lab. FTP service.

xferlog_enable=YES

xferlog_file=/var/log/vsftpd.log

#是否限制本地所有用户切换根目录的权限,YES为开启限制,即登录后的用户不能访问ftp根目录以外的目录,当然要限制啦

chroot_local_user=YES

pam_service_name=vsftpd

#是否启动userlist为通过模式,YES的话只有存在于userlist文件中的用户才能登录ftp(可以理解为userlist是一个白名单),

# NO的话,白名单失效,和下面一个参数配合使用

userlist_enable=YES

#是否启动userlist为禁止模式,YES表示在userlist中的用户禁止登录ftp(黑名单),NO表示黑名单失效,我们已经让

#userlist作为一个白名单,所以无需使用黑名单功能

userlist_deny=NO

#指定哪个文件作为userlist文件,我们稍后编辑这个文件

userlist_file=/etc/vsftpd.userlist

user_config_dir=/etc/vsftpd/userconfig

创建不同用户登录管理路径 /etc/vsftpd/userconfig 并对相应的用户进行配置:

pi@raspberrypi:~ $ sudo mkdir -p /etc/vsftpd/userconfig

pi@raspberrypi:~ $ cd /etc/vsftpd/userconfig/

pi@raspberrypi:/etc/vsftpd/userconfig $ sudo vim pi

local_root=/srv/pi

pi@raspberrypi:/etc/vsftpd/userconfig $ sudo vim guowenxue

local_root=/srv/guowenxue

创建不同用户登录的文件夹:

pi@raspberrypi:/etc/vsftpd/userconfig $ sudo mkdir -p /srv/guowenxue/

pi@raspberrypi:/etc/vsftpd/userconfig $ sudo mkdir -p /srv/pi

修改vsftpd.userlist 文件,运行添加的相应用户登录:

pi@raspberrypi:/etc $ sudo vim vsftpd.userlist

重启服务器生效,这时使用不同的用户登录会到不同的系统路径下,这样就可以做相应的权限管理: