搭建linux ftp伺服器,以及create file failed等錯誤
最近搭建了一個ftp伺服器,分享一下踩過的坑。
首先說明,我要搭建的是一個匿名的ftp伺服器,對內網所有使用者開放,可以任意上傳和下載。首先關閉selinux
配置 /etc/selinux Enforcing 變disable。
yum install vsftpd -y
vim /etc/vsftpd/vsftpd.conf
修改:
並且在最後加入:local_root=/var/ftp
chmod 755 /var/ftpchmod 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地址,就會出現叢