1. 程式人生 > >ubuntu下搭建vsftpd,實現從外網訪問到內網ftp伺服器

ubuntu下搭建vsftpd,實現從外網訪問到內網ftp伺服器

sudo apt install openssh-server
可以先安裝一下ssh服務,以後可以用winscp傳送資料。

情景

@1 先安裝vsftpd。網上有教程可找。可以參考如下:

http://www.linuxidc.com/Linux/2016-12/138563.htm

大旨如下:

1 安裝ftp軟體包。

sudo apt-get install vsftpd

2新建一個目錄用於存放ftp檔案

mkdir /home/ftp

3 新建使用者名稱與密碼用於ftp登入。

sudo useradd -d /home/ftp -s /bin/bash xxx

xxx是自已起的名字。

腦補了一下引數的含義

 -d, --home-dir HOME_DIR
           The new user will be created using HOME_DIR as the value for the
           user's login directory. The default is to append the LOGIN name to
           BASE_DIR and use that as the login directory name. The directory
           HOME_DIR does not have to exist but will not be created if it is
           missing.
 -s, --shell SHELL
           The name of the user's login shell. The default is to leave this
           field blank, which causes the system to select the default login
           shell specified by the SHELL variable in /etc/default/useradd, or
           an empty string by default.


 
sudo passwd xxx

設定其密碼。

好了,現在在腦補一下配置引數,可以學習一下有點長

參考文章http://yuanbin.blog.51cto.com/363003/108262/

vsftpd配置檔案詳解
 
1.預設配置:
1>允許匿名使用者和本地使用者登陸。
     anonymous_enable=YES
     local_enable=YES
2>匿名使用者使用的登陸名為ftp或anonymous,口令為空;匿名使用者不能離開匿名使用者家目錄/var/ftp,且只能下載不能上傳。
3>本地使用者的登入名為本地使用者名稱,口令為此本地使用者的口令;本地使用者可以在自 己家目錄中進行讀寫操作;本地使用者可以離開自家目錄切換至有許可權訪問的其他目錄,並在許可權允許的情況下進行上傳/下載。
    write_enable=YES
4>寫在檔案/etc/vsftpd.ftpusers中的本地使用者禁止登陸。
            
2.配置檔案格式:  
vsftpd.conf 的內容非常單純,每一行即為一項設定。若是空白行或是開頭為#的一行,將會被忽略。內容的格式只有一種,如下所示
option=value
要注意的是,等號兩邊不能加空白。
 
3.匿名使用者(anonymous)設定
anonymous_enable=YES/NO(YES)
控制是否允許匿名使用者登入,YES 為允許匿名登入,NO 為不允許。預設值為YES。
write_enable=YES/NO(YES)
是否允許登陸使用者有寫許可權。屬於全域性設定,預設值為YES。
no_anon_password=YES/NO(NO)
若是啟動這項功能,則使用匿名登入時,不會詢問密碼。預設值為NO。
ftp_username=ftp
定義匿名登入的使用者名稱。預設值為ftp。
anon_root=/var/ftp
使用匿名登入時,所登入的目錄。預設值為/var/ftp。注意ftp目錄不能是777的許可權屬性,即匿名使用者的家目錄不能有777的許可權。
anon_upload_enable=YES/NO(NO)
如果設為YES,則允許匿名登入者有上傳檔案(非目錄)的許可權,只有在write_enable=YES時,此項才有效。當然,匿名使用者必須要有對上層目錄的寫入權。預設值為NO。
anon_world_readable_only=YES/NO(YES)
如果設為YES,則允許匿名登入者下載可閱讀的檔案(可以下載到本機閱讀,不能直接在FTP伺服器中開啟閱讀)。預設值為YES。
anon_mkdir_write_enable=YES/NO(NO)
如果設為YES,則允許匿名登入者有新增目錄的許可權,只有在write_enable=YES時,此項才有效。當然,匿名使用者必須要有對上層目錄的寫入權。預設值為NO。
anon_other_write_enable=YES/NO(NO)
如果設為YES,則允許匿名登入者更多於上傳或者建立目錄之外的許可權,譬如刪除或者重新命名。(如果anon_upload_enable=NO,則匿名使用者不能上傳檔案,但可以刪除或者重新命名已經存在的檔案;如果anon_mkdir_write_enable=NO,則匿名使用者不能上傳或者新建資料夾,但可以刪除或者重新命名已經存在的資料夾。)預設值為NO。
chown_uploads=YES/NO(NO)
設定是否改變匿名使用者上傳檔案(非目錄)的屬主。預設值為NO。
chown_username=username
設定匿名使用者上傳檔案(非目錄)的屬主名。建議不要設定為root。
anon_umask=077
設定匿名登入者新增或上傳檔案時的umask 值。預設值為077,則新建檔案的對應許可權為700。
deny_email_enable=YES/NO(NO)
若是啟動這項功能,則必須提供一個檔案/etc/vsftpd/banner_emails,內容為email address。若是使用匿名登入,則會要求輸入email address,若輸入的email address 在此檔案內,則不允許進入。預設值為NO。
banned_email_file=/etc/vsftpd/banner_emails
此檔案用來輸入email address,只有在deny_email_enable=YES時,才會使用到此檔案。若是使用匿名登入,則會要求輸入email address,若輸入的email address 在此檔案內,則不允許進入。
 
4.本地使用者設定
local_enable=YES/NO(YES)
控制是否允許本地使用者登入,YES 為允許本地使用者登入,NO為不允許。預設值為YES。
local_root=/home/username
當本地使用者登入時,將被更換到定義的目錄下。預設值為各使用者的家目錄。
write_enable=YES/NO(YES)
是否允許登陸使用者有寫許可權。屬於全域性設定,預設值為YES。
local_umask=022
本地使用者新增檔案時的umask 值。預設值為077。
file_open_mode=0755
本地使用者上傳檔案後的檔案許可權,與chmod 所使用的數值相同。預設值為0666。
 
5.歡迎語設定
dirmessage_enable=YES/NO(YES)
如果啟動這個選項,那麼使用者第一次進入一個目錄時,會檢查該目錄下是否有.message這個檔案,如果有,則會出現此檔案的內容,通常這個檔案會放置歡迎話語,或是對該目錄的說明。預設值為開啟。
message_file=.message
設定目錄訊息檔案,可將要顯示的資訊寫入該檔案。預設值為.message。
banner_file=/etc/vsftpd/banner
當使用者登入時,會顯示此設定所在的檔案內容,通常為歡迎話語或是說明。預設值為無。如果歡迎資訊較多,則使用該配置項。
ftpd_banner=Welcome to BOB's FTP server
這裡用來定義歡迎話語的字串,banner_file是檔案的形式,而ftpd_banner 則是字串的形式。預設為無。
 
6.控制使用者是否允許切換到上級目錄
在預設配置下,本地使用者登入FTP後可以使用cd命令切換到其他目錄,這樣會對系統帶來安全隱患。可以通過以下三條配置檔案來控制使用者切換目錄。
chroot_list_enable=YES/NO(NO)
設定是否啟用chroot_list_file配置項指定的使用者列表檔案。預設值為NO。
chroot_list_file=/etc/vsftpd.chroot_list
用於指定使用者列表檔案,該檔案用於控制哪些使用者可以切換到使用者家目錄的上級目錄。
chroot_local_user=YES/NO(NO)
用於指定使用者列表檔案中的使用者是否允許切換到上級目錄。預設值為NO。
通過搭配能實現以下幾種效果:
①當chroot_list_enable=YES,chroot_local_user=YES時,在/etc/vsftpd.chroot_list檔案中列出的使用者,可以切換到其他目錄;未在檔案中列出的使用者,不能切換到其他目錄。
②當chroot_list_enable=YES,chroot_local_user=NO時,在/etc/vsftpd.chroot_list檔案中列出的使用者,不能切換到其他目錄;未在檔案中列出的使用者,可以切換到其他目錄。
③當chroot_list_enable=NO,chroot_local_user=YES時,所有的使用者均不能切換到其他目錄。
④當chroot_list_enable=NO,chroot_local_user=NO時,所有的使用者均可以切換到其他目錄。
 
7.資料傳輸模式設定
FTP在傳輸資料時,可以使用二進位制方式,也可以使用ASCII模式來上傳或下載資料。
ascii_upload_enable=YES/NO(NO)
設定是否啟用ASCII 模式上傳資料。預設值為NO。
ascii_download_enable=YES/NO(NO)
設定是否啟用ASCII 模式下載資料。預設值為NO。
 
8.訪問控制設定
兩種控制方式:一種控制主機訪問,另一種控制使用者訪問。
①控制主機訪問:
tcp_wrappers=YES/NO(YES)
設定vsftpd是否與tcp wrapper相結合來進行主機的訪問控制。預設值為YES。如果啟用,則vsftpd伺服器會檢查/etc/hosts.allow 和/etc/hosts.deny 中的設定,來決定請求連線的主機,是否允許訪問該FTP伺服器。這兩個檔案可以起到簡易的防火牆功能。
比如:若要僅允許192.168.0.1—192.168.0.254的使用者可以連線FTP伺服器,則在/etc/hosts.allow檔案中新增以下內容:
vsftpd:192.168.0. :allow
all:all :deny
②控制使用者訪問:
對於使用者的訪問控制可以通過/etc目錄下的vsftpd.user_list和ftpusers檔案來實現。
userlist_file=/etc/vsftpd.user_list
控制使用者訪問FTP的檔案,裡面寫著使用者名稱稱。一個使用者名稱稱一行。
userlist_enable=YES/NO(NO)
是否啟用vsftpd.user_list檔案。
userlist_deny=YES/NO(YES)
決定vsftpd.user_list檔案中的使用者是否能夠訪問FTP伺服器。若設定為YES,則vsftpd.user_list檔案中的使用者不允許訪問FTP,若設定為NO,則只有vsftpd.user_list檔案中的使用者才能訪問FTP。
/etc/vsftpd/ftpusers檔案專門用於定義不允許訪問FTP伺服器的使用者列表(注意:如果userlist_enable=YES,userlist_deny=NO,此時如果在vsftpd.user_list和ftpusers中都有某個使用者時,那麼這個使用者是不能夠訪問FTP的,即ftpusers的優先順序要高)。預設情況下vsftpd.user_list和ftpusers,這兩個檔案已經預設定了一些不允許訪問FTP伺服器的系統內部賬戶。如果系統沒有這兩個檔案,那麼新建這兩個檔案,將使用者新增進去即可。
 
9.訪問速率設定
anon_max_rate=0
設定匿名登入者使用的最大傳輸速度,單位為B/s,0 表示不限制速度。預設值為0。
local_max_rate=0
本地使用者使用的最大傳輸速度,單位為B/s,0 表示不限制速度。預設值為0。
 
10.超時時間設定
accept_timeout=60
設定建立FTP連線的超時時間,單位為秒。預設值為60。
connect_timeout=60
PORT 方式下建立資料連線的超時時間,單位為秒。預設值為60。
data_connection_timeout=120
設定建立FTP資料連線的超時時間,單位為秒。預設值為120。
idle_session_timeout=300
設定多長時間不對FTP伺服器進行任何操作,則斷開該FTP連線,單位為秒。預設值為300 。
 
11.日誌檔案設定
xferlog_enable= YES/NO(YES)
是否啟用上傳/下載日誌記錄。如果啟用,則上傳與下載的資訊將被完整紀錄在xferlog_file 所定義的檔案中。預設為開啟。
xferlog_file=/var/log/vsftpd.log
設定日誌檔名和路徑,預設值為/var/log/vsftpd.log。
xferlog_std_format=YES/NO(NO)
如果啟用,則日誌檔案將會寫成xferlog的標準格式,如同wu-ftpd 一般。預設值為關閉。
log_ftp_protocol=YES|NO(NO)
如果啟用此選項,所有的FTP請求和響應都會被記錄到日誌中,預設日誌檔案在/var/log/vsftpd.log。啟用此選項時,xferlog_std_format不能被啟用。這個選項有助於除錯。預設值為NO。
 
12.定義使用者配置檔案
在vsftpd中,可以通過定義使用者配置檔案來實現不同的使用者使用不同的配置。
user_config_dir=/etc/vsftpd/userconf
設定使用者配置檔案所在的目錄。當設定了該配置項後,使用者登陸伺服器後,系統就會到/etc/vsftpd/userconf目錄下,讀取與當前使用者名稱相同的檔案,並根據檔案中的配置命令,對當前使用者進行更進一步的配置。
例如:定義user_config_dir=/etc/vsftpd/userconf,且主機上有使用者 test1,test2,那麼我們就在user_config_dir 的目錄新增檔名為test1和test2兩個檔案。若是test1 登入,則會讀取user_config_dir 下的test1 這個檔案內的設定。預設值為無。利用使用者配置檔案,可以實現對不同使用者進行訪問速度的控制,在各使用者配置檔案中定義local_max_rate=XX,即可。
 
13.FTP的工作方式與埠設定
FTP有兩種工作方式:PORT FTP(主動模式)和PASV FTP(被動模式)
listen_port=21
設定FTP伺服器建立連線所監聽的埠,預設值為21。
connect_from_port_20=YES/NO
指定FTP使用20埠進行資料傳輸,預設值為YES。
ftp_data_port=20
設定在PORT方式下,FTP資料連線使用的埠,預設值為20。
pasv_enable=YES/NO(YES)
若設定為YES,則使用PASV工作模式;若設定為NO,則使用PORT模式。預設值為YES,即使用PASV工作模式。
pasv_max_port=0
在PASV工作模式下,資料連線可以使用的埠範圍的最大埠,0 表示任意埠。預設值為0。
pasv_min_port=0
在PASV工作模式下,資料連線可以使用的埠範圍的最小埠,0 表示任意埠。預設值為0。
 
14.與連線相關的設定
listen=YES/NO(YES)
設定vsftpd伺服器是否以standalone模式執行。以standalone模式執行是一種較好的方式,此時listen必須設定為YES,此為預設值。建議不要更改,有很多與伺服器執行相關的配置命令,需要在此模式下才有效。若設定為NO,則vsftpd不是以獨立的服務執行,要受到xinetd服務的管控,功能上會受到限制。
max_clients=0
設定vsftpd允許的最大連線數,預設值為0,表示不受限制。若設定為100時,則同時允許有100個連線,超出的將被拒絕。只有在standalone模式執行才有效。
max_per_ip=0
設定每個IP允許與FTP伺服器同時建立連線的數目。預設值為0,表示不受限制。只有在standalone模式執行才有效。
listen_address=IP地址
設定FTP伺服器在指定的IP地址上偵聽使用者的FTP請求。若不設定,則對伺服器繫結的所有IP地址進行偵聽。只有在standalone模式執行才有效。
setproctitle_enable=YES/NO(NO)
設定每個與FTP伺服器的連線,是否以不同的程序表現出來。預設值為NO,此時使用ps aux |grep ftp只會有一個vsftpd的程序。若設定為YES,則每個連線都會有一個vsftpd的程序。
 
15.虛擬使用者設定
虛擬使用者使用PAM認證方式。
pam_service_name=vsftpd
設定PAM使用的名稱,預設值為/etc/pam.d/vsftpd。
guest_enable= YES/NO(NO)
啟用虛擬使用者。預設值為NO。
guest_username=ftp
這裡用來對映虛擬使用者。預設值為ftp。
virtual_use_local_privs=YES/NO(NO)
當該引數啟用(YES)時,虛擬使用者使用與本地使用者相同的許可權。當此引數關閉(NO)時,虛擬使用者使用與匿名使用者相同的許可權。預設情況下此引數是關閉的(NO)。
 
16.其他設定
text_userdb_names= YES/NO(NO)
設定在執行ls –la之類的命令時,是顯示UID、GID還是顯示出具體的使用者名稱和組名。預設值為NO,即以UID和GID方式顯示。若希望顯示使用者名稱和組名,則設定為YES。
ls_recurse_enable=YES/NO(NO)
若是啟用此功能,則允許登入者使用ls –R(可以檢視當前目錄下子目錄中的檔案)這個指令。預設值為NO。
hide_ids=YES/NO(NO)
如果啟用此功能,所有檔案的擁有者與群組都為ftp,也就是使用者登入使用ls -al之類的指令,所看到的檔案擁有者跟群組均為ftp。預設值為關閉。
download_enable=YES/NO(YES)
如果設定為NO,所有的檔案都不能下載到本地,資料夾不受影響。預設值為YES。


其實這麼多看一下第8條第二款還挺有意思的。

userlist_file=/etc/vsftpd.user_list
userlist_enable=YES
userlist_deny=NO

我通過如上設定,我就可以控制把能夠訪問ftp的使用者名稱寫入vsftpd.user_list檔案中。比如剛才新增的使用者xxx

@2 安裝好之後,要進行一些簡單的設定,比如指定ftp的預設目錄。你登入之後要跳轉到哪個地方。

local_root=/home/ftp
chroot_local_user=YES

在vsftpd的配置檔案中追加上面的兩人句話。意思指定非匿名使用者登入ftp之後訪問的目錄。

路徑在下:

/etc/vsftpd.conf
修改之後重啟服務
 sudo /etc/init.d/vsftpd restart
@3 用
 ftp://ip地址

一般可以在內網中訪問到。但要在外網中訪問需要做以下設定。

1 申請一個nat123帳號。

這裡也可以用路由器自帶的 虛擬主機 和 ddns動態域名 設定好。

大意是先申請一個免費域名。通過可以用nat123的域名,也可以用路由的免費域名。公司的是tplink的。

然後通過設定把公網的IP和內網的ip繫結起來。叫對映吧。

2如果是nat123的話需要找到dns 解析新增。具體參考如下。

http://www.nat123.com/pages_23_535.jsp

3 最後重要的一部是設定路由器的DMZ主機的ip。要不然外網無法訪問到內網伺服器。

下面簡單說說參考文章

http://www.nat123.com/pages_17_600.jsp

http://www.nat123.com/Pages_17_619.jsp

1 安裝環境

sudo apt  install  mono-complete

2 下載軟體包
wget  http://www.nat123.com/down/nat123linux.tar.gz

3 新建一個資料夾,把下載下來的檔案放到裡面解壓

4 執行如下命令,第一次執行第一條,其他執行第二條即可。

#mono  nat123linux.sh     --根據提示手動輸入帳號密碼 
#mono  nat123linux.sh  service  &     --自動讀取上一次成功登入帳號以後臺服務啟動