Ubuntu 搭建FTP服务

在Linux中使用的FTP是vsftp,Ubuntu中安装vsftp:

bash 复制代码
apt install vsftpd

配置文件在/etc路径下,会出现两个配置文件:

/etc/vsftpd.conf :主配置文件

/etc/ftpusers:指定那些用户不能访问FTP服务器,这里的用户包括root在内的一些重要用户。

这里需要对配置文件 /etc/vsftpd.conf 做一些修改:

登录权限

anonymous_enable=YES #允许匿名登录

local_enable=YES #允许本地用户登录

登录用户黑白名单

首先,前面提到的配置文件 /etc/ftpusers 中配置的用户都无法访问ftp服务器,这相当于是一个黑名单。除此之外,还可以通过配置项 userlist_deny,userlist_enable,userlist_file 组合使用,来另外配置黑白名单。

其中,userlist_enable 标识是否使用启用黑白名单( userlist_file 标识名单文件),当userlist_enable=YES时生效。而 userlist_deny 用于指示该名单为黑名单还是白名单,当userlist_deny=YES时,userlist_file中的名单为黑名单,而当 userlist_deny=NO 时,userlist_file中的名单为白名单。

综合来说,当开启黑名单时(userlist_deny=YES,userlist_enable=YES),既不在/etc/ftpusers中,又不在 userlist_file 所指向名单文件中的用户可以登录FTP;当开启白名单(userlist_deny=NO,userlist_enable=YES),仅在userlist_file 所指向名单文件中且不在/etc/ftpusers 中的用户可以登录FTP;当关闭黑白名单(userlist_enable=NO),不在/etc/ftpusers中的用户都可登录。
掩码权限

umask是在linux中常见的一个东西,它其实是一个掩码。当然,也有umask这样一个命令,它是对用户建立的文件的默认属性的定义。该 定义为:

假设umask为022,则对于一个文件夹的话,它的默认属性为 777-022=755,这也就是我们平时建立文件夹的权限。而对于一般的文件的话,则是用 666-022=644。

local_umaks=022 #本地用户掩码权限

anon_umask=000 #匿名用户掩码权限

文件目录权限

local_root=/srv/ftp #本地用户的FTP根目录,这是ftp访问的根目录

chroot_local_user=YES #是否将所有用户限制在主目录,YES为启用 NO禁用.(该项默认值是NO,即在安装vsftpd后不做配置的话,ftp用户是可以向上切换到要目录之外的)

chroot_list_enable=NO #是否启动限制用户的名单(由chroot_list_file 所指向的用户名单) YES为启用 NO禁用

这里的 chroot_local_user、chroot_list_enable、chroot_list_file 等参数有点类似上面的用户登录黑白名单的配置,这里建议将chroot_local_user配置为YES,并将chroot_list_enable配置为NO,以达到将所有用户限制在根目录。

write_enable=YES #启用任何形式的FTP写命令(全局写)

allow_writeable_chroot=YES #允许写入用户主目录,当然需要主目录是可写的。

这里需要注意的是,当用户主目录对ftp用户是可写时,且chroot_local_user=YES,ftp用户会登录失败。在配置是建议设置为对ftp用户不可写,仅对本地用户配置可写权限。如果希望为ftp用户提供上传文件权限,可以在根目录下另外创建一个子目录为其提供可写权限。

anon_upload_enable=YES #允许匿名FTP用户上传文件(这只有在上述全局写启用被激活时才有效果。此外,您显然还需要创建一个可供FTP用户写入的目录):

anon_mkdir_write_enable=YES #允许匿名FTP用户创建文件夹:

dirmessage_enable=YES #激活目录消息------当远程用户进入某个目录时发给他们的消息

配置模式

FTP有两种模式,称为主动模式(PORT)和被动模式(PASV)。

主动模式:客户端随机打开一个大于1024的端口N向服务器的21端口发起连接,同时开放N+1端口,并向服务器发出 "port N+1" 命令,由服务器的20端口主动连接到客户端 N+1 端口。

注意,FTP客户端只是告诉服务器自己的端口号,让服务器来连接客户端指定的端口。对于客户端的防火墙来说,这是从外部到内部的连接,可能会被阻止。

配置主动模式:

bash 复制代码
pasv_enable=NO    #Passive模式关闭
port_enable=YES    #active模式开启
connect_from_port_20=YES    #默认情况下,FTP PORT主动模式进行数据传输时使用20端口

被动模式:客户端打开两个随机端口N和N+1,客户端的N端口连接服务器的21端口,提交PASV命令,然后,服务器会开启一个随机端口,返回如 "227 entering passive mode (127,0,0,1,4,18)"。它返回了227开头的信息,在括号中有以逗号隔开的六个数字,前面四个指服务器地址,最后两个指端口,计算端口值的方式:倒数第二个数字 * 256 + 最后一个数字,客户端收到命令并取得服务器的数据端口P之后,会通过N+1端口连接服务器的P端口,然后进行数据传输。

配置被动模式:

bash 复制代码
pasv_enable=YES    #passive模式开启
#在PASV模式下,建立数据传输可使用的端口范围的下界和上界,这里给的数值仅供参考,可根据实际需求修改,注意到防火墙里面将这段端口放开
pasv_min_port=40000   
pasv_max_port=40100

查看当前所有配置项:

bash 复制代码
cat /etc/vsftpd.conf |grep -v '^#'
bash 复制代码
listen=NO
listen_ipv6=YES
anonymous_enable=YES
local_enable=YES
write_enable=YES
local_umask=200
anon_umask=000
anon_upload_enable=YES
anon_mkdir_write_enable=YES
dirmessage_enable=YES
use_localtime=YES
xferlog_enable=YES
connect_from_port_20=NO
chroot_local_user=YES
chroot_list_enable=NO
allow_writeable_chroot=YES
chroot_list_file=/etc/vsftpd/chroot_list
secure_chroot_dir=/var/run/vsftpd/empty
pam_service_name=vsftpd
rsa_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
rsa_private_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
ssl_enable=NO


local_root=/srv/ftp
anon_root=/srv/ftp/Sams
userlist_deny=NO
userlist_enable=NO
userlist_file=/etc/vsftpd/user_list
user_config_dir=/etc/vsftpd/userconfig

pasv_enable=YES
pasv_min_port=40000
pasv_max_port=40100

测试FTP服务

可以通过在windows文件夹输入 ftp://192.168.9.108/ 这样格式的地址来登录,记得把IP替换为你的服务器IP。更好的测试工具是使用 FileZilla软件来测试,这个FTP工具能够列出命令详情,响应及错误信息,方便排查问题。

相关推荐
写代码的学渣1 天前
ubuntu 22.04 新装的系统 xshell 连不上
linux·运维·ubuntu
虚伪的空想家1 天前
KVM的ubuntu虚机如何关闭安全启动
linux·安全·ubuntu
t198751281 天前
在Ubuntu 22.04系统上安装libimobiledevice
linux·运维·ubuntu
晚风吹人醒.1 天前
缓存中间件Redis安装及功能演示、企业案例
linux·数据库·redis·ubuntu·缓存·中间件
皮小白2 天前
ubuntu开机检查磁盘失败进入应急模式如何修复
linux·运维·ubuntu
sulikey2 天前
Linux基础指令与权限管理深度解析:从入门到精通
linux·运维·服务器·ubuntu·centos·linux命令·linux权限
daqinzl2 天前
Docker 安装 Ubuntu
ubuntu·docker
Eric.Lee20213 天前
ubuntu 安装 Miniconda
linux·运维·python·ubuntu·miniconda
W***83203 天前
如何在 Ubuntu 22.04 上安装 MySQL
linux·mysql·ubuntu
杨德杰3 天前
Ubuntu设置VNC远程桌面
linux·运维·ubuntu