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/Debian 上安装 Go
ubuntu·golang·debian
IT果果日记1 小时前
ubuntu 安装 conda
linux·ubuntu·conda
Python私教2 小时前
ubuntu搭建k8s环境详细教程
linux·ubuntu·kubernetes
梓仁沐白7 小时前
ubuntu+windows双系统切换后蓝牙设备无法连接
windows·ubuntu
写点什么啦18 小时前
[debug]不同的window连接ubuntu的vscode后无法正常加载kernel
linux·vscode·ubuntu·debug
wellnw18 小时前
[ubuntu]编译共享内存读取出现read.c:(.text+0x1a): undefined reference to `shm_open‘问题解决方案
linux·ubuntu
oushaojun21 天前
ubuntu中使用ffmpeg和nginx推流rtmp视频
nginx·ubuntu·ffmpeg·rtmp
命里有定数1 天前
Ubuntu问题 -- 通过远程修改文件配置ubuntu服务器的静态IP (不需要到服务器现场) (通过NetworkManager)
运维·服务器·tcp/ip·ubuntu·网卡
命里有定数1 天前
Ubuntu问题 - 显示ubuntu服务器上可用磁盘空间 一条命令df -h
服务器·ubuntu·数据集
命里有定数1 天前
Ubuntu问题 -- 设置ubuntu的IP为静态IP (图形化界面设置) 小白友好
linux·tcp/ip·ubuntu·ip