FTP文件共享服务
目录
概述:FTP:linux下最常见的文件服务器,工作于应用层,实现文件传输
FTP:file transfer protocol 文件传输协议
FTP连接类型
命令连接:客户端发起请求,服务器响应默认一直保持连接
数据连接:按需打开,按需关闭,与命令连接相关联,有可能同时打开多个数据连接
端口
控制连接 : TCP/21
数据连接 : 20/随机端口
工作模式
主动模式:
1、客户端用端口n连接服务器端的21号端口,建立连接并使用PORT命令告知服务器开启了n+1端口
2、连接建立后,服务器使用20端口主动向客户端的n+1端口发送连接,以建立数据连接
被动模式:
1、客户端使用端口n连接FTP的21号端口,告知服务器使用被动模式
2、控制连接建立后,服务器建立端口P,使用PASV命令并告知客户端
3、客户端收到端口P后,使用n+1端口连接FTP的P端口,建立数据连接
服务名:vsftpd
主配置文件:/etc/vsftpd/vsftpd.conf
用户控制文件:/etc/vsftpd/ftpusers
/etc/vsftpd/user_list
用户验证类型
匿名用户:
是一种最不安全的模式,任何人都可无需密码验证而直接登录到FTP服务器
本地用户:
是通过linux系统本地的账号密码进行验证登录,相比较匿名开放模式更安全,配置也比较简单。
虚拟用户:更安全
安装:
服务器安装vsftpd软件
客户端安装ftp,否则无法使用ftp命令
登录时,直接使用ftp命令加上服务器IP地址
匿名用户验证:
用户名:ftp或者anonymous
密码:无
工作目录:
/var/ftp、/var/ftp/pub
[root@localhost ~] vim /etc/vsftpd/vsftpd.conf #打开配置文件
# Allow anonymous FTP? (Beware - allowed by default if you comment this out).
anonymous_enable=YES #将此行注释消除
#
# Uncomment this to allow local users to log in.
[root@localhost ~] ftp 192.168.9.254 #客户端下载ftp登录服务器
Connected to 192.168.9.254 (192.168.9.254).
220 (vsFTPd 3.0.2)
Name (192.168.9.254:root): ftp #登录匿名账号
331 Please specify the password.
Password: #无密码 直接回车
230 Login successful. #成功
Remote system type is UNIX.
Using binary mode to transfer files.
可选配置项:
anon_upload_enable=[YES|NO] 是否允许匿名用户上传文件
anon_mkdir_write_enable=[YES|NO] 是否允许匿名用户创建目录
anon_other_write_enable=[YES|NO] 是否开放匿名用户的其他写入权限(删除、改名)
chown 777 /var/ftp/pub/ 给予pub写入权限
# When SELinux is enforcing check for SE bool allow_ftpd_anon_write, allow_ftpd_full_access
anon_upload_enable=YES #取消注释 允许匿名用户上传文件
# Uncomment this if you want the anonymous FTP user to be able to create
anon_mkdir_write_enable=YES #允许创建
[root@localhost ~]# ftp 192.168.9.254
Connected to 192.168.9.254 (192.168.9.254).
220 (vsFTPd 3.0.2)
Name (192.168.9.254:root): ftp
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> cd pub
250 Directory successfully changed.
ftp> mkdir 666 #创建目录
ftp> cd pub #cd到pub
250 Directory successfully changed.
ftp> put skl.txt #上传文件
local: skl.txt remote: skl.txt
227 Entering Passive Mode (192,168,9,254,152,242).
150 Ok to send data.
226 Transfer complete. #传输完成
本地用户验证
用户名: 服务器本地用户
密码:本地用户密码
工作目录:本地用户的家目录
可选配置项
local_enable=[YES|NO] 是否允许本地用户登录FTP
local_umask=022 本地用户上传文件的umask值
local_root=/var/ftp 本地用户的FTP根目录
chroot_local_user=[YES|NO] 是否将用户权限禁锢在FTP目录,确保安全
allow_writeable_chroot=YES 是否允许写入
chroot_list_enable=YES|NO 是否启用chroot_list_file
在/etc/vsftpd/chroot_list文件中列出被不限制的用户的列表
创建a2 用户 放入 /etc/vsftpd/chroot_list中,发现可以切换到/var
[root@localhost ftp]# vim /etc/vsftpd/vsftpd.conf #修改配置文件
local_enable=YES #允许本地用户登录FTP
local_umask=022 #本地用户上穿文件的umask值
local_root=/var/ftp #本地用户的FTP根目录(自己设置)
chroot_local_user=YES #将用户禁锢在FTP目录,确保安全
allow_writeable_chroot=YES #允许写入chroot_list_file里
chroot_list_enable=YES #启用chroot_list_file
## (default follows)
chroot_list_file=/etc/vsftpd/chroot_list #在/etc/vsftpd/chroot_list文件中列出不被限制的用户列表
[root@localhost ~]# ftp 192.168.9.254
Connected to 192.168.9.254 (192.168.9.254).
220 (vsFTPd 3.0.2)
Name (192.168.9.254:root): a2 #登录a2
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> cd /var #可以切换到/var
250 Directory successfully changed.
ftp>
创建aa4 不在/etc/vsftpd/chroot_list中,发现只能在
Name (192.168.9.254:root): aa4
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> cd /var #不能切换到/var
550 Failed to change directory.
ftp> cd /pub #只可以切换到/(var/ftp)里
250 Directory successfully changed.
本地用户访问控制:
userlist_enable=YES
userlist_deny=YES
不允许/etc/vsftpd/user_list文件中出现的用户名登录FTP
userlist_enable=YES
userlist_deny=NO
仅允许/etc/vsftpd/user_list文件中出现的用户名登录FTP
ftpusers
不允许/etc/vsftpd/ftpusers文件中出现的用户名登录FTP,无论user_list如何设置