1. 程式人生 > >搭建linux ftp伺服器,以及create file failed等錯誤

搭建linux ftp伺服器,以及create file failed等錯誤

最近搭建了一個ftp伺服器,分享一下踩過的坑。

首先說明,我要搭建的是一個匿名的ftp伺服器,對內網所有使用者開放,可以任意上傳和下載。首先關閉selinux

配置 /etc/selinux Enforcing 變disable。

yum install vsftpd -y

vim /etc/vsftpd/vsftpd.conf
修改:

anonymous_enable=YES 允許匿名登入anon_upload_enable=YES 允許匿名上傳anon_mkdir_write_enable=YES 允許匿名建立目錄write_enable=YES 允許ftp寫

並且在最後加入:local_root=/var/ftp

chmod 755 /var/ftp
chmod 777 /var/ftp/pub

這樣,一個簡單的匿名ftp伺服器就搭好了,連線後會自動進入/var/ftp ,但是隻能往pub下傳檔案。

如果你想修改預設的21埠:

vim /etc/vsftpd/vsftpd.conf
加入如下:
listen_port=8021


vim /etc/services
找到ftp選項並將21修改成你設定的埠,本文為8021
ftp             8021/tcp
ftp             8021/udp          fsp fspd


service vsftpd restart


檢視埠號是否成功

netstat -utlpn | grep vsftp

附送連線程式碼:


import sun.net.ftp.FtpClient;
import sun.net.ftp.FtpProtocolException;

import java.io.IOException;
import java.net.InetAddress;
import java.net.UnknownHostException;

import com.xxx.collector.client.ftp.FtpUtils;

public class FtpTest {

	static String ip = "xx.xx.xxx.xx";
	static int port = 9998;//可以修改埠,預設21,我這裡修改了
	static String username = "ftp";//預設用ftp使用者登入
	static String password = "ftp";
	static String path = "/pub";

	public static void main(String[] args) throws FtpProtocolException, IOException {

		System.out.println(hostAddress()); // read host ip

		upload("F:\\work\\aaa.txt", "afsfsssaf.txt");

		// download("F:/Temp/
[email protected]
", // "/tmp/users/[email protected]"); } public static void upload(String localPath, String ftpPath) throws FtpProtocolException, IOException { // 連線ftp FtpClient ftp = FtpUtils.connectFTP(ip, port, username, password); // 切換目錄 預設連進去是/var/ftp 我們需要切換到pub,因為只有pub才授予了許可權 FtpUtils.changeDirectory(ftp, path); FtpUtils.upload(localPath, ftpPath, ftp); FtpUtils.disconnectFTP(ftp); } public static void upload(String ip, int port, String username, String password, String Localpath, String remotePath){ FtpClient ftp = FtpUtils.connectFTP(ip, port, username, password); FtpUtils.changeDirectory(ftp, remotePath); FtpUtils.upload(Localpath, remotePath, ftp); FtpUtils.disconnectFTP(ftp); } public static void download(String localPath, String ftpPath){ FtpClient ftp = FtpUtils.connectFTP(ip, port, username, password); FtpUtils.changeDirectory(ftp, path); FtpUtils.download(localPath, ftpPath, ftp); FtpUtils.disconnectFTP(ftp); } public static void listFiles(String path) throws FtpProtocolException, IOException { FtpClient ftp = FtpUtils.connectFTP(ip, port, username, password); System.out.println(ftp.listFiles(path)); } public static String hostAddress() throws UnknownHostException { String address = ""; InetAddress addr = InetAddress.getLocalHost(); address = addr.getHostAddress(); return address; } }
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.InetSocketAddress;
import java.net.SocketAddress;

import sun.net.ftp.FtpClient;
import sun.net.ftp.FtpProtocolException;

public class FtpUtils {

	/**
	 * 連線ftp伺服器
	 * 
	 * @param url
	 * @param port
	 * @param username
	 * @param password
	 *
	 * @return FtpClient
	 * @throws FtpProtocolException
	 * @throws IOException
	 */
	public static FtpClient connectFTP(String url, int port, String username, String password){

		// 建立ftp
		FtpClient ftp = null;

		// 建立地址
		SocketAddress addr = new InetSocketAddress(url, port);

		// 連線
		ftp = FtpClient.create();

		try {
			// 登陸
			ftp.connect(addr);
			ftp.login(username, password.toCharArray());
			ftp.setBinaryType();
		} catch (Exception e) {
			throw new RuntimeException("ftp連線登入出現錯誤!", e);
		}
		return ftp;
	}

	/**
	 * 切換目錄
	 * 
	 * @param ftp
	 * @param path
	 * @throws IOException
	 * @throws FtpProtocolException
	 */
	public static void changeDirectory(FtpClient ftp, String path){
		try {
			ftp.changeDirectory(path);
		} catch (Exception e) {
			throw new RuntimeException("轉換目錄出現錯誤!", e);
		}
	}

	/**
	 * 關閉ftp
	 * 
	 * @param ftp
	 * @throws IOException
	 */
	public static void disconnectFTP(FtpClient ftp){
		try {
			ftp.close();
		} catch (IOException e) {
			throw new RuntimeException("關閉ftp連接出現錯誤!", e);
		}
	}

	/**
	 * 上傳檔案
	 * 
	 * @param localFile
	 * @param ftpFile
	 * @param ftp
	 * @throws IOException
	 * @throws FtpProtocolException
	 */
	public static void upload(String localFile, String ftpFile, FtpClient ftp){
		OutputStream os = null;
		FileInputStream fis = null;

		// 將ftp檔案加入輸出流中。輸出到ftp上
		try {
			os = ftp.putFileStream(ftpFile);
			File file = new File(localFile);
			
			// 建立一個緩衝區
			fis = new FileInputStream(file);
			byte[] bytes = new byte[1024];
			int c;
			while ((c = fis.read(bytes)) != -1) {
				os.write(bytes, 0, c);
			}
			System.out.println("upload success!!");
		} catch (Exception e) {
			throw new RuntimeException("上傳檔案出錯!", e);
		} finally {
			try {
				if (os!=null) {
					os.close();
				}
				if (fis != null) {
					fis.close();
				}
			} catch (IOException e) {
				throw new RuntimeException("上傳檔案關流出錯!", e);
			}
		}
	}

	/**
	 * 檔案下載
	 * 
	 * @param localFile
	 * @param ftpFile
	 * @param ftp
	 * @throws IOException
	 * @throws FtpProtocolException
	 */
	public static void download(String localFile, String ftpFile, FtpClient ftp) {
		InputStream is = null;
		FileOutputStream fos = null;
		try {
			
			// 獲取ftp上的檔案
			is = ftp.getFileStream(ftpFile);
			File file = new File(localFile);
			byte[] bytes = new byte[1024];
			int i;
			fos = new FileOutputStream(file);
			while ((i = is.read(bytes)) != -1) {
				fos.write(bytes, 0, i);
			}
			System.out.println("download success!!");
		} catch (Exception e) {
			throw new RuntimeException("下載檔案出錯!", e);
		} finally {
			try {
				fos.close();
				is.close();
			} catch (IOException e) {
				throw new RuntimeException("下載檔案關流出錯!", e);
			}
		}
	}
}

常見問題:

553 Could not create file

這個問題的常見原因是上傳目錄沒有寫入許可權,只要配置想要上傳的目錄為777許可權即可 如:  chmod 777 /var/ftp/pub

vsftpd:500 OOPS: vsftpd: refusing to run with writable root inside chroot ()

這個問題原因很多,我的原因是把/var/ftp這個目錄設許可權為777了,ftp禁止設定這個目錄為777,我們可以吧這個目錄設定為755,然後mkdir一個子目錄比如/upload  然後把這個子目錄設定為777,通過上面程式碼裡面的changeDirectory方法改為/upload

當然也可以設定

vi /etc/vsftpd/vsftpd.conf
新增 allow_writeable_chroot=YES

,這個方法我感覺能行,未測試,上面的解決方法經過測試,能夠解決問題

還有一個問題是,配置都正常,但就是連不上ftp。這種情況有可能是防火牆未關閉,但是埠未開,ftp工具有兩種連線方式,主動和被動,這兩種方式都需要開啟兩個埠,主要要求21埠和20埠(反正就是自己配置的埠和這個埠號-1的埠),而被動模式則需要開啟21埠和任意一埠(貌似是5000以內?具體沒仔細看),如果你怎麼都連不上,嘗試注意一下防火牆和埠是否開啟。

詳細講解:http://blog.csdn.net/houbin0912/article/details/72578688

http://blog.sina.com.cn/s/blog_7b6fc4c901014eyv.html

首先看看是否開啟ftp伺服器以及埠,然後看看你登入的使用者是否存在於一下兩個檔案:vsftpd.ftpusers,vsftpd.user_list

vsftpd.ftpusers:位於/etc/vsftpd目錄下。它指定了哪些使用者賬戶不能訪問FTP伺服器,例如root等。
vsftpd.user_list:位於/etc/vsftpd目錄下。該檔案裡的使用者賬戶在預設情況下也不能訪問FTP伺服器,僅當vsftpd .conf配置檔案裡啟用userlist_enable=NO選項時才允許訪問。

vsftpd.conf:位於/etc/vsftpd目錄下。來自定義使用者登入控制、使用者許可權控制、超時設定、伺服器功能選項、伺服器效能選項、伺服器響應訊息等FTP伺服器的配置。

檢查完畢後重啟service vsftpd restart

相關推薦

搭建linux ftp伺服器以及create file failed錯誤

最近搭建了一個ftp伺服器,分享一下踩過的坑。首先說明,我要搭建的是一個匿名的ftp伺服器,對內網所有使用者開放,可以任意上傳和下載。首先關閉selinux配置 /etc/selinux Enforcing 變disable。yum install vsftpd -yvim

CentOS系統下使用vsftpd成功搭建FTP伺服器

CentOS系統下使用vsftpd成功搭建了FTP伺服器,這裡簡單記錄一下步驟,以作後用。下面直接說明步驟: 更新源  # yum update  安裝vsftpd  yum -y install vsftpd  新增ftp賬號,密碼和目錄

Ubuntu Linux 搭建一個簡單的ftp伺服器用於上傳和下載檔案

第一步,安裝軟體 $ sudo apt-get update $ sudo apt-get install vsftpd 第二步,修改配置檔案 $ sudo vi /etc/vsftpd.conf

Linux——FTP伺服器部署FTP安全部署(匿名本地虛擬使用者的管理)

一、FTP的概念 FTP 是File Transfer Protocol(檔案傳輸協議)的英文簡稱,而中文簡稱為“文傳協議”。用於Internet上的控制檔案的雙向傳輸 二、FTP的部署 服務端部署: 安裝vsftpd 安裝 lftp

win10搭建FTP伺服器區域網共享

經歷了九九八十一難,終於達到人生巔峰了哇。下面請看圖!!! 標註紅框的都是我的設定。 1.新建使用者,可以設定多個使用者,給予不同的許可權。  2.如果沒有開啟IIS,進入控制面板開啟 3.回到計算機管理    4.設定ip

POI匯出時寫一份到ftp伺服器一份下載給客戶端 ftp伺服器搭建(離線安裝vsftpd)配置 poi實現百萬級資料匯出 oi實現百萬級資料匯出

導語:   昨天接到專案經理這麼一個需求,讓我在POI匯出Excel的時候寫一份到我之前搭建的ftp伺服器上。所以就有了這篇部落格首先我們來分析下之前的業務邏輯:我們建立並構造了一個workbook,然後構建了一個OutputStream輸出流,然後我們把資料寫入輸出流中就可以被客戶端下載。   現在我們

linux搭建公網ftp伺服器

Linux搭建ftp伺服器彙總整理 一、檢查linux中是否已經安裝vsftpd服務端軟體 rpm -qa |grep vsftpd 二、解除安裝linux中的vsftpd服務端軟體 rpm -e vsftpd安裝版本號 三、安裝linux中的vsftpd服務端 yum install vsftp

Windows10搭建FTP伺服器FlashFXP測試連線。

1、開啟IIS與FTP服務。控制面板-->程式和功能-->啟動或關閉windows功能-->勾選所需功能2、控制面板-->管理工具-->雙擊開啟IIS    建立ftp伺服器。在左邊選單欄上的“網站”右鍵-->新增FTP站點,名稱隨便填,物

用樹莓派搭建你自己的Web伺服器以及一個可以外網訪問的Blog

先決條件很簡單,樹莓派或是其他開發板甚至是LinuxPC,路由器。 我使用的是一代樹莓派b+,記憶體512M加上超頻到極限的單核處理器,實在是無法與樹莓派2相媲美,不得已只好選擇相對輕量的環境完成這項

linux下使用nginx+nginx-rtmp-module搭建流媒體伺服器傳送即時影像

1:前言 公司最近想做利用網路來傳輸視訊流的影響系統,然後我又開始鼓搗不太熟悉的linux系統,好在網上關於這方面的資源挺多,按照相關的設定以及方法能大部分完成,其他附上我搭建時遇到的一些小問題的解決辦法。 2:搭建的環境: (1):linux系統:Ubuntu 16.

ubuntu搭建ftp伺服器並配置虛擬使用者許可權

安裝並啟動 FTP 服務 安裝 VSFTPD 使用 apt-get 安裝 [vsftpd]: sudo apt-get install vsftpd -y vsftpd 是在 Linux 上被廣泛使用的 FTP 伺服器,根據其官網介紹,它可能是 UNIX-lik

Mac搭建本地svn伺服器並用Cornerstone連線伺服器 以及報錯Permission denied處理

Mac預設已經安裝了svn,我們只需要進行配置並開啟就可以了 首先我們可以驗證一下是否安裝了svn,開啟終端,輸入命令 svnserve --version 這裡可以看到目前svn的版本號,說明已經安裝好了svn 下面正式開始配置svn 1.建立程式碼庫

Linux建立FTP伺服器新增使用者設定使用者獨立目錄的過程及遇到的問題

1、查詢linux伺服器是否已經安裝過vsftpd服務; rpm -qa|grep vsftpd 解除安裝已經安裝服務命令:rpm -e vsftpd 2、未安裝,安裝vsftpd服務;

Ubuntu 搭建svn服務器 以及常見錯誤解決方案

mkdir creat mod 服務 csdn 解決 details 守護 center 一、安裝命令: 1)以root身份登錄。執行:sudo su -命令 2)執行安裝命令:apt-get install subversion 二、創建項目目錄 1)mkdir /

linux共享庫以及/etc/ld.so.conf檔案的應用

靜態連結的可執行程式。靜態可執行程式包含執行所需的所有函式 — 換句話說,它們是“完整的”。因為這一原因,靜態可執行程式不依賴任何外部庫就可以執行。檔案大 動態連結的可執行程式。動態可執行程式是不完整的程式,它依靠外部共享庫來提供執行所需的許多函式。檔案小 我們可以用 ldd 命令來確定某一

有10臺linux web伺服器你該怎麼管理。你沒有上任交接工作你該怎麼展開自己工作

假如你跳槽到一家公司,有10臺linux  web伺服器,你該怎麼管理。你沒有上任交接工作,你該怎麼展開自己工作。 1. 搭建自己的監控伺服器zabbix 2. 找公司要賬號,密碼,ip 3. 檢視at和crontab記錄,建立自己備份機制 4. 遠端管理工具securiCRT或

iOS上傳影象到伺服器以及伺服器PHP接收的幾種方法

iOS上傳影象到伺服器,以及伺服器PHP接收的幾種方法 1. 將圖片轉換為Base64編碼,POST上傳。PHP將Base64解碼為二進位制,再寫出檔案。缺點:不能上傳較大的圖片 // iOS(Swift) func upload(image: UIImage, url: S

springSecurity的練習筆記--認證伺服器資源伺服器以及單點登陸

   花了一天半左右,將springSecurity後面的練習看完並且進行練習實踐與測試!   按照慣例進行筆記的整理。  認證伺服器的構建:    核心依賴:    注意,是oauth2而不

linux ftp伺服器

部署 FTP 伺服器 FTP ( 檔案傳輸協議 ) 是 INTERNET 上仍常用的最老的網路協議之一 , 它為系統提供了通過網路與遠端伺服器進行傳輸的簡單方法在 RED HAT ENTREPRISE LINUX 6 中。 FTP 伺服器包的名稱為 VSFTPD , 它代表 Very S

阿里雲搭建hadoop叢集伺服器內網、外網訪問問題(詳解。。。)

  這個問題花費了我將近兩天的時間,經過多次是錯和嘗試,現在想分享給大家來解決此問題避免大家入坑,以前都是在區域網上搭建的hadoop叢集,並且是區域網訪問的,沒遇見此問題。 因為阿里雲上搭建的hadoop叢集,需要配置對映叢集經過內網訪問,也就是區域網的ip地址。   如果配置為公網IP地址,就會出現叢