1. 程式人生 > >Linux的Ftp伺服器搭建

Linux的Ftp伺服器搭建

FTP服務概述:

FTP伺服器(File Transfer Protocol Server)是在網際網路上提供檔案儲存和訪問服務的計算機,它們依照FTP協議提供服務。

FTP(File Transfer Protocol: 檔案傳輸協議)作用: Internet 上用來傳送檔案的協議

常見FTP伺服器:

windowsServ-U FTP Server,filezilla_server

LinuxProFTPD:(Professional FTP daemon)一個Unix平臺上或是類Unix平臺上(如Linux, FreeBSD等)的FTP伺服器程式。

 

VSFTP是一個基於GPL釋出的類Unix系統上使用的FTP伺服器軟體,它的全稱是Very Secure FTP 從此名稱可以看出來,編制者的初衷是程式碼的安全。

特點:

它是一個安全、高速、穩定的FTP伺服器;

 

 

 

 

這裡的主動和被動,是相對於的FTP server 端來判斷的

如果server 去連線client 開放的埠,說明是主動的,相反,如果client去連線server開放的埠,則是被動的。

 

安裝vsftp伺服器端、客戶端

      yum -y install vsftpd lftp

 

lftp

注:從RHEL6開始,系統映象中預設沒有ftp客戶端命令。取而代之的是lftp命令

Linux客戶端:

lftp 是一個功能強大的下載工具,它支援訪問檔案的協議: ftp, ftps, http, https, hftp, fish.(其中ftps和https需要在編譯的時候包含openssl庫)。llftp的介面非常好一個shell: 有命令補全,歷史記錄,允許多個後臺任務執行等功能,使用起來非常方便。它還有書籤、排隊、映象、斷點續傳、多程序下載等功能。

 

配置檔案位置:

2.vsftpd 相關文件

/etc/vsftpd/vsftpd.conf

:vsftpd 的核心配置檔案

/etc/vsftpd/ftpusers:用於指定哪些使用者不能訪問FTP 伺服器。  黑名單

/etc/vsftpd/user_list:指定允許使用vsftpd 的使用者列表檔案。  預設情況下是黑名單,也可以改成白名單

vim  /etc/vsftpd/user_list

 

# 如果userlist_deny= YES(預設),絕不允許在這個檔案中的使用者登入ftp,甚至不提示輸入密碼,就是黑名單

#prompt 提示

/etc/vsftpd/vsftpd_conf_migrate.sh:是vsftpd 操作的一些變數和設定指令碼

/var/ftp/:預設情況下匿名使用者的根目錄

 

啟動服務

[[email protected] vsftpd]# systemctl start vsftpd

[[email protected] vsftpd]# systemctl enable vsftpd

##注意關閉iptables 和selinux

[[email protected] ~]# netstat -antup | grep ftp

tcp        0      0 0.0.0.0:21                  0.0.0.0:*                   LISTEN      11725/vsftpd

 

互動: 為什麼看不到20埠?。

因為沒有資料通訊。

 

此服務的使用方法

Linux

[[email protected] vuserconfig]# rpm -vih /mnt/Packages/lftp-4.0.9-1.el6.x86_64.rpm

[[email protected] vsftpd]# lftp 192.168.0.63

 

windows

通過瀏覽器訪問或 開啟資料夾,在位址列輸入地址:ftp://192.168.0.63/

 

 

 

修改配置檔案,實戰舉例 

例1:公司技術部準備搭建一臺功能簡單的FTP 伺服器,允許所有員工上傳和下載檔案,並允許建立用

戶自己的目錄。

分析:

允許所有員工上傳和下載檔案需要設定成允許匿名使用者登入並且需要將允許匿名使用者上傳功能

開啟,

anon_mkdir_write_enable 欄位可以控制是否允許匿名使用者建立目錄。

 

[[email protected] vsftpd]# cp vsftpd.conf vsftpd.conf.back

vim  /etc/vsftpd/vsftpd.conf  #修改以下內容

 

允許匿名使用者訪問

anonymous_enable=YES

允許匿名使用者上傳檔案並可以建立目錄

anon_upload_enable=YES

anon_mkdir_write_enable=YES

 

 啟動服務:

service vsftpd restart

 

測試:  不能寫

 

 

 

[[email protected] vsftpd]# chown ftp.ftp /var/ftp/pub/

然後測試,是可以新建檔案夾了,但是不能重新命名,不能刪除!


[[email protected] vsftpd]# vim vsftpd.conf

anon_other_write_enable=YES  ##預設沒有,需要手動新增下這行

 

重啟服務,即可重新命名資料夾。

但是可以刪除檔案夾了,這個引數對匿名使用者來說許可權太大,不安全,均衡使用這個引數

 

注意,預設匿名使用者家目錄的許可權是755,這個許可權是不能改變的。切記!

 

下面我們來一步一步的實現,先修改目錄許可權,建立一個公司上傳用的目錄,叫data,設定擁有者為ftp 使用者所有,目錄許可權是755

[[email protected] vsftpd]# mkdir /var/ftp/data

[[email protected] vsftpd]# chown ftp.ftp /var/ftp/data/

[[email protected] vsftpd]# ll -d !$     

ll -d /var/ftp/data/

drwxr-xr-x 2 ftp root 4096 Mar  9 19:30 /var/ftp/data/

 

 

然後重新啟動服務

[[email protected] ~]# service vsftpd restart

Shutting down vsftpd:                                      [  OK  ]

Starting vsftpd for vsftpd:                                [  OK  ]

 

 

注:工作中,匿名使用者只是只讀訪問,寫的許可權也沒有的。

 

 

 

例2:

公司內部現在有一臺FTP 和WEB 伺服器,FTP 的功能主要用於維護公司的網站內容,包括上傳文

件、建立目錄、更新網頁等等。公司現有兩個部門負責維護任務,他們分別適用team1 和team2

帳號進行管理。先要求僅允許team1 和team2 帳號登入FTP 伺服器,但不能登入本地系統,並將

這兩個帳號的根目錄限制為/var/www/html,不能進入該目錄以外的任何目錄。

 

ftp 和www web伺服器相結合。

www web伺服器根目錄:  /var/www/html

只允許:team1和team2兩使用者 可以上傳。 vsftp禁止匿名。

 

分析:

將FTP 和WEB 伺服器做在一起是企業經常採用的方法,這樣方便實現對網站的維護,為了增強安

全性,首先需要使用僅允許本地使用者訪問,並禁止匿名使用者登入。其次使用chroot 功能將team1

和team2 鎖定在/var/www/html 目錄下。如果需要刪除檔案則還需要注意本地許可權

解決方案:

(1)建立維護網站內容的ftp 帳號team1 和team2 並禁止本地登入,然後設定其密碼

[[email protected] ~]# useradd -s /sbin/nologin team1

[[email protected] ~]# useradd -s /sbin/nologin team2

[[email protected] ~]# echo "123456" | passwd --stdin team1

Changing password for user team1.

passwd: all authentication tokens updated successfully.

[[email protected] ~]# echo "123456" | passwd --stdin team2

Changing password for user team2.

passwd: all authentication tokens updated successfully.

 

2)配置vsftpd.conf 主配置檔案並作相應修改

[[email protected] vsftpd]# cp vsftpd.conf.back  vsftpd.conf

vim /etc/vsftpd/vsftpd.conf

anonymous_enable=NO:禁止匿名使用者登入

local_enable=YES:允許本地使用者登入

 

 

改:

 

 

為:

 

local_root=/var/www/html :設定本地使用者的根目錄為/var/www/html

chroot_list_enable=YES:    激chroot 功能

chroot_list_file=/etc/vsftpd/chroot_list: 設定鎖定使用者在根目錄中的列表檔案。此檔案存放要鎖定的使用者名稱

allow_writeable_chroot=YES:      允許鎖定的使用者有寫的許可權

儲存退出

(3)建立/etc/vsftpd/chroot_list 檔案,新增team1 和team2 帳號

[[email protected] vsftpd]# touch /etc/vsftpd/chroot_list

[[email protected] ~]# ll !$

ll /etc/vsftpd/chroot_list

-rw-r--r-- 1 root root 0 Nov 10 17:08 /etc/vsftpd/chroot_list

[[email protected] ~]# vim /etc/vsftpd/chroot_list  #寫入以下內容,一行,一個使用者名稱

team1

team2

(5)修改本地許可權

[[email protected] ~]# ll -d /var/www/html/

drwxr-xr-x. 2 root root 4096 Oct  6  2011 /var/www/html/

[[email protected] ~]# chmod -R o+w /var/www/html/

[[email protected] ~]# ll -d /var/www/html/

drwxr-xrwx. 2 root root 4096 Oct  6  2011 /var/www/html/

(6)重啟vsftpd 服務使配置生效

service vsftpd restart

(7)測試

客戶端用lftp登陸檢視:

[email protected] ~]# lftp 192.168.0.63 -u team1,123456

lftp [email protected]:~> ls

-rw-r--r--    1 0        0            1384 Jul 30 01:56 passwd

lftp [email protected]:/>

 

 

 

配置vsftpd,使用虛擬賬戶上傳下載檔案

 

企業環境

公司為了宣傳最新的產品資訊,計劃搭建FTP 伺服器,為客戶提供相關文件的下載。對所有互

聯網開放共享目錄,允許下載產品資訊,禁止上傳。公司的合作單位能夠使用FTP 伺服器進行上

傳和下載,但不可以刪除資料。需要保證伺服器的穩定性並做優化。

 

建立ftp虛擬帳號。允許客戶使用ftp帳號下載檔案。 但是,你們自己的合作伙伴帳號:vip可以上傳一內部檔案。

 

需求分析

根據企業的需求,對於不同使用者進行不同的許可權限制,FTP 伺服器需要實現使用者的稽核。需考慮

到伺服器的安全性,所以關閉實體使用者登入,使用虛擬帳號驗證機制,並對不同虛擬帳號設定不

同的許可權。為了保證伺服器的效能,還需要根據使用者的等級,限制客戶端的連線數及下載速度。

 

1、建立使用者資料庫

(1)建立使用者文字檔案

先建立使用者文字檔案vsftpd_virtualuser.txt,新增兩個虛擬帳號,非會員帳號commuser及會員帳號

vip

[[email protected] vsftpd]# vim /etc/vsftpd/vsftpd_virtualuser.txt  #寫入以下內容。格式一行使用者一行密碼。

commuser  #使用者

123456  #密碼

vip

123456

 

儲存退出

 

(2)生成資料庫

儲存虛擬帳號和密碼的文字檔案無法被系統帳號直接呼叫。我們需要使用db_load 命令生成db

資料庫檔案

安裝:

[[email protected] vsftpd]# rpm -qf `which db_load `

libdb-utils-5.3.21-20.el7.x86_64

 

# db_load -T -t hash -f /etc/vsftpd/vsftpd_virtualuser.txt  /etc/vsftpd/vsftpd_virtualuser.db

引數說明:

選項-T允許應用程式能夠將文字檔案轉譯載入進資料庫

由於我們之虛擬使用者資訊,以文字檔案儲存的。為讓Vsftpd應用程式能夠通過來載入使用者資料,必須要使用選項來轉譯成vsftpd可以讀懂的內容。

-t hash使用hash碼加密

-f 指定包含使用者名稱和密碼文字檔案。此檔案格式要示:奇數行使用者名稱、偶數行密碼

 

[[email protected] vsftpd]# rm -rf /etc/vsftpd/vsftpd_virtualuser.txt   #為了安全,刪除此檔案。後期不再使用此檔案,也可以移動到別的目錄

 

 

(3)修改資料庫檔案訪問許可權

資料庫檔案中儲存著虛擬帳號的密碼資訊,為了防止非法使用者盜取哈,我們可以修改該檔案的訪

問許可權。生成的認證檔案的許可權應設定為只對root 使用者可讀可寫,即600

[[email protected]XXX vsftpd]# chmod 600 /etc/vsftpd/vsftpd_virtualuser.db

[[email protected] vsftpd]# ll !$

ll /etc/vsftpd/vsftpd_virtualuser.db

-rw------- 1 root root 12288 Nov 10 21:16 /etc/vsftpd/vsftpd_virtualuser.db

 

2、配置PAM 檔案

為了使伺服器能夠使用資料庫檔案,對客戶端進行身份驗證,需要呼叫系統的PAM 模組.

PAM概述:

PAM(Plugable Authentication Module)為可插拔認證模組,不必重新安裝應用系統,通過修

改指定的配置檔案,調整對該程式的認證方式。PAM 模組配置檔案路徑為/etc/pam.d/目錄,此

目錄下儲存著大量與認證有關的配置檔案,並以服務名稱命名。

修改vsftpd 對應的PAM 配置檔案/etc/pam.d/vsftpd。將預設配置使用“#”全部註釋,新增兩行應欄位。

改:

為:

[[email protected] vsftpd]# cat /etc/pam.d/vsftpd

##%PAM-1.0

#session    optional     pam_keyinit.so    force revoke

#auth       required   pam_listfile.so item=user sense=deny file=/etc/vsftpd/ftpusers onerr=succeed

#auth       required   pam_shells.so

#auth       include    password-auth

#account    include    password-auth

#session    required     pam_loginuid.so

#session    include     password-auth

auth       required /lib64/security/pam_userdb.so  db=/etc/vsftpd/vsftpd_virtualuser

account  required /lib64/security/pam_userdb.so  db=/etc/vsftpd/vsftpd_virtualuser

 

注意:這裡的db=db=/etc/vsftpd/vsftpd_virtualuser

,是pam檔案的寫法規範,不是真正指向db=/etc/vsftpd/vsftpd_virtualuser 這個檔案,而是/etc/vsftpd/vsftpd_virtualuser.db 這個檔案中

最後沒有副檔名。

 

 

3、建立虛擬帳號對應的系統使用者及ftp共享的目錄

對於公共帳號和客戶帳號,因為需要配置不同的許可權,所以可以將兩個帳號的目錄進行隔離,控

制使用者的檔案訪問。公共帳號ftp 對應系統帳號ftpuser,並指定其主目錄為/var/ftp/share,

而客戶帳號vip 對應系統帳號ftpvip,指定主目錄為/var/ftp/vip。

 

[[email protected] vsftpd]# useradd -d /var/ftp/share ftpuser

[[email protected] vsftpd]# useradd -d /var/ftp/vip  ftpvip

[[email protected] vsftpd]# chmod -R 500 /var/ftp/share/  #修改許可權

[[email protected] vsftpd]# chmod -R 700 /var/ftp/vip/

 

chmod -R 500 /var/ftp/share/ :公共帳號commuser只允許下載,修改share 目錄其他使用者許可權為

rx 可讀可執行。

chmod -R 700 /var/ftp/vip/ :客戶帳號vip 允許上傳和下載,所以對vip 目錄許可權設定為rwx,

可讀可寫可執行。

注:如果不設定可執行使用者登入會出不能更改目錄錯誤。

 

4、建立配置檔案

互動:如何設定多個虛擬帳號的不同許可權? 以前都配置好服務後,對所有使用者有效。現在需要對不同使用者配置不同的許可權。 怎麼辦?

一個配置檔案無法實現此功能,需要為每個虛擬帳號建立獨立的配置檔案,並根據需要進行相應的設定。

(1)修改vsftpd.conf 主配置檔案

配置主配置檔案/etc/vsftpd/vsftpd.conf 新增虛擬帳號的共同設定並新增user_config_dir 字

段,定義虛擬帳號的配置檔案目錄。

開始配置:

[[email protected] vsftpd]# cp vsftpd.conf.back vsftpd.conf

禁用匿名使用者登入並啟用本地使用者登入設定

vim vsftpd.conf

改:

anonymous_enable=YES

 

為:

anonymous_enable=NO

 

local_enable=YES   #確認此選項開啟,允許本地使用者登入。 Uncomment :取消註釋

chroot_local_user=YES   #確認此選項開啟。將所有本地使用者限制在家目錄中,NO 則不限制

 

pam_service_name=vsftpd  #確認在檔案的最後有選項。配置vsftpd 使用的PAM 模組為vsftpd

在此選項後面追加:

 

 

user_config_dir=/etc/vsftpd/vuserconfig:設定虛擬帳號的主目錄為/vuserconfig

max_clients=300:設定FTP 伺服器最大接入客戶端數為300 個

max_per_ip=10:設定每個IP 地址最大連線數為10 個

 

(2)建立虛擬帳號配置檔案

在user_config_dir 指定路徑下,建立與虛擬帳號同名的配置檔案並新增相應的配置欄位

首先建立公共帳號ftp 的配置檔案

[[email protected] ~]# grep vuserconfig /etc/vsftpd/vsftpd.conf   #檢視要建立的目錄名

user_config_dir=/etc/vsftpd/vuserconfig

[[email protected] ~]# mkdir /etc/vsftpd/vuserconfig

[[email protected] ~]# touch /etc/vsftpd/vuserconfig/commuser

[[email protected] ~]# touch /etc/vsftpd/vuserconfig/vip

 

配置虛擬帳號配置檔案,寫入以下內容:

[[email protected] ~]# vim /etc/vsftpd/vuserconfig/commuser

guest_enable=yes

guest_username=ftpuser

anon_world_readable_only=no

anon_max_rate=50000

解釋:

guest_enable=yes開啟虛擬帳號登入

guest_username=ftpuser設定ftp 對應的系統帳號為ftpuser

anon_world_readable_only=no允許匿名使用者瀏覽整個伺服器的檔案系統

anon_max_rate=50000限定傳輸速率為50KB/s

 

注意:

vsftpd 對於檔案傳輸速度限制並不是絕對鎖定在一個數值上哈,而是在80%~120%之間變化

比如設定100KB/s 則實際是速度在80KB/s~120KB/s 之間變化

 

下面是合作伙伴帳號的配置檔案vip

[[email protected] ~]# vim /etc/vsftpd/vuserconfig/vip  #寫入以下內容

guest_enable=yes

guest_username=ftpvip

anon_world_readable_only=no

write_enable=yes

anon_mkdir_write_enable=yes

anon_upload_enable=yes

allow_writeable_chroot=YES

anon_max_rate=1000000

 

解釋:

guest_enable=yes開啟虛擬帳號登入

guest_username=ftpvip設定ftp 對應的系統帳號為ftpvip

anon_world_readable_only=no允許匿名使用者瀏覽器整個伺服器的檔案系統

write_enable=yes允許在檔案系統寫入許可權

anon_mkdir_write_enable=yes:允許建立資料夾

anon_upload_enable=yes開啟匿名帳號的上傳功能

allow_writeable_chroot=YES

anon_max_rate=100000限定傳輸速度為100KB/s

 

5、重啟vsftpd 使配置生效

[[email protected] ~]# service vsftpd restart

 

6、測試

(1)公共帳號ftp 測試

在公共帳號測試前,我們先建立個測試檔案

[[email protected] opt]# dd if=/dev/zero of=/opt/linux.txt bs=4K count=100000

100000+0 records in

100000+0 records out

409600000 bytes (410 MB) copied, 1.75175 s, 234 MB/s

[[email protected] opt]# ll -h

total 391M

-rw-r--r-- 1 root root 391M Apr 16 22:11 linux.txt

-rw-r--r-- 1 root root   27 Apr 16 21:39 vsftpd_virtualuser.txt

[[email protected] opt]# cp linux.txt /var/ftp/share/

[[email protected] opt]# cp linux.txt /var/ftp/vip/

[[email protected] opt]# cd /var/ftp/vip/

[[email protected] vip]# ll

total 400712

-rw-r--r-- 1 root   root   409600000 Apr 16 22:11 linux.txt

-rw------- 1 ftpvip ftpvip    727290 Apr 16 22:03 sersync2.5.4_64bit_binary_stable_final.tar.gz

[[email protected] vip]# chown ftpvip.ftpvip linux.txt

這次在Linux下測試。

ftp客戶端命令

lftp  ftpIP   -u  username,passwd

或:

lftp  ftpIP   -u  username

 

使用公共帳號ftp,登入ftp 伺服器

[[email protected] ~]# lftp 192.168.0.63 -u commuser,123456

測試 vip帳號

[[email protected] vsftpd]# lftp 192.168.0.63 -u vip,123456

 

例5:

允許:vip帳號 刪除檔案

 

[[email protected] vsftpd]# cat vuserconfig/vip

guest_enable=yes

guest_username=ftpvip

anon_world_readable_only=no

write_enable=yes

anon_mkdir_write_enable=yes

anon_upload_enable=yes

anon_other_write_enable=YES  # 允許刪除,重新命名等

anon_max_rate=100000

 

[[email protected] vsftpd]# service vsftpd restart

[[email protected] vsftpd]# lftp 192.168.0.63 -u vip

Password:

lftp [email protected]:~> ls  

lftp [email protected]:/> rm -rf chroot_list

rm ok, `chroot_list' removed

lftp [email protected]:/> ls

-r--r--r--    1 0        0         8492640 Mar 09 14:21 a.zip

 

 

 

[[email protected] vuserconfig]# lftp 192.168.0.63 -u vip,123456

或:

[[email protected] vsftpd]# lftp 192.168.0.63 -u vip

Password:

互動:你認為哪一種更好?為什麼?

lftp [OPTS]

-u [,] 使用指定的使用者名稱/口令進行驗證
-p
連線指定的埠

 

lftp 192.168.0.63  -u vip   後,可以執的命令:

* 下載單個檔案和一組檔案,斷點續傳用-c引數
lftp ................:/> get -c ls-lR.txt   #
下載單個檔案
lftp ...............:/> mget *.txt   #
下載多個檔案

lftp ................:/> put -c ls-lR.txt   #上傳單個檔案
lftp ...............:/> mput *.txt   #上傳多個檔案
lftp ................:/> mirror  dir   #
映象一個目錄。下載一個目錄時用。

 

 

 

回顧配置檔案引數:

anonymous_enable=YES          #啟用匿名使用者(anonymous、ftp)

local_enable=YES              #本地使用者、啟用

write_enable=YES              #本地使用者、可寫

#anon_upload_enable=YES       #匿名使用者可寫

#anon_mkdir_write_enable=YES  #匿名使用者可以建立目錄

#idle_session_timeout=600     #超時時間

#data_connection_timeout=120  #超時時間

listen=YES                    #是否監聽

pam_service_name=vsftpd       #開啟pam支援

userlist_enable=YES           #使用者列表功能開啟

tcp_wrappers=YES              #開始tcp_wrappers支援

 

黑白名單:

userlist_deny=NO    #黑名單變白名單

 

 

 

鎖定使用者訪問的目錄:

chroot_local_user=NO

chroot_list_enable=YES

chroot_list_file=/etc/vsftpd/chroot_list   #寫誰鎖誰

 

chroot_local_user=YES

chroot_list_enable=YES

chroot_list_file=/etc/vsftpd/chroot_list   #寫誰不鎖誰

 

其他功能:

匿名使用者可以重新命名和刪除:

anon_other_write_enable=YES

bind IP(幫定監聽IP):

listen_address=IP

 

local_max_rate=N

anon_max_rate=N

 

max_client=N

max_per_ip=N

 

FTP數字程式碼的意義

 

110 重新啟動標記應答。
120 服務在多久時間內ready。
125 資料鏈路埠開啟,準備傳送。
150 檔案狀態正常,開啟資料連線埠。
200 命令執行成功。
202 命令執行失敗。
211 系統狀態或是系統求助響應。
212 目錄的狀態。
213 檔案的狀態。
214 求助的訊息。
215 名稱系統型別。
220 新的聯機服務ready。
221 服務的控制連線埠關閉,可以登出。
225 資料連結開啟,但無傳輸動作。
226 關閉資料連線埠,請求的檔案操作成功。
227 進入passive mode。
230 使用者登入。
250 請求的檔案操作完成。
257 顯示目前的路徑名稱。
331 使用者名稱稱正確,需要密碼。
332 登入時需要賬號資訊。
350 請求的操作需要進一部的命令。
421 無法提供服務,關閉控制連結。
425 無法開啟資料鏈路。
426 關閉聯機,終止傳輸。
450 請求的操作未執行。
451 命令終止:有本地的錯誤。
452 未執行命令:磁碟空間不足。
500 格式錯誤,無法識別命令。
501 引數語法錯誤。
502 命令執行失敗。
503 命令順序錯誤。
504 命令所接的引數不正確。
530 未登入。
532 儲存檔案需要賬戶登入。
550 未執行請求的操作。
551 請求的命令終止,型別未知。
552 請求的檔案終止,儲存位溢位。 
553 未執行請求的的命令,名稱不正確