部署FTP文件服务
FTP(文件传输协议)概念
FTP基于C/S模式,FTP客户端与服务器端有两种传输模式,分别是FTP主动模式、FTP被动模式,主被动模式均是以FTP服务器端为参照。企业实际环境中,如果FTP客户端与FTP服务端均开放防火墙,FTP需以主动模式工作,这样只需要在FTP服务器端防火墙规则中,开放20、21 端口即可。
工作模式
服务器使用两个端口和客户端通信,一个是命令端口,也叫控制端口,默认是 21, 用于命令的传输 ,一个是数据端口,默认是 20 ,用于数据的传输。
主动模式
客户端向FTP服务器发送端口信息,由服务器主动连接该端口,客户端和FTP服务器的命令端口(21)建立TCP连接,当需要传输数据时,客户端新启动一个用于数据传输的端口,并在命令端口的连接上用 PORT 命令告诉服务器该端口号,服务器与该端口建立TCP连接,连接成功之后,客户端开始传输数据。
被动模式
FTP服务器开启并发送端口信息给客户端,由客户端连接该端口,服务器被动接受连接,客户端和FTP服务器的命令端口(21)建立TCP连接,当需要传输数据时,服务器侦听一个用于数据传输的端口,并在命令端口的连接上用 PASV 命令告诉客户端该端口号,客户端与该端口建立TCP连接,连接成功之后,客户端开始传输数据。
一、环捡需求:
①服务端系统CentOS 7或6 软件vsftpd
②客户端系统window7或10 软件xftp客户端或者网址ftp://IP
二、安装epel.repo源
[root@localhost ~]# yum -y install epel-release.noarch
[root@localhost ~]# cd /etc/yum.repos.d/
三、安装vsftpd及相关依赖
vsftpd:ftp软件
pam:认证模块
db4:支持文件数据库
[root@localhost ~]# yum -y install vsftpd* pam* db4*
四、关闭防火墙
[root@localhost ~]# systemctl stop firewalld
[root@localhost ~]# systemctl enable firewalld
[root@localhost ~]# getenforce
Enforcing
[root@localhost ~]# setenforce 0
[root@localhost ~]# vim /etc/selinux/config
修改内容为:SELINUX=disabled
五、vsftpd 配置文件说明
配置文件 | 作用 |
/etc/vsftpd/vsftpd.conf | vsftpd核心配置文件 |
vim /etc/vsftpd/ftpusers | 用于指定那些用户不能访问FTP服务器 |
vim /etc/vsftpd/user_list | 指定允许使用vsftpd的用户列表文件 |
/etc/vsftpd/vsftpd_conf_migrate.sh | 是vsftpd操作的一些变量和设置脚本 |
/var/ftp/ |
默认情况下匿名用户的根目录 |
六、配置匿名用户访问上传文件
①编写配置文件
[root@localhost ~]# vim /etc/vsftpd/vsftpd.conf
[root@localhost ~]# cat /etc/vsftpd/vsftpd.conf | grep -v ^#
anonymous_enable=YES #是否允许匿名用户访问
write_enable=YES #
anon_upload_enable=YES #是否允许匿名用户上传文件
anon_mkdir_write_enable=YES #是否允许匿名用户创建目录
anon_other_write_enable=YES #是否允许匿名用户有其他写入权限(改名,删除,覆盖)
dirmessage_enable=YES #
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
listen=YES
pam_service_name=vsftpd
userlist_enable=YES
tcp_wrappers=YES
listen_ipv6=YES
local_umask=022
local_enable=YES
②常见的匿名FTP配置项
anonymous_enable=YES #是否允许匿名用户访问
anon_upload_enable=YES #是否允许匿名用户上传文件
anon_mkdir_write_enable=YES #是否允许匿名用户创建目录
anon_other_write_enable=YES #是否允许匿名用户有其他写入权限(改名,删除,覆盖)
anon_max_rate=0 #是否允许最大传输率(字节/秒)0为无限制
anon_umask=022 #匿名用户所上传文件的权限掩码
anon_root=/var/ftp #设置匿名用户的FTP根目录
③、登录成功【浏览器访问和Xftp工具访问】
④、修改权限实现上传[浏览器不进行上传]
[root@localhost ~]# cd /var/ftp/
[root@localhost ftp]# ls
pub
[root@localhost ftp]# chown -R ftp.ftp pub/
[root@localhost ftp]# ll -d pub/
总用量 0
drwxr-xr-x. 2 ftp ftp 6 6月 10 2021 pub
[root@localhost ftp]# systemctl restart vsftpd
注意:改变根目录的属主,如果不改变的话,只能访问,其他权限不能生效,因为我们是以FTP用户的身份访问的,而pub默认的属组是root
七、启动vsftp服务、查看vsftp进程、查看所用端口以及查看进程路径【根据进程id查看进程占用端口,查看对应端口】
[root@localhost vsftpd]# systemctl start vsftpd
[root@localhost vsftpd]# systemctl enable vsftpd
[root@localhost vsftpd]# ps -ef | grep vsftp
root 68044 1 0 13:11 ? 00:00:00 /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf
root 68191 2779 0 13:18 pts/0 00:00:00 grep --color=auto vsftp
[root@localhost vsftpd]# netstat -nap | grep 68044
[root@localhost ~]# netstat -lnpt | grep vsftpd
tcp6 0 0 :::21 :::* LISTEN 68044/vsftpd
tcp6 0 0 :::21 :::* LISTEN 68044/vsftpd
[root@localhost ~]# whereis vsftpd
vsftpd: /usr/sbin/vsftpd /etc/vsftpd /usr/share/man/man8/vsftpd.8.gz
八、vsftp配置本地(系统)用户
①创建系统用户
[root@localhost ftp]# useradd zhangsan
[root@localhost ftp]# useradd lisi
[root@localhost ftp]# passwd zhangsan
[root@localhost ftp]# passwd lisi
②修改配置文件
[root@localhost ~]# vim /etc/vsftpd/vsftpd.conf
local_enable=YES
local_umask=022
chroot_local_user=YES
allow_writeable_chroot=YES
write_enable=YES
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
listen=YES
pam_service_name=vsftpd
userlist_enable=YES
userlist_deny=NO
tcp_wrappers=YES
[root@localhost vsftpd]# systemctl restart vsftpd
注意:查看配置文件中每行中是否存在空格 :set list
③常用的本地用户FTP配置项
local_enable=YES #是否允许本地系统用户访问
local_umask=022 #本地用户所上传文件的权限掩码
local_root=/var/ftp #设置本地用户的FTP根目录
chroot_list_enable=YES #表示是否开启chroot的环境,默认没有开启
chroot_list_file=/etc/vsftpd/chroot_list #表示写在/etc/vsftpd/chroot_list文件里>面的用户是不可以出chroot环境的。默认是可以的。
chroot_local_user=YES #表示所有写在/etc/vsftpd/chroot_list文件里面的用户是可以出chroo
t环境的,和上面的相反。
local_max_rate=0 #限制最大传输速率(字节/秒)0为无限制
④添加用户到白名单
[root@localhost vsftpd]# vim /etc/vsftpd/user_list
zhangsan
lisi
[root@localhost vsftpd]# systemctl restart vsftpd
⑤登录成功【浏览器访问和Xftp工具访问】
⑥实现上传
FTP服务器上存放数据
[root@localhost zhangsan]# cd /home/
[root@localhost home]# ls
lisi userllg zhangsan
[root@localhost vsftpd]# cd /home/zhangsan
[root@localhost zhangsan]# touch zhangsan.txt
[root@localhost zhangsan]# systemctl restart vsftpd
九、vsftp配置虚拟用户
解决系统风险问题,作用于,只能访问FTP服务,不能登录系统。
①建立虚拟FTP用户的账号
[root@localhost zhangsan]# useradd -s /sbin/nglogin vu
②创建虚拟用户文件
[root@localhost zhangsan]# cd /etc/vsftpd/
[root@localhost vsftpd]# ls
ftpusers user_list vsftpd.conf vsftpd_conf_migrate.sh vsftpd.conf_up
[root@localhost vsftpd]# vim /etc/vsftpd/user
zhao #用户
123456 #密码
zhang
123456
③创建数据文件
通过db_load工具创建Berkeley DB格式的数据库文件
[root@localhost vsftpd]# db_load -T -t hash -f user user.db
-t hash 读取文件的基本方法
-T 允许非Berkeley DB的应用程序使用文本格式转换的DB数据文件
-f 指定数据原文件
[root@localhost vsftpd]# ls
ftpusers user.db vsftpd.conf vsftpd.conf_up
user user_list vsftpd_conf_migrate.sh
④建立支持虚拟用户的PAM认证文件
[root@localhost vsftpd]# vim /etc/pam.d/vsftpd.vu
auth required /lib64/security/pam_userdb.so db=/etc/vsftpd/user
account required /lib64/security/pam_userdb.so db=/etc/vsftpd/user
⑤修改配置文件
local_enable=YES
local_umask=077
allow_writeable_chroot=YES
write_enable=YES
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
listen=YES
pam_service_name=vsftpd.vu
userlist_enable=YES
guest_enable=YES
guest_username=vu
chroot_local_user=YES
virtual_use_local_privs=YES
tcp_wrappers=YES
user_config_dir=/etc/vsftpd/user_dir
⑥为用户建立独立的配置目录及文件
[root@localhost vsftpd]# mkdir /etc/vsftpd/user_dir
[root@localhost vsftpd]# ls
ftpusers user.db user_list vsftpd_conf_migrate.sh
user user_dir vsftpd.conf vsftpd.conf_up
[root@localhost vsftpd]# cd /etc/vsftpd/user_dir/
[root@localhost user_dir]# vim zhao
local_root=/etc/vsftpd/data #虚拟用户数据的存储位置
[root@localhost user_dir]# cd ..
⑦创建虚拟用户数据存放目录
[root@localhost vsftpd]# mkdir /etc/vsftpd/data
[root@localhost vsftpd]# chmod 777 data/
[root@localhost vsftpd]# cd data/
[root@localhost data]# touch zhao.txt
[root@localhost data]# ls
zhao.txt
[root@localhost data]# systemctl restart vsftpd
十、FTP客户端lftp
Ⅰ、服务器
[root@localhost ~]# systemctl restart vsftpd
[root@localhost ~]# cd /var/ftp/
[root@localhost ftp]# ls
pub
[root@localhost ftp]# mkdir test
[root@localhost ftp]# cd test/
[root@localhost test]# ls
[root@localhost test]# touch llg
[root@localhost test]# ls
llg
[root@localhost test]# chmod 777 /var/ftp/test/llg
Ⅱ、客户机
[root@localhost ~]# lftp 192.168.112.146
lftp 192.168.112.146:~> ls
drwxr-xr-x 2 14 50 6 Jun 09 2021 pub
drwxrwxrwx 2 0 0 21 May 17 07:14 test
①get下载文件
[root@localhost ~]# lftp 192.168.112.146
lftp 192.168.112.146:~> ls
drwxr-xr-x 2 14 50 6 Jun 09 2021 pub
drwxrwxrwx 2 0 0 21 May 17 07:14 test
lftp 192.168.112.146:/> cd test/
lftp 192.168.112.146:/test> ls
-rw-r--r-- 1 0 0 0 May 17 07:14 llg.txt
lftp 192.168.112.146:/test> get llg.txt #下载到/root目录下
lftp 192.168.112.146:/test> get llg.txt -o /tmp/llg #下载到指定目录下
lftp 192.168.112.146:/test> exit
②下载目录
lftp 192.168.112.146:/test> mirror /var/ftp/test #下载test目录