vsftpd添加用户_vsftpd和Tengine-图片访问

第一步:安装vsftpd软件

[root@node0719 ~]# yum -y install vsftpd

第二步:关闭匿名访问

修改vsftpd配置文件  vi /etc/vsftpd/vsftpd.con

5ce4dc98c7e14ee66b4f4b2bf8924900.png

第三步:添加一个FTP用户

创建一个用户,专门用来访问vsftpd服务:
[root@node0719 ~]# useradd ftpuser
[root@node0719 ~]# passwd ftpuser

第四步:设置防火墙

vsftpd服务默认端口号为21,修改防火墙,开放此端口,重启防火墙。
[root@node0719 ~]# vim /etc/sysconfig/iptables
[root@node0719 ~]# service iptables restart

第五步:修改selinux(Linux安全内核系统)

(1)先查看selinux,默认是禁用了ftp访问的。
[root@bogon ~]# getsebool -a | grep ftp  
allow_ftpd_anon_write --> off
allow_ftpd_full_access --> off
allow_ftpd_use_cifs --> off
allow_ftpd_use_nfs --> off
ftp_home_dir --> off
ftpd_connect_db --> off
ftpd_use_passive_mode --> off
httpd_enable_ftp_server --> off
tftp_anon_write --> off

(2)修改selinux,开放ftp访问权限
[root@bogon ~]# setsebool -P allow_ftpd_full_access on
[root@bogon ~]# setsebool -P ftp_home_dir on

第六步:启动vsftpd服务

[root@node0719 vsftpd]# service vsftpd start
为 vsftpd 启动 vsftpd:                                    [确定]

第七步:通过浏览器访问测试

访问地址:ftp://192.168.23.12:21,发现无法访问。
 
原因:被动模式下,数据传输服务被防火墙拦截了。
 

(1)被动模式

第二次请求过程中,客户端跟服务端建立数据通道;
服务端被动将数据响应给客户端。
第二次请求数据传输,会随机生成一个服务端口。被防火墙禁用。

e4d1efbf75528599ba256ceb668ab299.png

2)主动模式

服务端主动向客户端发送数据,会被客户端的防火墙禁掉。
多数客户端不支持主动模式,不安全。

193462da86616d538d3672bcb4579b8b.png

第八步:配置被动模式

(1)编辑/etc/vsftpd/vsftpd.conf文件
[root@bogon ~]# vim /etc/vsftpd/vsftpd.conf

(2)添加防火墙范围设置(在文件尾部添加即可):
pasv_min_port=30000
pasv_max_port=30999
	
(3)修改防火墙,开启30000:30999之间所有的端口。
(4)重启防火墙。
(5)重启vsftpd服务

b73d864c4b421070777e7bcb0941a962.png

再次访问浏览器,发现可以正常连接了

9c69e8961faee803bc18fb173ad795c2.png

第九步:java代码测试上传功能

Java代码中,是通过FtpClient客户端建立和服务端的连接的。在ego-base工程中测试。

(1)在ego-base中添加ftp服务的依赖

<dependency>
 <groupId>commons-net</groupId>
 <artifactId>commons-net</artifactId>
</dependency>

(2)创建测试类

说明:使用ftpuser用户上传。指定上从目录/home/ftpuser/ego/images

注意:为了保证ftpuser有这个目录下的写权限,我们要用ftpuser用户创建这个目录。

su命令:切换用户

 [root@node0719 ~]#su ftpuser
[ftpuser@node0719 ~]#mkdir -p /home/ftpuser/ego/images

测试类TestFtp

package cn.gzsxt.manager.test;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.SocketException;

import org.apache.commons.net.ftp.FTP;
import org.apache.commons.net.ftp.FTPClient;

public class TestFtp {

	static String baseUrl = "/home/ftpuser/ego/images";
	public static void main(String[] args) {
		//1、建立和服务端的连接
		FTPClient client = new FTPClient();
		try {
			client.connect("192.168.23.12", 21);
			//2、身份认证
			client.login("ftpuser", "ftpuser");
			//3、指定源文件
			File file = new File("F:图片5b7a8115N89613314.jpg");
			InputStream local = new FileInputStream(file);
			//4、指定文件上传的方式   二进制字节码
			client.setFileType(FTP.BINARY_FILE_TYPE);
			//5、指定上传目录  默认是/home/ftpuser,即ftpuser用户的家目录
			// 切换到ftpuser用户来创建目录。     /home/ftpuser/ego/images/
			client.changeWorkingDirectory("/home/ftpuser/ego/images");
			//6、设置文件上传的模式,指定为被动模式
			client.enterLocalPassiveMode();
			
			boolean flag = client.storeFile("test.jpg", local);
			if(flag){
				System.out.println("上传成功");
			}else{
				System.out.println("上传失败");
			}
		} catch (SocketException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}

封装FTPUtils工具类

package cn.gzsxt.base.utils;
import java.io.IOException;
import java.io.InputStream;
import org.apache.commons.net.ftp.FTP;
import org.apache.commons.net.ftp.FTPClient;
public class FtpUtils {

	FTPClient client = null;
	
	/**
	 * 文件上传
	 * @param hostName   ftp主机名
	 * @param port       ftp主机端口
	 * @param username   上传用户名
	 * @param password   上传用户密码
	 * @param basePath   上传基础路径
	 * @param filePath   文件存放路径
	 * @param remoteFileName  上传后文件名称
	 * @param in         文件输入流
	 * @return
	 */
	public static boolean upload(String hostName,int port,String username,String password,String basePath,
			String filePath,String remoteFileName,InputStream in){
		
		//1、创建客户端
		FTPClient client = new FTPClient();

		try {
			
			//2、建立和服务端的链接
			client.connect(hostName, port);
			
			//3、登陆服务端
			client.login(username, password);
			
			//4、指定图片上传的方式为二进制,即字节流
			client.setFileType(FTP.BINARY_FILE_TYPE);
			
			//5、指定上传的访问模式为被动模式    说明:大部分的操作系统,默认的都是被动模式,并且禁用了主动了模式
			client.enterLocalPassiveMode();
			
			//6、指定上传的目录     默认目录 是当前ftpuser用户的家目录   
			boolean flag = client.changeWorkingDirectory(basePath+filePath);
			
			//如果切换目录失败,则创建指定的目录
			if(!flag){
				
				//创建目录失败,则可能是存在没有创建的父目录
				if(!client.makeDirectory(basePath+filePath)){
					String tempPath = basePath;
					
					String[] split = filePath.split("/");
					for (String string : split) {
						if(null!=string && !"".equals(string)){
							tempPath = tempPath+"/"+string;
							
							//先判断第一层路径是否存在,如果不存在,则创建
							if(!client.changeWorkingDirectory(tempPath)){
								//如果创建第一层路径成功,则判断是否能切换到这一层路径
								if(client.makeDirectory(tempPath)){
									//切换失败,则返回false
									if(!client.changeWorkingDirectory(tempPath)){
										return false;
									}
								//如果创建第一层路径失败,则直接返回false
								}else{
									
									return false;
								}
							}
						
						//如果有空路径,则直接跳过
						}else{
							continue;
						}
					}
				}else{
					//创建成功,则直接切换到指定的目录
					if(!client.changeWorkingDirectory(basePath+filePath)){
						return false;
					}
				}
				
			}
			
			//8、上传
			boolean result = client.storeFile(remoteFileName, in);
			
			return result;
			
			
		} catch (Exception e) {
			
			e.printStackTrace();
			
			return false;
		}finally {
			//9,退出登录,并关闭连接
			try {
				if(client.logout()){
					client.disconnect();
					
				}
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
		
	}
}

Tengine图片服务器

搭建步骤说明:
(1)安装Tengine。(源码安装)
(2)配置图片服务。

第一步:上传、解压

[root@node0719 ~]# tar -zxvf tengine-2.1.0.tar.gz

第二步:预编译

预编译作用:检查编译过程中所需要的依赖、环境。
依次安装预编译过程中,所需要的环境。(根据个人虚拟机安装所缺环境)
[root@node07192 ~]# cd tengine-2.1.0
[root@node07192 tengine-2.1.0]# ./configure

(1)缺少c编译环境

2e202e21aa4b4172a234b2dd4ef00b4e.png

(2)缺少pcre环境

4414166d0eaaf159ee5ada4cf9cda92c.png

[root@node07192 tengine-2.1.0]# yum -y install pcre-devel

(3)缺少openssl环境

6c72302916ffb6377a9d806ab16c2688.png

(4)缺少zlib环境

[root@node07192 tengine-2.1.0]# yum install -y zlib zlib-devel

第三步:编译

[root@node07192 tengine-2.1.0]# make

第四步:安装

默认安装路径/usr/local/nginx/
[root@node07192 tengine-2.1.0]# make install

第五步:启动Tengine服务器

[root@node07192 tengine-2.1.0]# cd /usr/local/nginx/sbin/
[root@node07192 sbin]# ./nginx

第六步:访问测试

(1)查看配置文件。默认服务端口是80

[root@node07192 sbin]# cd ../conf
[root@node07192 conf]# vim nginx.conf

8cdf9c7740f36998bca7239a75f5399a.png

(2)修改防火墙,开发80端口。重启防火墙

[root@node07192 conf]# vim /etc/sysconfig/iptables
[root@node07192 conf]# service iptables restart

(3)浏览器访问地址 http://192.168.23.12:80

bf160a2ce8bc2a6cfbe74dda6b86c48f.png

第七步:配置图片服务

(1)修改/conf/nginx.conf文件。指定图片根路径和服务端口

2e69e4372cfd5ebcfed0bb36f5aa0c7c.png

(2)重启tengine服务器

[root@node07192 sbin]# ./nginx -s reload

(3)浏览器访问图片

注意:服务器加载的根路径是/home/ftpuser/ego

所以浏览器中访问图片的目录为/images/+图片名称.jpg

d72feccfdbfee73c59fc178062cbe8b0.png

(4)解决访问图片的权限问题

在第六步中,我们访问的页面是/html/index.html

所以:我们只需要将图片的权限修改为index.html一致即可。

查看/html/index.html的权限

c0a11855b051e77e152e748683ce2156.png

修改ftpuser目录的权限为可读、可执行

[root@node07192 nginx]# chmod 705 /home/ftpuser

(5)重新访问图片,成功!!!

bce7a228e6016dc31f994a7a11fcdf12.png

图片访问路径说明:

图片真实目录时  /home/ftpuser/ego/images
在Tengine中,设置得图片资源的根目录为  /home/ftpuser/ego

意味着,我们每次请求图片的时候,是直接到/home/ftpuser/ego这个目录下,找图片的。因此图片的访问路径中,/home/ftpuser/ego这个路径是要省掉的。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值