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:
为不同用户设置不同根目录,给用户test1
和test2
分别设置不同的访问目录 /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