FTP

File Transfer Protocol ,文件传输协议

用于文件共享,跨平台,默认端口21(命令端口)20(数据端口,主动模式),默认采用被动模式

Linux 下vsftpd提供ftp服务

一、工作模式

  • 主动模式

服务端使用20号端口主动连接客户端大于1023号随机端口

  • 被动模式

客户端主动连接服务端大于1023号端口

生产服务器中采用该模式,并将服务端随机端口限制在一定范围,再添加相应防火墙策略

二、搭建FTP服务

(1)安装

# yum install vsftpd

(2)配置

配置文件存放位置:/etc/vsftpd/vsftpd.conf

查看帮助文档:man 5 vsftpd.conf

配置文件内容:

属性作用
local_enable是否允许本地用户(/etc/passwd)登录,默认YES
local_root指定本地用户默认目录,默认为用户家目录
chroot_local_user禁锢本地用户只能在默认目录活动,默认NO
write_enable是否允许登录用户有写权限。全局设置,默认YES
local_umask本地用户反掩码,控制新建文件的权限
xferlog_enable开启xferlog日志,默认YES,文件位置:/var/log/xferlog
userlist_enable是否启动用户列表,默认YES
userlist_enable设置user_list文件是否为黑名单,默认YES
tcp_wrappers是否支持tcp_wrappers(网络访问控制)功能,默认YES
local_max_rate最大传输速率,单位byte
max_clients最大客户端连接数

匿名用户相关配置:

属性作用
anonymous_enable是否支持匿名用户访问,默认YES
anon_root指定匿名用户默认目录,默认 /var/ftp
anon_upload_enable设置匿名用户可以上传文件,默认未开启
anon_mkdir_write_enable设置匿名用户可以创建新目录
anon_other_write_enable设置匿名用户可以执行写操作,例如删除和重命名
anon_umask匿名用户反掩码,
eg: 创建者可读可写,同组人可读,其他人可读, 则设置为022

注意:当想要让匿名用户具有写权限,那么FTP服务器对应的目录必须o+w,需要设置的目录是/var/ftp/pub (匿名用户默认目录下的某个目录)而不是/var/ftp(匿名用户默认目录),否则会提示权限过大

三、Linux下FTP工具

1. ftp

默认使用账户密码登录

用法:# ftp 10.1.1.6

使用匿名用户访问:用户名输入ftp,密码不需要输入

下载文件 get

上传文件put

2. lftp

默认匿名用户访问

用法:# lftp 10.1.1.6

使用本地用户登录:# lftp tiger@10.1.1.6 或者 # lftp 10.1.1.6 进入之后输入 user 用户名,然后再输入密码

下载单个文件 ~> get 文件名

上传单个文件~> put 文件名

下载多个文件 ~> mget 文件名 文件名 ... (可使用通配符)

上传多个文件~> mput 文件名 文件名 ... (可使用通配符)

上传文件夹~> mirror -R 本地文件夹名 [远程路径] [新文件夹名]

下载文件夹 ~> mirror 远程文件夹路径 [本地保存位置]

切换外部目录:~> lcd 目录

四、访问控制

  • 对象访问控制

黑名单:/etc/vsftpd/ftpusers

默认为黑名单(可以变为白名单):/etc/vsftpd/user_list

user_list是黑名单,在该文件中的用户会直接被拒绝登录

user_list是白名单,允许在该文件中的用户访问

user_list是白名单,若某个用户即在该文件也在ftpusers,那么拒绝该用户登录

  • 网络访问控制

/etc/hosts.deny

vsftpd:all #全部拒绝
vsftpd:all EXCEPT  192.168.1.12  #拒绝所有,除了192.168.1.12
vsftpd:192.168.1.1  #拒绝单个IP
vsftpd:192.168.0.0/255.255.255.0  #拒绝某个网段
vsftpd:192.168.0.0/255.255.255.0 EXCEPT 192.168.0.12 #拒绝某个网段,但是除了某个IP

/etc/hosts.allow

匹配流程:

首先判断该服务是否支持tcp_wrappers功能,然后判断IP是否存在于/etc/hosts.allow,存在则接受请求,否则再判断IP是否存在于/etc/hosts.deny,若存在则拒绝请求。若IP在两个文件中都不存则接受请求。

查看服务是否支持tcp_wrappers

# ldd /user/sbin/vsftpd | grep libwrap*

五、需求

需求1:

禁锢大部分用户,仅允许小部分人可以切换默认目录,

chroot_local_user=YES
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list

echo user01 >> /etc/vsftpd/chroot_list

禁锢小部分用户允许大部分用户

chroot_local_user=NO
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list

echo user02 >> /etc/vsftpd/chroot_list

需求2:

匿名用户可以到 /data/anon 中上传下载文件,也可以下载其他匿名用户所上传文件

# 1.创建目录
mkdir /data/anon -p
# 2.修改配置文件
anonymous_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
anon_upload_enable=YES
anon_root=/data     # 注意目录是 /data
anon_umask=022  # 作用,使新上传文件,其他人具有读权限
# 3.修改目录权限
chmod o+w /data/anon

需求3:

为不同用户设置不同根目录,给用户test1test2 分别设置不同的访问目录 /var/ftp/test1/var/ftp/test2

# 1.修改配置文件
chroot_local_user=YES
user_config_dir=/etc/vsftpd/userconfig
allow_writeable_chroot=YES
# 2.创建相应文件,并添加访问目录,注意:文件名需要与用户名一致
vim /etc/vsftpd/userconfig/test1
添加:local_root=/var/ftp/test1/
vim /etc/vsftpd/userconfig/test2
添加:local_root=/var/ftp/test12
# 3.设置目录属主属组
chown -R test1:test1 /var/ftp/test1
chown -R test2:test2 /var/ftp/test2
# 4.重启服务

需求4:

开启被动模式,并设置端口号范围为 3000~3100

 # 1.修改配置文件
 connect_from_port_20=NO #设置是否允许主动模式,默认为YES
 pasv_enable=YES #设置是否允许被动模式,默认为YES
 pasv_min_port=3000
 pasv_max_port=3100
 # 2.重启服务
 # 3.验证
 netstat -na|grep vsftpd

需求5:

开启主动模式

connect_from_port_20=YES
pasv_enable=NO
Last modification:June 21st, 2019 at 10:52 pm