VSFTP詳細配置說明

VSFTP詳細配置說明

§·FTP(File Transfer Protocol 文件傳輸協議)介紹 1

§·FTP連接類型主動模式與被動模式 2

§·Linux中FTP軟件 VSFTP介紹 4

§·Linux中 VSFTP基于mariadb用戶名密碼認證 7

§·附錄課外學習資料參考 9

§·常見問題處理 11

 §·FTP(File Transfer Protocol 文件傳輸協議)介紹

※·FTP: File Transfer Protocol,監聽的端口為TCP/21號端口(命令連接端口),數據傳輸端口為TCP/20號端口.

※·文件傳輸協議,應用層協議, 明文協議:認證及數據傳輸。

※·FTP為服務器端客戶端架構:  

服務端實現:vsftpd, pureftpd, proftpd, …, Filezilla Server

客戶端實現:Linux: ftp, lftp ;  Windows: cuteftp, Filezilla, Flashfxp, …

※·FTP簡單介紹

FTP 是File Transfer Protocol(文件傳輸協議)的英文簡稱,而中文簡稱為“文傳協議”。用于Internet上的控制文件的雙向傳輸。同時,它也是一個應用程序(Application)?;诓煌牟僮飨到y有不同的FTP應用程序,而所有這些應用程序都遵守同一種協議以傳輸文件。在FTP的使用當中,用戶經常遇到兩個概念:"下載"(Download)和"上傳"(Upload)。"下載"文件就是從遠程主機拷貝文件至自己的計算機上;"上傳"文件就是將文件從自己的計算機中拷貝至遠程主機上。用Internet語言來說,用戶可通過客戶機程序向(從)遠程主機上傳(下載)文件。

※·FTP賬戶分類

◎·Real帳戶

這類用戶是指在FTP服務上擁有帳號。當這類用戶登錄FTP服務器的時候,其默認的主目錄就是其帳號命名的目錄。但是,其還可以變更到其他目錄中去。如系統的主目錄等等。

◎·Guest用戶

FTP服務器中,我們往往會給不同的部門或者某個特定的用戶設置一個帳戶。但是,這個賬戶有個特點,就是其只能夠訪問自己的主目錄。服務器通過這種方式來保障FTP服務上其他文件的安全性。這類帳戶,在Vsftpd軟件中就叫做Guest用戶。擁有這類用戶的帳戶,只能夠訪問其主目錄下的目錄,而不得訪問主目錄以外的文件。

◎·Anonymous(匿名)用戶

這也是我們通常所說的匿名訪問。這類用戶是指在FTP服務器中沒有指定帳戶,但是其仍然可以進行匿名訪問某些公開的資源。

在組建FTP服務器的時候,我們就需要根據用戶的類型,對用戶進行歸類。默認情況下,Vsftpd服務器會把建立的所有帳戶都歸屬為Real用戶。但是,這往往不符合企業安全的需要。因為這類用戶不僅可以訪問自己的主目錄,而且,還可以訪問其他用戶的目錄。這就給其他用戶所在的空間帶來一定的安全隱患。所以,企業要根據實際情況,修改用戶所在的類別。

§·FTP連接類型主動模式與被動模式

※·命令連接:傳輸指令,21/tcp ,客戶端發出請求,服務端21/tcp響應,數據連接:傳輸數據

※·數據連接必然是通過某個命令連接發起,由于數據連接的端口不同,FTP服務器有以下兩種工作模式:

※·主動模式(PORT)(服務器連接客戶端端口)

主動模式下,FTP客戶端從任意的非特殊的端口(N > 1023)連入到FTP服務器的命令端口–21端口。然后客戶端在N+1(N+1 >= 1024)端口監聽,并且通過N+1(N+1 >= 1024)端口發送命令給FTP服務器。服務器會反過來連接用戶本地指定的數據端口,比如20端口。以服務器端防火墻為立足點,要支持主動模式FTP需要打開如下交互中使用到的端口:

1 .FTP服務器命令(21)端口接受客戶端任意端口(客戶端初始連接)

2 .FTP服務器命令(21)端口到客戶端端口(>1023)(服務器響應客戶端命令)

3 .FTP服務器數據(20)端口到客戶端端口(>1023)(服務器初始化數據連接到客戶端數據端口)

4 .FTP服務器數據(20)端口接受客戶端端口(>1023)(客戶端發送ACK包到服務器的數據端口);

11.png

在第1步中,客戶端的命令端口與FTP服務器的命令端口建立連接,并發送命令“PORT 1027”。然后在第2步中,FTP服務器給客戶端的命令端口返回一個"ACK"。在第3步中,FTP服務器發起一個從它自己的數據端口(20)到客戶端先前指定的數據端口(1027)的連接,最后客戶端在第4步中給服務器端返回一個"ACK"。

主動方式FTP的主要問題實際上在于客戶端。FTP的客戶端并沒有實際建立一個到服務器數據端口的連接,它只是簡單的告訴服務器自己監聽的端口號,服務器再回來連接客戶端這個指定的端口。對于客戶端的防火墻來說,這是從外部系統建立到內部客戶端的連接,這是通常會被阻塞的。

※·被動模式(PASV)(客戶端連接服務器)

 為了解決服務器發起到客戶的連接的問題,人們開發了一種不同的FTP連接方式。這就是所謂的被動方式,或者叫做PASV,當客戶端通知服務器它處于被動模式時才啟用。

在被動方式FTP中,命令連接和數據連接都由客戶端,這樣就可以解決從服務器到客戶端的數據端口的入方向連接被防火墻過濾掉的問題。當開啟一個FTP連接時,客戶端打開兩個任意的非特權本地端口(N >; 1024和N+1)。第一個端口連接服務器的21端口,但與主動方式的FTP不同,客戶端不會提交PORT命令并允許服務器來回連它的數據端口,而是提交PASV命令。這樣做的結果是服務器會開啟一個任意的非特權端口(P >; 1024),并發送PORT P命令給客戶端。然后客戶端發起從本地端口N+1到服務器的端口P的連接用來傳送數據。

對于服務器端的防火墻來說,必須允許下面的通訊才能支持被動方式的FTP:

1 .FTP服務器命令(21)端口接受客戶端任意端口(客戶端初始連接)

2 .FTP服務器命令(21)端口到客戶端端口(>1023)(服務器響應客戶端命令)

3 .FTP服務器數據端口(>1023)接受客戶端端口(>1023)(客戶端初始化數據連接到服務器指定的任意端口)

4 .FTP服務器數據端口(>1023)到客戶端端口(>1023)(服務器發送ACK響應和數據到客戶端的數據端口)

 

 221.png

 

   在第1步中,客戶端的命令端口與服務器的命令端口建立連接,并發送命令“PASV”。然后在第2步中,服務器返回命令"PORT 2024",告訴客戶端(服務器)用哪個端口偵聽數據連接。在第3步中,客戶端初始化一個從自己的數據端口到服務器端指定的數據端口的數據連接。最后服務器在第4 步中給客戶端的數據端口返回一個"ACK"響應。

被動方式的FTP解決了客戶端的許多問題,但同時給服務器端帶來了更多的問題。最大的問題是需要允許從任意遠程終端到服務器高位端口的連接。幸運的是,許多FTP守護程序,包括流行的WU-FTPD允許管理員指定FTP服務器使用的端口范圍。詳細內容參看附錄1。

第二個問題是客戶端有的支持被動模式,有的不支持被動模式,必須考慮如何能支持這些客戶端,以及為他們提供解決辦法。例如,Solaris提供的FTP命令行工具就不支持被動模式,需要第三方的FTP客戶端,比如ncftp。

隨著WWW的廣泛流行,許多人習慣用web瀏覽器作為FTP客戶端。大多數瀏覽器只在訪問ftp://這樣的URL時才支持被動模式。這到底是好還是壞取決于服務器和防火墻的配置

 §·Linux中FTP軟件 VSFTP介紹

※·VSFTP中用戶分類

本地用戶(系統用戶):root及系統用戶(0-999);

匿名用戶(映射至某一固定的系統用戶):ftp, vsftp, /var/ftp/

虛擬用戶:(不是系統自身賬戶)

nsswitch: name service switch

PAM:Plugable Authentication Modules

※·VSFTP程序文件及其配置文件介紹

[

root@Centos7 ftp]#yum  install vsftpd
[root@Centos7 ftp]# rpm -ql vsftpd
/etc/logrotate.d/vsftpd 
/etc/pam.d/vsftpd    #關于vsftpd提供本地用于認證模塊
/etc/vsftpd     #vsftpd配置文件目錄
/etc/vsftpd/ftpusers   #禁止登陸FTP的賬戶列表
/etc/vsftpd/user_list   #啟用某個功能拒絕與運行的用戶列表
/etc/vsftpd/vsftpd.conf   #vsftpd主配置文件 
/etc/vsftpd/vsftpd_conf_migrate.sh
/usr/lib/systemd/system-generators/vsftpd-generator
/usr/lib/systemd/system/vsftpd.service  #systemd 控制vsftpd服務腳本文件
/usr/lib/systemd/system/vsftpd.target
/usr/lib/systemd/system/vsftpd@.service
/usr/sbin/vsftpd     #vsftpd程序
/var/ftp      #默認vsftp的下載目錄
/var/ftp/pub     #默認vsftp的下載目錄

 ※·VSFTP服務腳本加入系統服務中去

vsftpd:very secure ftp daemon

程序:/usr/sbin/vsftpd

配置文件:/etc/vsftpd/vsftpd.conf

CentOS 6:

/etc/rc.d/init.d/vsftpd

chkconfig  vsftpd  on

CentOS 7:

/usr/lib/systemd/system/vsftpd.service

systemctl  enable  vsftpd.service

 ※·VSFTP主配置文件介紹

vim /etc/vsftpd/vsftpd.conf
 
anonymous_enable=YES   #是否允許匿名賬戶登錄FTP服務器
local_enable=YES     #是否允許本地賬戶登錄FTP服務器
write_enable=YES     #是否開啟目錄上次權限(控制所有賬戶)
 
anonymous_enable=YES   #是否允許匿名賬戶登錄FTP服務器
anon_upload_enable=YES  #匿名用戶的上傳操作;生效要依賴于write_enable=YES;
anon_mkdir_write_enable=YES #匿名用戶創建目錄的權限;
anon_other_write_enable=YES #匿名用戶的刪除及重命名操作權限;
local_enable=YES     #所有的非匿名的生效,都依賴于此指令;
local_umask=022     #本地用戶上傳文件的權限掩碼;
目錄消息:
dirmessage_enable=YES   #用戶第一次進入目錄時,vsftpd會查看.message文件,并將其內容顯示給用戶;
message_file     #指定文件路徑,而不使用默認的.message; 
數據傳輸日志:
xferlog_enable     #是否開啟日志功能
xferlog_std_format    #日志的格式
xferlog_file=/var/log/xferlog  #日志的存放路徑
數據傳輸模式:
connect_from_port_20    #是否啟用PORT模式;
修改匿名用戶上傳的文件的屬主:
chown_uploads    #是否修改;
chown_username   #啟用chown_uploads指令時,將文件屬主修改為此指令指定的用戶;默認為root;
chown_upload_mode  #設定匿名用戶上傳的文件的權限;默認為600;
設定會話超時時長:
idle_session_timeout  #空閑會話超時時長;
connect_timeout   #PORT模式下,服務器連接客戶端的超時時長;
data_connection_timeout #數據傳輸的超時時長;
命令連接的監聽端口:
listen_port    #默認為21;
設定連接及傳輸速率:
local_max_rate   #本地用戶的最大傳輸速率,單位是字節;默認為0,表示無限制;
anon_max_rate   #匿名用戶的最大傳輸速率;
max_clients    #最大并發連接數;
max_per_ip    #每個IP所允許發起的最大連接數;
禁錮本地用戶:
chroot_local_user=YES  #禁錮所有本地用戶;注意:要求用戶不能對家目錄有寫權限;
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list  #禁錮指定用戶于家目錄中;
用法訪問控制
userlist_enable=YES
啟用時,vsftpd將加載一個由userlist_file指令指定的用戶列表文件;此文件中的用戶是否能訪問vsftpd服務取決于userlist_deny指令;
userlist_deny=YES   #表示此列表為黑名單;
userlist_deny=NO   #表示此列表為白名單;

pam_service_name=vsftpd #驗證本地賬戶可以登錄FTP服務器。

注意事項:

vsftpd文件為 /etc/pam.d/vsftp,查看cat  /etc/pam.d/vsftp

[root@Centos7 ftp]# 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
#此處禁用 /etc/vsftpd/ftpusers的用戶登錄FTP系統
auth       required pam_shells.so
auth       include password-auth
account    include password-auth
session    required     pam_loginuid.so
session    include password-auth
[root@Centos7 ftp]#

§·Linux中 VSFTP基于mariadb用戶名密碼認證

※·設置vsftpd主配置文件中參數設置

~]#vim  /etc/vsftpd/vsftpd.conf
write_enable=YES  #禁止匿名賬戶登錄,所有的賬戶其實是映射到本地賬戶權限的
local_enable=YES  #開啟本地賬戶登錄權限
write_enable=YES  #開啟上傳總開關,實際的上次權限在獨立文件中定義
pam_service_name=vsftpd.sql #設置pam認證的選項,通過/etc/pam.d/vsftpd.sql文件認證sql用戶
guest_enable=YES       #設置啟用虛擬賬戶認證功能 (啟用來賓賬號功能)
guest_username=vuser       #設置映射的賬戶(把來賓賬號映射的實際系統賬戶)
user_config_dir=/etc/vsftpd/users_conf    #在該目錄下設置虛擬賬戶同名文件控制賬戶獨立權限

※·設置vsftpd的虛擬賬戶的本地映射實際賬戶

該文件的名稱根據 /etc/vsftpd/vsftpd.conf 設置

 

~]# mkdir  /ftproot        #創建映射賬戶的家目錄
~]# useradd  -d  /ftproot  vuser    #設置虛擬賬戶 vuser
~]# mkdir  /ftproot/{pub,upload}     #在家目錄中新增兩個FTP目錄
~]# setfacl  -m  u:vuser:rwx   /ftproot/upload #設置vuser對upload有上傳修改權限

※·設置vsftpd的虛擬賬戶的的權限配置文件

該文件的名稱根據 /etc/vsftpd/vsftpd.conf 設置

# mkdir /etc/vsftpd/vusers_conf
#touch /etc/vsftpd/vusers_conf/{tom,jerry}
#vim /etc/vsftpd/vusers_conf/tom

※·設置vsftpd的pam可以訪問mysql數據庫中的賬戶

pam配置文件:/etc/pam.d/vsftpd.mysql

auth  required  pam_mysql.so  user=vsftpd  passwd=mageedu  host=localhost  db=vsftpd  table=users  usercolumn=name  passwdcolumn=password  crypt=2
account  required  pam_mysql.so  user=vsftpd  passwd=mageedu  host=localhost  db=vsftpd  table=users  usercolumn=name  passwdcolumn=password crypt=2

參數解釋:

auth  required:驗證用戶名和密碼是否存儲
pam_mysql.so :通過pam_mysql.so共享模塊訪問mysql數據庫(模塊文件路徑為:/usr/lib64/securit/pam_mysql.so)  
user=vsftpd  passwd=mageedu  host=localhost :登錄mysql服務器的用戶名和密碼,及其mysql服務器地址
db=vsftpd   : mysql服務器上的數據庫名稱
table=users  : mysql服務器上的表名稱
usercolumn=name  : mysql表中用戶名字段
passwdcolumn=password  : mysql表中密碼字段
crypt=2 : mysql數據庫中加密類型

※·設置mariadb中相應的用戶名和密碼

◎·編譯pam連接mariadb的共享庫文件pam_mysql.so

準備編譯環境,安裝編譯需要的頭文件,庫文件,下載連接程序 pam_mysql-0.7RC1

 

# yum  -y  groupinstall  "Development Tools" "Server Platform Development"
# yum  -y install pam-devel openssl-devel mariadb-devel

下載下載連接程序 pam_mysql-0.7RC1,編譯并安裝

~]#get  http://10.1.0.1/pub/pam/pam_mysql-0.7RC1
~]#tar  -xf   pam_mysql-0.7RC1
~]#cd  pam_mysql-0.7RC1
~]# ./configure --with-mysql=/usr  --with-openssl=/usr  --with-pam=/usr  --with-pam-mods-dir=/usr/lib64/security
~]# make && make install
生成的共享模塊pam_mysql.so會自動安裝到 :/usr/lib64/securit/pam_mysql.so

◎·安裝mariadb,創建本地數據庫,建立對應的用戶名和密碼

創建數據庫,創建表,插入用戶名和密碼數據,添加訪問賬戶

mysql> CREATE DATABASE vsftpd;
mysql> CREATE TABLE vsftpd.users 
          \ (id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, 
          \ name CHAR(30) NOT NULL UNIQUE KEY,
          \ password CHAR(48));
mysql> INSERT  INTO  vsftpd.users(name,password) 
          \VALUES ('tom',PASSWORD('mageedu')),('jerry',PASSWORD('mageedu'));    
mysql> GRANT ALL ON vsftpd.* TO 'vsftpd'@'localhost' IDENTIFIED BY 'mageedu';
mysql> GRANT ALL ON vsftpd.* TO 'vsftpd'@'127.0.0.1' IDENTIFIED BY 'mageedu';
mysql> FLUSH PRIVILEGES;

※·小結:關于vsftpd 基于本地MySQL認證用戶名和密碼

1 . 配置vsftpd的主配置文件基于pam認證的功能;

2 . 配置pam認證的配置文件連接mysql可以讀取mysql數據庫中的用戶名和密碼;

3 . 登錄到vsftp的虛擬用戶需要映射到本地實際的存在的用戶名和密碼,這個需要自己手工配置。

4 . 對個每個mysql數據庫中的用戶名和密碼的權限控制在 user_config_dir=/etc/vsftpd/users_conf 目錄下,新  建同名的文件,在文件中指明權限,參數為vsftpd主配置文件中對于匿名用戶的權限。

 §·附錄課外學習資料參考

※·vsftpd基于本地用戶文件認證

vsftpd虛擬賬戶的數據保存在berkeley DB格式的數據文件中,需要安裝 db4-utils工具來創建這樣的數據文件,具體的步驟如下:

1.創建虛擬用戶的數據庫文件

(通過db4-utils把文件轉為berkeley DB格式文件)

注意:Centos 7 的安裝包為:libdb-utils-5.3.21-19.el7.x86_64

[root@Centos7 vsftpd]# rpm -ql libdb-utils-5.3.21-19.el7.x86_64
/usr/bin/db_archive
/usr/bin/db_checkpoint
/usr/bin/db_deadlock
/usr/bin/db_dump
/usr/bin/db_dump185
/usr/bin/db_hotbackup
/usr/bin/db_load
/usr/bin/db_log_verify
/usr/bin/db_printlog
/usr/bin/db_recover
/usr/bin/db_replicate
/usr/bin/db_stat
/usr/bin/db_tuner
/usr/bin/db_upgrade
/usr/bin/db_verify
[root@Centos7 vsftpd]#

 

首先需要創建明文的密碼文件,明文文件奇數行為用戶名,偶數行為密碼,然后使用db_load工具將其轉換為數據庫文件。

~]# cat vlogin
sb
123456
sa
123456
sc
123456
sd
123456
~]# db_load -T -t hash -f vlogin vlogin.db
~]# ll
-rw-r--r--. 1 root root    40 Oct 14 12:32 vlogin
-rw-r--r--. 1 root root 12288 Oct 14 12:33 vlogin.db
~]#

2.修改配置文件/etc/vsftpd/vsftpd.conf

pam_service_name=vlogin
guest_enable=YES
guest_username=vuser
user_config_dir=/etc/vsftpd/users_conf

3.添加/etc/pam.d/vlogin文件內容

[root@Centos7 vsftpd]# cat /etc/pam.d/vlogin 
auth   required   /usr/lib64/security/pam_userdb.so    db=/etc/vsftpd/vlogin
account  required   /usr/lib64/security/pam_userdb.so   db=/etc/vsftpd/vlogin

※·小結:關于VSFTP基于本地用戶文件認證流程:

1 . 創建本地用戶文件,并且把文件轉換成二進制格式;

2 . 配置vsftpd的主配置文件,添加pam認證的功能;

3 . 配置pam的配置文件,可以讀取本地二進制文件;

4 . 測試通過本地文件中的用戶名和密碼登陸

§·常見問題處理

 31.png

 

原創文章,作者:linux_root,如若轉載,請注明出處:http://www.www58058.com/51606

(1)
linux_rootlinux_root
上一篇 2016-10-17 08:34
下一篇 2016-10-17 08:34

相關推薦

  • Linux權限管理與grep命令應用(第四周)

    第四周作業 1.復制/etc/skel目錄為/home/tuser1,要求/home/tuser1及其內部文件的屬組和其它用戶均沒有任何訪問權限 [root@localhost ~]# cp -r /etc/skel/ /home/tuser1 [root@localhost ~]# ch…

    Linux干貨 2016-09-15
  • 文本三劍客 grep sed awk

    模式,選項。常用用法。

    2017-12-03
  • 0803作業

    課上練習 1.當用戶xiaoming 對/testdir  目錄無執行權限時,意味著無法做哪些操作?  drwxr-xr–. 14 root root 4096 Aug  3 13:35 /testdir [xiaoming@localhost ~]$ touch /testdir/f1…

    Linux干貨 2016-08-04
  • Ansible

    Ansible簡介 ansible是一種基于python語言開發的輕量級自動化運維工具,它可以自動化批量完成主機服務配置管理,軟件部署,執行特定命令等工作 ansible的核心組件有ansible core(核心代碼),host inventory(要管理的主機),core modules(核心模塊),custom modules(用戶可以自定義模塊),pl…

    Linux干貨 2016-11-14
  • 第四周練習

    1.復制/etc/skel目錄為/home/tuser1,要求/home/tuser1及其內部文件的屬組和其他用戶均沒有任何訪問權限。         # cp -r /etc/skel /home/tuser1      &nb…

    Linux干貨 2016-11-18
  • 進程管理的總結

    進程管理的總結 進程相關概念: Process: 運行中的程序的一個副本,是被載入內存的一個指令集合。進程是程序的基本執????????????????????? 行實體;程序是指令、數據及其組織形式的描述,進程是程序的實體 Process ID:進程的標記號碼 task struct:Linux內核存儲進程信息的數據結構格式 task list:多個任務的…

    2017-12-23
欧美性久久久久