Centos7搭建ftp服务器

电玩女神 2022-06-03 22:28 511阅读 0赞

Centos7搭建ftp服务器

支持访问方式:

1.浏览器访问方式:打开浏览器,在地址栏中输入ftp://服务器IP地址。然后回车。
2.磁盘访问方式:双击计算机或者我的电脑,打开磁盘对话框,然后在路径栏中输入ftp://服务器IP地址。然后回车。

  1. 客户端访问方式。

准备安装

准备工作:
- 系统镜像——CentOS-7-x86_64-DVD-1511.iso
- 配置ip地址——如我的ip192.168.133.44,配置ip参考
- 查看是否已经安装vsftpd,如果没有就安装,查看命令:rpm -qa | grep vsftpd

一、安装vsftpd组件

安装完后,有/etc/vsftpd/vsftpd.conf文件,是vsftp的配置文件,安装命令如下:

yum -y install vsftpd

二、添加一个ftp用户

此用户就是用来登录ftp服务器用的。命令如下:

useradd ftpuser

这样一个用户建完,可以用这个登录,记得用普通登录不要用匿名了。登录后默认的路径为/home/ftpuser

三、 给ftp用户添加密码

执行以下命令,设置密码。命令如下:

passwd ftpuser

四、关闭防火墙

ftp默认的端口为21,而centos默认是没有开启的。所以需要修改防火墙文件,添加开启21端口配置。本文以直接关闭防火墙为例。命令如下:

  1. systemctl stop firewalld.service #停止firewall
  2. systemctl disable firewalld.service #禁止firewall开机启动
  3. firewall-cmd --state #查看默认防火墙状态

五、修改selinux开启外网的访问

1)查看状态。命令如下:

getsebool -a | grep ftp

2)状态显示:

  1. getsebool -a | grep ftp
  2. allow_ftpd_anon_write --> off
  3. allow_ftpd_full_access --> off
  4. allow_ftpd_use_cifs --> off
  5. allow_ftpd_use_nfs --> off
  6. ftp_home_dir --> off
  7. ftpd_connect_db --> off
  8. ftpd_use_passive_mode --> off
  9. httpd_enable_ftp_server --> off
  10. tftp_anon_write --> off

3)执行以下两条命令,开启外网的访问。命令如下:

setsebool -P allow_ftpd_full_access on
setsebool -P ftp_home_dir on

六、关闭匿名访问

1)修改/etc/vsftpd/vsftpd.conf文件。命令如下:

vim /etc/vsftpd/vsftpd.conf

这里写图片描述

2)重启ftp服务。命令如下:

service vsftpd restart

七、开启被动模式

默认是开启的,但是要指定一个端口范围,打开/etc/vsftpd/vsftpd.conf文件,在后面加上

  1. pasv_min_port=30000
  2. pasv_max_port=30999

表示端口范围为30000~30999,这个可以随意改。改完重启一下vsftpd

service vsftpd restart

由于指定的这段端口范围默认是没有开启的,所以防火墙若

  • 采用开放端口方式:相应的开启这个范围端口
  • 直接关闭方式:不理会

八、设置开机启动vsftpd ftp服务

chkconfig vsftpd on

九、访问ftp

  1. 打开Windows 资源管理器,上方输入ftp://192.168.133.44/,回车。
  2. 输入步骤二设置好用户名和密码进入。默认进入目录/home/ftpuser
  3. 若想操作其它目录,需注意该目录权限问题,可通过chmod -R 777 /xxx/xxx授权

这里写图片描述

这里写图片描述

十、 java访问ftp

涉及的jar包:

  • commons-net-3.6.jar

代码清单如下:

  1. package com.zlop;
  2. import java.io.File;
  3. import java.io.FileInputStream;
  4. import java.io.FileNotFoundException;
  5. import java.io.FileOutputStream;
  6. import java.io.IOException;
  7. import java.io.InputStream;
  8. import java.io.OutputStream;
  9. import org.apache.commons.net.ftp.FTP;
  10. import org.apache.commons.net.ftp.FTPClient;
  11. import org.apache.commons.net.ftp.FTPFile;
  12. import org.apache.commons.net.ftp.FTPReply;
  13. /** * ftp上传下载工具类 * <p>Title: FtpUtil</p> * <p>Description: </p> * @author 曾令鹏 * @date 2017年11月26日下午18:11:51 * @version 1.0 */
  14. public class FTPUtil {
  15. /** * Description: 向FTP服务器上传文件 * @param host FTP服务器hostname * @param port FTP服务器端口 * @param username FTP登录账号 * @param password FTP登录密码 * @param basePath FTP服务器基础目录 * @param filePath FTP服务器文件存放路径。例如分日期存放:/2017/11/26。文件的路径为basePath+filePath * @param filename 上传到FTP服务器上的文件名 * @param input 输入流 * @return 成功返回true,否则返回false */
  16. public static boolean uploadFile(String host, int port, String username, String password, String basePath,
  17. String filePath, String filename, InputStream input) {
  18. boolean result = false;
  19. FTPClient ftp = new FTPClient();
  20. try {
  21. int reply;
  22. ftp.connect(host, port);// 连接FTP服务器
  23. // 如果采用默认端口,可以使用ftp.connect(host)的方式直接连接FTP服务器
  24. ftp.login(username, password);// 登录
  25. reply = ftp.getReplyCode();
  26. if (!FTPReply.isPositiveCompletion(reply)) {
  27. ftp.disconnect();
  28. return result;
  29. }
  30. //切换到上传目录
  31. if (!ftp.changeWorkingDirectory(basePath+filePath)) {
  32. //如果目录不存在创建目录
  33. String[] dirs = filePath.split("/");
  34. String tempPath = basePath;
  35. for (String dir : dirs) {
  36. if (null == dir || "".equals(dir)) continue;
  37. tempPath += "/" + dir;
  38. if (!ftp.changeWorkingDirectory(tempPath)) {
  39. if (!ftp.makeDirectory(tempPath)) {
  40. return result;
  41. } else {
  42. ftp.changeWorkingDirectory(tempPath);
  43. }
  44. }
  45. }
  46. }
  47. //设置上传文件的类型为二进制类型
  48. ftp.setFileType(FTP.BINARY_FILE_TYPE);
  49. //上传文件
  50. if (!ftp.storeFile(filename, input)) {
  51. return result;
  52. }
  53. input.close();
  54. ftp.logout();
  55. result = true;
  56. } catch (IOException e) {
  57. e.printStackTrace();
  58. } finally {
  59. if (ftp.isConnected()) {
  60. try {
  61. ftp.disconnect();
  62. } catch (IOException ioe) {
  63. }
  64. }
  65. }
  66. return result;
  67. }
  68. /** * Description: 从FTP服务器下载文件 * @param host FTP服务器hostname * @param port FTP服务器端口 * @param username FTP登录账号 * @param password FTP登录密码 * @param remotePath FTP服务器上的相对路径 * @param fileName 要下载的文件名 * @param localPath 下载后保存到本地的路径 * @return */
  69. public static boolean downloadFile(String host, int port, String username, String password, String remotePath,
  70. String fileName, String localPath) {
  71. boolean result = false;
  72. FTPClient ftp = new FTPClient();
  73. try {
  74. int reply;
  75. ftp.connect(host, port);
  76. // 如果采用默认端口,可以使用ftp.connect(host)的方式直接连接FTP服务器
  77. ftp.login(username, password);// 登录
  78. reply = ftp.getReplyCode();
  79. if (!FTPReply.isPositiveCompletion(reply)) {
  80. ftp.disconnect();
  81. return result;
  82. }
  83. ftp.changeWorkingDirectory(remotePath);// 转移到FTP服务器目录
  84. FTPFile[] fs = ftp.listFiles();
  85. for (FTPFile ff : fs) {
  86. if (ff.getName().equals(fileName)) {
  87. File localFile = new File(localPath + "/" + ff.getName());
  88. OutputStream is = new FileOutputStream(localFile);
  89. ftp.retrieveFile(ff.getName(), is);
  90. is.close();
  91. }
  92. }
  93. ftp.logout();
  94. result = true;
  95. } catch (IOException e) {
  96. e.printStackTrace();
  97. } finally {
  98. if (ftp.isConnected()) {
  99. try {
  100. ftp.disconnect();
  101. } catch (IOException ioe) {
  102. }
  103. }
  104. }
  105. return result;
  106. }
  107. public static void main(String[] args) {
  108. try {
  109. FileInputStream in=new FileInputStream(new File("C:\\Users\\zenglingpeng\\Desktop\\fdfs\\source\\cc.jpg"));
  110. boolean flag = uploadFile("192.168.133.44", 21, "ftpuser", "123456", "/home/ftpuser","/", "cc.jpg", in);
  111. System.out.println(flag);
  112. } catch (FileNotFoundException e) {
  113. e.printStackTrace();
  114. }
  115. }
  116. }

综上,基本就走完了。

发表评论

表情:
评论列表 (有 0 条评论,511人围观)

还没有评论,来说两句吧...

相关阅读