文件服务——FTP
文件服务——FTP一、FTP服务1.1 FTP服务介绍FTP(File Transfer Protocol)是一种应用非常广泛并且古老的一个互联网文件传输协议。主要用于互联网中文件的双向传输(上传/下载)、文件共享跨平台Linux、WindowsFTP是C/S架构,拥有一个客户端和服务端,使用TCP协议作为底层传输协议,提供可靠的数据传输FTP的默认端口 21...
文件服务——FTP
一、FTP服务
1.1 FTP服务介绍
FTP(File Transfer Protocol)是一种应用非常广泛并且古老的一个互联网文件传输协议。
- 主要用于互联网中文件的双向传输(上传/下载)、文件共享
- 跨平台 Linux、Windows
- FTP是C/S架构,拥有一个客户端和服务端,使用TCP协议作为底层传输协议,提供可靠的数据传输
- FTP的默认端口 21号(命令端口) 20号(数据端口) 默认被动模式下
- FTP程序(软件)vsftpd
1.2 FTP服务客户端工具
Linux:ftp、lftp(客户端程序)
Windows:FileZilla、IE、Chrome、Firefox
lftp和ftp工具区别:
- lftp可以批量并且下载目录
lftp localhost:~> mirror remote local 下载整个目录到本地
lftp localhost:~> mirror -R local remote rename 上传整个目录到远程同时可以重命名
1.3 FTP的两种工作模式
主动模式
- 客户端打开大于1023的随机命令端口和大于1023的随机数据端口向服务的的21号端口发起请求
- 服务端的21号命令端口响应客户端的随机命令端口
- 服务端的20号端口主动请求连接客户端的随机数据端口
- 客户端的随机数据端口进行确认
被动模式
- 客户端打开大于1023的随机命令端口和大于1023的随机数据端口向服务的的21号端口发起请求
- 服务端的21号命令端口响应客户端的随机命令端口
- 客户端主动连接服务端打开的大于1023的随机端口
- 服务端进行确认
注:
①ftp服务端口分为数据端口20和命令端口21。
②21号端口是服务器的命令端口,客户端端口一般为大于1023的随机命令端口和数据端口。
1.4 FTP服务的基本配置
- ftp文件列表
/etc/logrotate.d/vsftpd //日志轮转的文件
/etc/pam.d/vsftpd //安全认证
/etc/rc.d/init.d/vsftpd //启动脚本
/etc/vsftpd //配置文件的主目录
/etc/vsftpd/ftpusers //用户列表(黑名单)
/etc/vsftpd/user_list //用户列表(默认黑名单|可黑可白)
/etc/vsftpd/vsftpd.conf //主配置文件
/usr/sbin/vsftpd //二进制命令
/usr/share/doc/vsftpd-2.2.2/EXAMPLE/VIRTUAL_HOSTS
/usr/share/doc/vsftpd-2.2.2/EXAMPLE/VIRTUAL_HOSTS/README //虚拟主机
/usr/share/doc/vsftpd-2.2.2/EXAMPLE/VIRTUAL_USERS
/usr/share/doc/vsftpd-2.2.2/EXAMPLE/VIRTUAL_USERS/README //虚拟用户
/usr/share/man/man5/vsftpd.conf.5.gz //man文档
/var/ftp //匿名用户的默认数据的根目录
/var/ftp/pub //匿名用户的默认数据目录的扩展目录
- ftp配置文件
[root@review1 ~]# grep -v ^# /etc/vsftpd/vsftpd.conf
anonymous_enable=YES //支持匿名用户访问
local_enable=YES //非匿名用户
write_enable=YES //写总开关
local_umask=022 //反掩码 file:644 dir:755
dirmessage_enable=YES //启用消息功能
xferlog_enable=YES //开启或启用xferlog日志
connect_from_port_20=YES //支持主动模式(默认被动模式)
xferlog_std_format=YES //xferlog日志格式
listen=YES //ftp服务独立模式下的监听
pam_service_name=vsftpd //指定认证文件
userlist_enable=YES //启用用户列表
tcp_wrappers=YES //支持tcp_wrappers功能
- 启动测试ftp服务
//启动
[root@review1 ~]# service vsftpd start
Starting vsftpd for vsftpd: [ OK ]
[root@review1 ~]# netstat -ntpl|grep vsftp
tcp 0 0 0.0.0.0:21 0.0.0.0:* LISTEN 1390/vsftpd
//测试
[root@client ~]# lftp root@192.168.221.129
Password:
lftp root@192.168.221.129:~> ?
!<shell-command> (commands)
alias [<name> [<value>]] bookmark [SUBCMD]
cache [SUBCMD] cat [-b] <files>
cd <rdir> chmod [OPTS] mode file...
close [-a] [re]cls [opts] [path/][pattern]
debug [<level>|off] [-o <file>] du [options] <dirs>
[root@client ~]# ftp 192.168.221.129
Connected to 192.168.221.129 (192.168.221.129).
220 (vsFTPd 2.2.2)
Name (192.168.221.129:root): test
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp>
//登陆成功!
注意:
① 为了安全考虑,ftp默认阻止root登录。
② SELinux
会阻止ftp用本地用户登录,关闭SELinux
后,需要重启vsftp
才能生效。
③ ftp登录用的本地用户是 vsftp
服务器的用户,而不是客户端的用户。
二、 FTP常用选项配置
2.1 允许匿名用户上传、下载文件,创建文件夹
默认情况下,ftp服务器只允许匿名用户下载本人文件,不允许上传
[root@review1 ~]# vim /etc/vsftpd/vsftpd.conf
26 obviously need to create a directory writable by the FTP user.
27 #anon_upload_enable=YES
28 #
29 # Uncomment this if you want the anonymous FTP user to be able to create
30 # new directories.
31 #anon_mkdir_write_enable=YES
//默认关闭
ftp> put install.log
local: install.log remote: install.log
227 Entering Passive Mode (192,168,221,129,173,140).
550 Permission denied.
//无法上传
//在配置文件中加入以下三个选项
anon_upload_enable=YES //允许匿名用户上传
anon_mkdir_write_enable=YES //允许匿名用户创建文件夹
anon_other_write_enable=YES //允许更改其他匿名用户的文件和文件夹
注: 要想上传成功,还要注意文件夹的“写“权限。总之,ftp服务器文件传输过程中遇到的权限问题主要来自于两个方面:①ftp本身权限设置。②传输的文件夹没有权限。
2.2 开启本地用户消息功能
2.2.1 创建.message文件
①本地用户访问——>/home/username
②匿名用户访问——>/var/ftp
服务端:
[root@review1 ~]# echo "welcome to my home" > /home/test/.message
[root@review1 ~]# echo "welcome to anon home" > /var/ftp/.message
测试:本地用户
[root@mysql_2 ~]# ftp 192.168.221.129
Connected to 192.168.221.129 (192.168.221.129).
220 (vsFTPd 2.2.2)
Name (192.168.221.129:root): test
331 Please specify the password.
Password:
230-welcome to my home
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
测试:匿名用户
[root@mysql_2 ~]# ftp 192.168.221.129
Connected to 192.168.221.129 (192.168.221.129).
220 (vsFTPd 2.2.2)
Name (192.168.221.129:root): ftp
331 Please specify the password.
Password:
230-welcome to anon home
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
2.2.2 修改配置文件
1. 修改配置文件指定消息文件
banner_file=/etc/vsftpd/banner_file
2. 创建消息文件
vim /etc/vsftpd/banner_file
测试:
[root@mysql_2 ~]# ftp 192.168.221.129
Connected to 192.168.221.129 (192.168.221.129).
220-*************
220-
220-
220-
220-************
220
Name (192.168.221.129:root): test
331 Please specify the password.
Password:
230-welcome to my home
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp>
注: 配置方式不同显示的位置也不同。
2.3 用户访问目录控制及上传目录设置
- 禁锢本地用户的家,只能在自己的家中活动
1)禁锢所有的本地用户
chroot_local_user=YES //禁锢所有的本地用户(不能随便跳转)
2)禁锢大部分用户,允许小部分
chroot_local_user=YES
chroot_list_enable=YES //启用用户文件列表
chroot_list_file=/etc/vsftpd/chroot_list //定义用户文件列表
3)允许大部分,禁锢小部分
chroot_local_user=NO 或者 # chroot_local_user=YES
chroot_list_enable=YES //启用用户文件列表
chroot_list_file=/etc/vsftpd/chroot_list //定义用户文件列表
注: chroot_list_enable
的开启与关闭会影响chroot_list_file
文件的作用,前者开启禁用 ,后者就是允许列表;前者关闭禁用,后者就是禁用列表。
- 指定匿名用户和本地用户上传文件的目录
默认文件夹:/var/ftp
(匿名) /home/username
(本地)
更改配置文件/etc/vsftpd/vsftpd.conf
anon_root=指定文件夹路径
local_root=指定文件夹
注意: 要对指定文件夹增加权限chmod o+w
- 禁锢所有用户的家,不能来回跳转
chroot_local_user=YES
2.4 FTP的访问控制
- 对象访问控制(FTP服务的自身访问控制)
ftpusers //黑名单
user_list //默认是黑名单(可以成为白名单)
例:
需求1:不允许stu1用户访问ftp服务
echo stu1 >> /etc/vsftpd/ftpusers
需求2:只允许stu2用户访问ftp服务
1)修改配置文件将user_list文件变成白名单
userlist_deny=NO
2)将stu2用户加入到user_list文件中
echo stu2 >> user_list
注:
如果user_list文件是白名单,用户即在ftpusers中又在user_list中,那么ftpusers拒绝优先。
FTP服务网络访问控制
- 检查是否支持tcp_wrappers
①对于编译安装的软件: ./configure --enable-libwrap 表示支持tcp_wrappers访问控制 ②对于rpm安装的软件 [root@review1 ~]# ldd /usr/sbin/vsftpd |grep libwrap* libwrap.so.0 => /lib64/libwrap.so.0 (0x00007fb2c28eb000) [root@review1 ~]# ldd /usr/sbin/sshd |grep libwrap* libwrap.so.0 => /lib64/libwrap.so.0 (0x00007fa0e6bc1000)
tcp-wrappers
写法
/etc/hosts.deny vsftpd:all 全部拒绝 vsftpd:all EXCEPT 192.168.0.2 拒绝所有除了192.168.0.2 vsftpd:192.168.0.254 拒绝单个ip地址=hosts.allow文件里增加vsftpd:192.168.0.254:deny vsftpd:192.168.0.0/255.255.255.0 拒绝某个网段 vsftpd:192.168.0.0/255.255.255.0 EXCEPT 192.168.0.254 拒绝某个网段,但是除了某个ip地址 注意:子网掩码不支持192.168.0.0/24这种写法
更多推荐
所有评论(0)