1、FTP是什么?
2、FTP和HTTP的解释与区别
3、在Linux中配置FTP服务器
4、配置nginx,配合ftp服务器,保证项目的安全性
1、FTP(file transfer protocol)就是文件传输协议,在网络上做 文件传输(以流的形式进行传输) 的一个协议。
2、首先需要搞懂HTTP协议:
HTTP是一种为了将位于全球各个地方的Web服务器中的内容发送给不特定多数用户而制订的协议。也就是说,可以把HTTP看作是旨在向不特定多数的用户“发放”文件的协议。
HTTP使用于从服务器读取Web页面内容。Web浏览器下载Web服务器中的HTML文件及图像文件等,并临时保存在个人电脑硬盘及内存中以供显示。
使用HTTP下载软件等内容时的不同之处只是在于是否以Web浏览器显示的方式保存,还是以不显示的方式保存而已。结构则完全相同。因此,只要指定文件,任何人都可以进行下载。
而FTP是为了在特定主机之间“传输”文件而开发的协议。因此,在FTP通信的起始阶段,必须运行通过用户ID和密码确认通信对方的认证程序。
FTP下载和HTTP下载的区别之一就在与此。
不过,访问下载站点并进行FTP下载时,一般情况下不会出现输入用户ID及密码的窗口。这是因为使用了Anonymous FTP的结构。
所谓Anonymous FTP是指将用户名作为“Anonymous”(匿名之意)、将密码作为用户的邮件地址注册FTP服务器的方法。Web浏览器首先在用户名中输入Anonymous、并在密码中输入设定在自身的邮件地址来访问FTP服务器。
在下载站点的FTP服务器中,如果用户名是Anonymous,那么任何人都可以进行访问,用户无需一一输入用户名和密码也可以进行访问
3、在Linux中配置FTP服务器:
但这里有三个问题:
(1)如果FTP服务器有多台,服务器无法识别问题:
解决:在用户名表中添加字段(ftp_server),代表的是FTP服务器的编号
(2)上传的文件名重复问题
解决:使用用户的id+当前时间的毫秒数+任意的随机数 这样的方式修改掉原始文件名
(3)文件存放不规律不方便后期的查询和维护:
解决:可以根据当前日期进行分文件夹存放;如2019/09/03/
4、开始配置FTP服务器
要求:所有的FTP服务器都不能叫ftp,Linux中新建虚拟机以及进行配置的时候也要避免直接使用ftp作为某名称,名字冲突问题
1)检测Linux是否已经安装了ftp:
rpm -qa | grep vsftpd 在Linux上ftp叫做vsftpd,如果什么都没有显示,说明没有安装
2)安装ftp
yum -y install vaftpd
看到Complete说明成功!
3)启动ftp(和防火墙的命令类似)
service vsftpd start
看到以下信息说明启动成功: Starting vsftpd for vsftpd: [ OK ]
此外还有:service vsftpd stop 停止 service vsftpd restart 重启
4)设置ftp的开机启动
chkconfig vsftpd on
5)配置ftp
linux会在ftp默认安装在/etc/目录下,对vsftpd下的vsftpd.conf目录进行配置就行了。
vi /etc/vsftpd/vsftpd.conf
配置信息有:
# 禁止匿名用户anonymous登录
anonymous_enable=NO
# 允许本地用户登录
local_enable=YES
# 让登录的用户有写权限(上传,删除)
write_enable=YES
# 默认umask
local_umask=022
# 把传输记录的日志保存到/var/log/vsftpd.log
xferlog_enable=YES
xferlog_file=/var/log/vsftpd.log
xferlog_std_format=NO
# 允许ASCII模式上传
ascii_upload_enable=YES
# 允许ASCII模式下载
ascii_download_enable=YES
# 使用20号端口传输数据
connect_from_port_20=YES
# 欢迎标语
ftpd_banner=Welcome to use my test ftp server.
# 接下来的三条配置很重要
# chroot_local_user设置了YES,那么所有的用户默认将被chroot,
# 也就用户目录被限制在了自己的home下,无法向上改变目录。
# chroot_list_enable设置了YES,即让chroot用户列表有效。
# ★超重要:如果chroot_local_user设置了YES,那么chroot_list_file
# 设置的文件里,是不被chroot的用户(可以向上改变目录)
# ★超重要:如果chroot_local_user设置了NO,那么chroot_list_file
# 设置的文件里,是被chroot的用户(无法向上改变目录)
chroot_local_user=NO(!!!!!有坑,当使用Java去连接ftp并上传的时候,如果为YES,不会自动创建文件的目录信息)
chroot_list_enable=YES
# touch /etc/vsftpd/chroot_list 新建(在配置完后去手动创建chroot_list这个文件)
chroot_list_file=/etc/vsftpd/chroot_list
# 以standalone模式在ipv4上运行
listen=YES
# PAM认证服务名,这里默认是vsftpd,在安装vsftpd的时候已经创建了这个pam文件,
# 在/etc/pam.d/vsftpd,根据这个pam文件里的设置,/etc/vsftpd/ftpusers
# 文件里的用户将禁止登录ftp服务器,比如root这样敏感的用户,所以你要禁止别的用户
# 登录的时候,也可以把该用户追加到/etc/vsftpd/ftpusers里。
pam_service_name=vsftpd
6)重启ftp
service vsftpd restart
看到以下信息说明重启成功:
Shutting down vsftpd: [OK ]
Starting vsftpd for vsftpd: [ OK ]
7)执行一下5个命令,让刚才的配置生效:(执行时间较长,需等待)
getsebool -a | grep ftpd
setsebool -P ftp_home_dir 1
setsebool -P allow_ftpd_full_access 1
setsebool -P allow_ftpd_use_cifs 1
setsebool -P allow_ftpd_use_nfs 1
8)创建ftp用户
useradd ftp的用户名(ftpuser)-s /sbin/nologin -d /home/ftp(此前home目录下没有ftp文件夹)
/home/ftp是将来用户上传文件的时候所到的跟目录;
9)为ftp用户设置密码
passwd ftp的用户名(ftpuser)
10)使用filezilla连接ftp服务器测试
!!!若要在/home/ftp目录创建文件夹和文件,需要使用配置的ftp用户(ftpuser),不能去使用root,可能无法识别。
5、配置nginx,配合ftp服务器,保证项目的安全性
1、使用xftp工具把nginx上传到Linux服务器上
2、解压nginx: tar -zxvf XXX
3、先安装nginx所必须的配置包
yum -y install gcc pcre-devel openssl openssl-devel
再创建快捷方式
./configure --prefix=/usr/local/nginx-1.17.3
4、编译nginx
make && make install
5、修改nginx的配置
/usr/local/nginx-1.17.3/conf目录修改
vim nginx.conf
(1)把第一行的注解打开,然后将user对应的nobody改成root
(2)在location中修改:将root 对应的值改为:/home/ftp/www
location /{
root /home/ftp/www;
}
这里的/home/ftp已经有了,但是www这个文件夹还没有,需要在filezilla中新建(根据ftpuser用户来创建文件夹)
6、启动nginx
./nginx