Linux-FTP-作業


現有作業

1. (其它)
ftp服務器搭建,使用你姓名學號命名的賬號登陸,以及路徑下存放一個你學號和姓名命名的文件。能夠在ftp中顯示出來,同時在本地虛擬機上通過命令來上傳和下載一個你宿舍號同名文件。(全部需要附帶mac地址截圖)

yum install vsftpd  -y //安裝服務
yum install ftp -y //安裝客戶端

在/var/ftp/下創建自己的學號+姓名的賬號

useradd -d /var/ftp/20190412430233lny -s /sbin/nologin -g ftp 20190412430233lny 

為你的賬號設置密碼 要有大小寫字母+數字+符號 否則無法設置

passwd 20190412430233lny

 進入到 etc修改vsftpd配置文件

cd /etc/vsftpd/
ls
vim vsftpd.conf

 ins進入輸入模式 如下圖進行操作

改為NO后面再加上這一行

local_root= 如圖所示

esc 然后 :wq保存

配置一下我們創建的ftp文件夾權限

cd /var/ftp/  //進入這個文件夾
ls  //查看有什么東西
chmod 777 如圖所示  //給你文件夾配置777權限

cd到當前賬號的文件夾內 創建一個txt文件

cd /var/ftp/20190412430233lny/  //進入這個文件夾
touch 20190412430233lny.txt   //新建這個文件

補充:

還要再改一下配置

cd /etc/pam.d/
vim vsftpd

 進去后ins 注釋這兩行 esc然后:wq保存一下

 關閉防火牆

systemctl stop firewalld
setenforce 0

運行ftp服務

systemctl start vsftpd

PS:如果你用的是阿里雲服務器,我不推薦你們用window自帶dos或者window資源管理器地址欄直接訪問FTP服務

我連阿里雲用window自帶這兩個連遇到的坑點巨多,本地vm搭建的沒啥問題,如果連失敗了請回來這里

去下個filezilla連接工具  主動被動模式切換簡單 

然后去阿里雲控制台開放1024/65535端口

請跳過這段內容

https://www.filezilla.cn/  

https://www.lanzouw.com/iQgf8xnb55c  密碼:9c46

----------

去window資源管理器地址欄輸入

ftp:// 你的ftp服務ip地址

 填完賬號密碼后回車 可以看到 我們已經進來了 並且看到了文件txt

創建一個文件夾 沒毛病

 

 復制到桌面 沒毛病

本地虛擬機上通過命令來上傳和下載一個你宿舍號同名文件。

在window資源管理器隨便一個盤符新建一個文件

1、登錄ftp服務器 在當前這個D盤目錄CMD回車 然后輸入

ftp 192.168.3.26

登錄成功

 ls pwd 可以查看目錄和當前訪問的路徑

上傳文件

put 22-210-LNY.txt

 上傳成功

去那邊康康有沒有

 進去了

 然后是下載文件 下載學號+姓名那個文件

get 你的文件.txt

會報錯:550 Failed to open file.

去ftp那邊輸入

sestatus -b |grep ftp

注意看上面加粗標紅的,都是off 狀態,然后把他們的狀態改為on

setsebool -P ftp_home_dir   1
setsebool -P ftpd_use_passive_mode  1

 開了 重啟一下ftp服務

systemctl restart vsftpd

重新下載一下

 成功下載

 

關於ftp其他詳細配置

安裝ftp服務器

安裝vsftpd

# yum install -y vsftpd

===============================================================================

添加用戶名,用作ftp匿名訪問用戶

# useradd ftpuser

給用戶名設置密碼

# passwd ftpuser

配置文件

# cd /etc/vsftpd/

# vim vsftpd.conf

# 允許匿名訪問

anonymous_enable=YES

# 不允許本地用戶,如root用戶登陸。默認允許

local_enable=NO

#設置本地用戶登錄所在的目錄。默認配置文件中沒有該配置項,本地用戶登錄FTP服務器后所在的目錄為所登錄用戶的主目錄,如:對於root用戶,則為/root目錄

# local_root=/home/ftpuser

# 本地用戶上傳文件權限

local_umask=022

# 匿名用戶上傳文件權限

anon_umask=022

# 允許寫入操作,否則不能上傳文件

write_enable=YES

# 允許匿名用戶上傳文件,需要配合write_enable=yes

anon_upload_enable=YES

# 控制匿名用戶對文件和文件夾的刪除和重命名(自己添加,沒有該配置)

anon_other_write_enable=YES

# 允許匿名用戶創建目錄

anon_mkdir_write_enable=YES

# ftp工具連接成功提示

ftpd_banner=Welcome to blah FTP service.

# 所有用戶均不能切換到上級目錄

chroot_local_user=YES

# 是否啟動限制用戶的名單。YES為啟用,NO禁用。默認禁用

chroot_list_enable=NO

# /etc/vsftpd/user_list文件不生效

userlist_enable=NO

#坑,添加以下配置。不添加此項,文件無法上傳。報錯:550 Permission denied。新版本vsftpd加入了安全需求,切根不允許寫,要添加這個配置並設置為YES才可以

allow_writeable_chroot=YES

#匿名用戶的根目錄。這個非常重要

anon_root=/usr/local/ftpdir

#匿名用戶不要密碼就靠這個

no_anon_password=YES

# 匿名登錄后的使用者

ftp_username=ftpuser

===============================================================================

啟動ftp服務器

注:我這里是把所有防火牆都給關了的

端口是21(有的人線下裝Linux服務器系統時候會安裝一個ftp服務器:pure-ftpd,而且默認是開機自啟,而且端口也是21端口)

啟動之前可以查詢是否有ftp服務在跑着,或者查看21端口是否有程序占用

Linux查詢某個端口是否被占用:netstat -anp | grep 端口號

通過pid查看對應端口使用者:netstat -antup | grep pid

或者查詢管道過濾:ps -ef | grep ftp

===============================================================================

最后ftp服務器啟動命令

# systemctl start vsftpd

附(坑)

ftp客戶端

下載ftp工具測試連接:

# yum install -y ftp

# ftp localhost

或者cmd連接:

ftp 192.168.163.4

或者客戶端工具filezilla連接。火狐瀏覽器訪問鏈接(其它瀏覽器不支持訪問,不建立資源目錄,我不知道為啥):

ftp://192.168.163.4

如果需要輸入密碼,但是不想輸入密碼,就這樣訪問(重點)

ftp://ftpuser:ftpuser@192.168.163.4/

不需要輸入用戶名、密碼訪問ftp服務器終極解決方案

#匿名用戶的根目錄。這個非常重要(注:這個目錄不可以是Linux已有賬號的家目錄)

anon_root=/usr/local/ftpdir

不能上傳文件問題

首先保證匿名用戶登錄根目錄為755權限,例上述:/usr/local/ftpdir

再一個,在/usr/local/ftpdir創建目錄files,權限給777,客戶端就可以在/usr/local/ftpdir/files上傳文件進來了

上傳上來的文件權限太低,瀏覽器下載不了

 

這個上傳文件的權限不是ftp服務器決定的,決定權限的是上傳的客戶端。我在給設備配置ftp服務器的時候(此時設備就相當於客戶端),上傳上去的文件權限大都夠用的

但是上圖這種情況是確實存在的,我在測試的時候遇到了。這時候如果匿名訪問不了,就這樣:ftp://ftpuser:ftpuser@192.168.163.4/。注:這樣使用ftpuser用戶登錄的話就必須在配置文件中打開local_enable=YES,並且設置本地用戶登錄根目錄local_root=/usr/local/ftpdir(跟匿名登陸根目錄必須一樣的啊)

注:我已經在配置文件中設置了匿名用戶登錄為ftpuser,即ftp_username=ftpuser。為什么匿名用戶下載不了那個軟件,必須使用用戶名和密碼登錄了之后才行呢?不去糾結了,不鑽牛角尖,不過這確是一個可行的解決方案。猜想可能是因為匿名用戶不詢問密碼那個配置,即no_anon_password=YES,但是ftpuser這個系統用戶是有密碼的,所有就出現了這樣的情況,當然我也只是猜想罷了,這個問題就先研究到這…

 

阿里雲服務器搭建ftp服務器的坑

參考博客:https://blog.csdn.net/newborn2012/article/details/15812821/

按找上述步驟在局域網內是沒有問題的,但是在雲服務器上就有坑要填。因為雲服務器有一個安全組的機制,然后從這個突破口去尋找解決方案。首先將局域網的配置步驟照搬到服務器上,啟動發現無論是瀏覽器還是filezilla客戶端都訪問不了

在解決這個問題之前要了解ftp的兩個工作模式:Port和Pasv。FTP連接一般會有兩個連接,也就是會需要用到兩個端口。一個服務器與客戶端跟進行命令交互的,一個是進行數據傳送的。那兩種工作模式跟兩個連接是怎么搭配起來工作的呢?

假設客戶端為C,服務器端為S(以下簡稱C和S):

l  Port模式:當客戶端C和服務端S連接起來后,C會發送一條命令告訴S:“我在本地打開了一個端口N等你進行數據連接”,當S收到這個Port命令后就會向C打開的那個端口N進行數據連接。S主動向C的某個端口進行數據連接,此乃主動模式

l  Pasv模式:當客戶端C和服務端S連接起來后,S會發送一條命令告訴C:“我再本地打開了一個端口M你來連接我吧”,當C收到這個消息后就會向S的M端口發起數據連接。S打開端口被C主動連接,此乃被動模式

那我們應該使用哪種工作模式呢?答案是被動(默認工作模式就是被動)。為什么?很簡單,你是在局域網內,你可以連接到雲服務器的某個端口(前提是這個端口放開了),但是雲服務器連接不到你的

FTP模式與數據端口:無論是哪一種工作模式,首先在建立控制連接時候操作是一樣的,都是由客戶端(首先隨機選取一個大於1024以上的端口)和FTP服務器的控制端口21建立連接,並通過該連接傳輸操作指令。兩種工作模式的區別是什么呢?在於使用數據傳輸端口(ftp-data)方式。port mode由FTP服務器指定數據傳輸所使用的端口,默認值為20。pasv mode由FTP客戶端決定數據傳輸端口,客戶端向服務端發出連接請求包含了數據傳輸端口

(重要)

主動模式相關配置(了解):

port_enable=YES|NO:數據連接時取消PORT模式,默認為YES

connetc_from_port_20=YES|NO:控制以PORT模式進行數據傳輸時是否使用20端口,默認是NO(但實際上我用的RHL-CentOS7.6,vsftpd.conf文件中該配置設為YES,該配置生效前提是工作模式為主動的)

ftp_data_port=端口號:設置FTP數據傳輸端口(ftp-data)值,默認值為20。此參數也用於主動模式

port_promiscuous=YES|NO:取消PORT安全檢查,該檢查確保外出的數據只能連接到客戶端上,默認為NO。小心打開此選項(Don't care

被動模式相關配置:

pasv_enable=YES|NO:允許數據傳輸使用PASV模式,默認為YES,且配置文件中沒有該配置

pasv_min_port=端口號、pasv_max_port=端口號:設置在PASV模式下建立數據傳輸所用端口范圍上界和下界,0表示任意,默認為0。把端口范圍設在比較高的一段范圍內,比如50000-60000,將有助於安全性的提高,我設置的是30000-50000,這個看你自己的啦

pasv_promiscuous=YES|NO:此選項激活時,將關閉PASV模式的安全檢查。該檢查確保數據連接和控制連接是來自同一個IP地址。小心打開此選項。此選項唯一合理的用法是存在於由安全隧道方案構成的組織中,默認值為NO(Don't care

pasv_address=ip地址:此選項為一個數字IP地址,作為PASV命令的響應,默認值為none,地址是從呼入的連接套接字(incoming connectd socket)中獲取(Don't care

命令通道端口配置,默認為21

listen_port=21

最后一步,修改配置,使雲服務器上搭建的FTP服務器可以正常使用:

也沒啥要修改的,主要就是加兩個配置(為明確工作模式,我給加上pasv_enable=YES):

pasv_enable=YES

pasv_min_port=30000

pasv_max_port=50000

打開阿里雲服務器30000-50000范圍端口

(完)

客戶端filezilla在連接vsftpd時候要明確加密類型為:只使用明文FTP(不安全)

 

擴展:pure-ftpd

這個跟vsftpd性質一樣的啊,ftp是個什么玩意,你能看到這里心里就應該很清楚了,我也不再去解釋他的概念、協議一些亂七八糟的東西了

直接進入安裝:

按需安裝pure-ftpd其它依賴,如ep   el擴展:yum install -y epel-release

# yum install -y pure-ftpd

在啟動pure-ftpd之前,需要先修改配置文件/etc/pure-ftpd/pure-ftpd.conf

# cd /etc/pure-ftpd

# vim pure-ftp.conf

打開PureDB配置,刪除該行“#”號

PureDB /etc/pure-ftpd/pureftpd.pdb

然后跟vsftpd一樣,設置被動模式數據端口范圍:

 

passive(被動模式)連接的端口范圍-保持盡可能寬。(我vsftpd也是這么設置的,倆都是30000到50000,方便,而且我沒記錯的話這兒本來就是這個范圍,只不過注釋默認沒打開)

PassivePortRange             30000 50000

建立賬號和文件使用目錄。注意:為了安全,pure-ftpd使用的賬號並非Linux的系統賬號,而是虛擬賬號,然后和Linux系統用戶進行綁定

# mkdir /data/ftp

如果沒有ftpuser賬號的話

# useradd ftpuser

# passwd ftpuser

存儲目錄所有者切換為ftpuser

# chown -R pure-ftp:pure-ftp /data/ftp

創建虛擬賬戶,-u是將虛擬用戶admin與系統用戶ftpuser關聯在一起,也就是說使用admin賬號登錄ftp后,會以ftpuser的身份來讀取和下載文件,-d是指定admin賬戶的家目錄,這樣可以使用戶admin登陸進來就可以也只能訪問其家目錄/data/ftp/

# pure-pw useradd admin -u ftpuser -d /data/ftp

Password:

Enter it again:

創建用戶信息數據庫文件,這一步很關鍵

# pure-pw mkdb

列出當前賬號

pure-pw list

刪除賬號

pure-pw userdel admin….

添加一個測試文件

# touch /data/ftp/123.txt

安裝lftp客戶端軟件,跟ftp一樣,可以理解為也是一個工具

簡介:

 

# yum install -y lftp

# lftp admin@127.0.0.1

 

注:這個軟件會在ftp的工作目錄生成兩個隱藏文件:“.”和“..

客戶端filezilla連接pure-ftpd

 

Java連接ftp服務器


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM