29-FTP配置
FTP简介与原理
主要作用是文件共享,可以设置权限,针对企业用户,个人用户很难接触到
Tips. Linux对Windows中的病毒是免疫的!
- FTP(File Transfer Protocol)中文称为“文件传输协议”。用于Internet上的控制文件的双向传输。
- “下载”文件就是从远处主机拷贝文件至自己的计算机上
- “上传”文件就是将文件从自己的计算机拷贝至远程主机上
主动模式
服务器从20端口主动向客户端发起连接
-
客户端通过用户名和密码登录FTP服务器,登录到服务器的21端口。
-
服务器端验证用户名密码,验证成功,允许客户端进行操作。
-
客户端随机开启1024以上的端口
-
客户端的端口传带一个PORT命令,同时发送开启了哪个随机端口(PORT命令:请你打开端口,向我传递数据)
-
服务器看到PORT命令,开启本机20端口,开始向客户端随机端口发送数据
被动模式
服务器在指定范围内某个端口被动等待客户端连接
- 客户端通过用户名和密码登录FTP服务器,登录到服务器的21端口。
- 服务器端验证用户名密码,验证成功,允许客户端进行操作。
- 客户端开启PASV命令(PASV命令:告诉服务器我们要采用被动模式连接)
- 服务器端开启随机端口(1024以上随机端口)
- 服务器将随机端口号告诉客户端
- 客户端通过自己的随机端口向服务器端的随机端口传递数据
一般采用被动模式,FTP默认是主动模式。
端口
FTP连接端口
- 控制连接:TCP 21,用于发送FTP命令信息
- 数据连接:TCP 20,用于上传、下载数据
FTP相关文件
常见的FTP服务器程序
- Windows中的IIS、Serv-U
- wu-ftpd(古老,已经被淘汰)、Proftpd
- vsftpd
相关文件
-
包名 vsftpd
-
主配置文件
- /etc/vsftpd/vsftpd.conf
-
用户控制列表文件
-
/etc/vsftpd/ftpusers
-
用户名写在该文件里,用户就会禁止登陆FTP(黑名单)
-
为什么root也在登陆FTP禁止名单里?
因为FTP是明文传输,用户名和密码很容易被截获!
-
-
/etc/vsftpd/user_list
- 也是黑名单,但是可以修改变为白名单(白名单:只有这个名单上的用户可以访问)
- 黑名单的优先级比白名单优先级高
-
、
相关用户
- 匿名用户
- 用户名为anonymous或ftp
- 密码为任意邮箱格式的密码([email protected])
- 本地用户
- 使用Linux系统用户和密码
- 虚拟用户
- 管理员自定义的模拟用户
注意事项
-
关闭防火墙
- iptables -F (清空防火墙状态,临时的,重启不会保存)
- service iptables asve (保存防火墙状态,重启之后还是这个状态)
-
关闭SELinux
方法1(重启不会保存)
- sestatus 查看selinux状态
- setenforce 0 将SELinux状态改为disable
方法2(改配置文件,重启保存)
- vim /etc/selinux/config
配置文件详解
默认配置文件
| 内容 | 说明 | 提示 |
|---|---|---|
| anonymous_enable=YES | 允许匿名用户登录 | 一般情况下不允许匿名用户登录,消耗服务器资源 |
| local_enable=YES | 允许本地用户登录 | |
| write_enable=YES | 允许本地用户上传 | |
| local_umask=022 | 本地用户上传umask值 | 上传文件的默认权限(022对应的默认权限为644) |
| dirmessage_enable=YES | 用户进入目录时,显示.message信息 | |
| message_file=.message | 指定信息文件 | |
| xferlog_enable=YES | **记录日志 | |
| connect_from_port_20=YES | 主动模式数据传输接口 | |
| xferlog_std_format=YES | 使用标准的ftp日志格式 | |
| ftpd_banner | 登录欢迎信息 | 这里要写警告信息! |
| listen=YES | 允许被监听 | 默认端口21 |
| pam_service_name=vsftpd | 设置PAM外挂模块提供的认证服务所使用的配置文件名,即/etc/pam.d/vsftpd文件 | 采用pam验证,就是Linux用户名和密码验证(明文传递!!!!) |
| userlist_enable=YES | 用户登录限制 | |
| tcp_wrappers=YES | 是否使用tcp_wrappers作为主机访问控制方式 | 简单的“防火墙” |
Tips. Linux中绝大多数服务装起来就可以使用了
常用全局配置(没有写在默认配置文件)
| 内容 | 说明 | 提示 |
|---|---|---|
| listen_address=192.168.4.1 | 设置监听的IP地址 | |
| listen_port=21 | 设置监听FTP服务器的端口号 | 不建议改 |
| download_enable=YES | 是否允许下载文件 | |
| max_clients=0 | 限制并发客户端连接数 | 要进行设置(连接过多会将服务器拖死) |
| max_per_ip=0 | 限制同一IP地址的并发连接数 | 要进行设置 |
被动模式
| 内容 | 说明 | 提示 |
|---|---|---|
| pasv_enable=YES | 开启被动模式 | |
| pasv_min_port=24500 | 被动模式最小端口 | 端口应该大于一万,小于65535 |
| pasv_max_port=24600 | 被动模式最大端口 |
常用安全模式
| 内容 | 说明 | 提示 |
|---|---|---|
| accept_timeout=60 | 被动模式,连接超时时间 | |
| connect_timeout=60 | 主动模式,连接超时时间 | |
| idel_session_timeout=600 | 600秒没有任何操作结束端口连接 | |
| data_connection_timeout=500 | 资料传输时,超过500秒没有完成就断开传输 |
Tips. FTP的配置文件不允许在配置内容后写注释和空格!应该换行写
客户端使用
命令行
ftp ip地址
输入用户名,密码
登录成功
FTP命令
- help获取帮助
- get下载
- mget下载一批文件
- put上传
- mput上传一批文件
- exit退出
-
客户端在哪个目录下执行的FTP命令就会下载到哪个地方
-
服务器在这个用户的家目录上传文件
-
命令行模式不支持目录下载和断电续传
Windows对话框
可以上传下载目录
flashFXP客户端工具
匿名用户访问
| 内容 | 说明 | 提示 |
|---|---|---|
| anonmous_enable | 允许匿名用户访问 | |
| anon_upload_enable | 允许匿名用户上传(新建文件) | |
| anon_mkdir_write_enable=YES | 允许匿名用户创建目录 | |
| anon_umask | 设置上传的默认文件权限(默认600) |
匿名用户不可切换目录,登录目录是/var/ftp/
只要是匿名用户登录,服务器系统上默认登录的用户是ftp
匿名用户是否能上传取决于配置文件权限和用户权限
本地用户访问
使用的用户名和密码是服务器系统中的用户
登录的默认位置是用户的家目录
本地用户基本配置
| 内容 | 说明 | 提示 |
|---|---|---|
| local_enable=YES | 允许本地用户登录 | |
| write_enable=YES | 允许本地用户上传 | |
| local_umask=022 | 本地用户上传的umask值 | |
| local_root=/var/ftp | 设置本地用户的FTP目录 | 注意目录权限,对所有人都生效,不区分目录,只有目录权限和用户权限都允许上传才可以上传文件 |
| local_max_rate=0 | 限制最大传输速率(字节/秒) | |
| chroot_local_user=YES | 开启用户目录限制 | 只有此行,把所有用户都限制在用户主目录中 |
指定用户只能在家目录,指定用户可以访问根目录
chroot_local_user=YES
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list (该文件中的用户可以访问任何目录,其他用户现在家目录)
用户访问控制
用户访问控制文件
/etc/vsftpd/ftpusers 黑名单
/etc/vsftpd/user_list 黑名单,可以变为白名单
访问控制
userlist_enable=YES 开启用户访问控制
userlist_deny=YES
Userlist_file=/etc/vsftpd/user_list
写入/etc/vsftpd/user_list 中的的用户不能访问FTP服务器,没有写入的可以访问(默认如此)
不要把限制用户主目录和用户访问限制搞混!
chroot_local_user=YES用于把用户禁锢在主目录中
userlist_enable=YES 用户访问控制
虚拟用户访问
配置虚拟用户步骤
-
添加虚拟用户口令文件
-
vim /etc/vsftpd/vuser.txt (这个文件可以叫任何名字,也可以放在任何位置,建议这样写!)
cangle 用户名
123 密码
bols 用户名
123 密码
-
-
生成虚拟用户口令认真文件
-
yum -y install db4-utils
如果没有安装口令认证命令需要安装!
-
db_load_T -t hash -f /etc/vsftpd/vuser.txt
把文本文档转变为认证数据库
-
-
编辑vsftpd的PAM认证文件
-
vim /etc/pam.d/vsftpd
-
注释掉其他行(注释其他行可以禁止本地用户登录,因为本地用户登录时的验证依赖这个文件)
-
加入
auth required /lib/security/pam_userdb.so db=/etc/vsftpd/vuser
account required /lib/security/pam_userdb.so db=/etc/vsftpd/vuser
-
-
-
建立本地映射用户并设置宿主目录权限
-
useradd -d /home/vftproot -s /sbin/nologin vuser
此用户不需要登录,只是映射用户,不需要设置密码
用户名必须和下一步配置文件中一致
-
chmod 755 /home/vftpproot
-
-
修改配置文件
-
vim /etc/vsftpd/vsftpd.conf
guest_enable=YES 开启虚拟用户
guest_username=vuser FTP虚拟用户对应的系统用户
pam_serivice_name=vsftpd PAM认证文件(默认存在)
-
-
重启vsftpd服务,并测试
service vsftpd restart
(此时虚拟用户可以登录,查看,下载,不能上传)
(默认上传文件的位置是宿主用户(vuser)的家目录)
(权限使用的是匿名用户权限进行管理)
-
调整虚拟用户权限
-
vim /etc/vsftpd/vsftpd.conf
anonymous_enable=NO 关闭匿名用户登录,更安全
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
给所有虚拟用户设定权限,允许所有虚拟用户上传
-