第十章 網絡文件共享服務之ftp
10.1 ftp介紹
網絡文件共享服務主流的主要有三種,分別是ftp、nfs、samba。在上一章中我們已經了解了nfs,本章我們將來說說ftp。
FTP是File Transfer Protocol(文件傳輸協議)的簡稱,用於internet上的控制文件的雙向傳輸。
FTP也是一個應用程序,基於不同的操作系統有不同的FTP應用程序,而所有這些應用程序都遵守同一種協議以傳輸文件。
在FTP的使用當中,用戶經常遇到兩種概念:下載和上傳
下載(Download)文件就是從遠程主機拷貝文件至自己的計算機上
上傳(Upload)文件就是將文件從自己的計算機上拷貝至遠程主機上。
10.2 ftp架構
FTP工作於應用層,監聽於tcp的21號端口,是一種C/S架構的應用程序。其有多種客戶端和服務端的應用程序,下面來簡單介紹一下
Client:
ftp
lftp,lftpget
wget,curl
filezilla
gftp(Linux GUI)
商業軟件:flashfxp,cuteftp
Server:
wu-ftpd
proftpd:提供web接口的一種ftp服務端程序
pureftp
vsftpd:Very Secure
ServU:windows平臺的一種強大ftp服務端程序
10.3 ftp數據連接模式
ftp有2種數據連接模式:命令連接和數據連接
命令連接:是指文件管理類命令,始終在線的持久性連接,直到用戶退出登錄為止
數據連接:是指數據傳輸,按需創建及關閉的連接
其中數據連接需要關註的有2點,一是數據傳輸格式,二是數據傳輸模式
數據傳輸格式有以下兩種:
a) 文件傳輸
b) 二進制傳輸
數據傳輸模式也有2種:
a) 主動模式:由服務器端創建數據連接
b) 被動模式:由客戶端創建數據連接
下面來介紹下兩種數據傳輸模式的建立過程:
主動模式:
命令連接:
Client(1025)--> Server(21)客戶端以一個隨機端口(大於1023)來連服務器端的21號端口
數據連接:
Server(20/tcp) --> Client(1025+1) 服務器端以自己的20號端口去連客戶端創建命令連接時使用的隨機端口+1的端口號
此處有個弊端,因為客戶端的端口是隨機的,客戶端如果開了防火墻,則服務器端去連客戶端創建數據連接時可能會被拒絕
被動模式:
命令連接:
Client(1110) --> Server(21)客戶端以一個隨機端口來連成服務器端的21號端口
數據連接:
Client(1110+1) --> Server(隨機端口)客戶端以創建命令連接的端口+1的端口號去連服務器端通過命令連接告知自己的一個隨機端口號來創建數據連接
10.4 ftp響應碼
1xx:純信息的狀態碼
2xx:成功類的狀態碼
3xx:提示需進一步提供補充類信息的狀態碼
4xx:客戶端錯誤
5xx:服務端錯誤
10.5 用戶認證
ftp的用戶主要有三種:
a) 虛擬用戶:僅用於訪問某特定服務中的資源
b) 系統用戶:可以登錄系統的真實用戶
c) 匿名用戶
ftp的用戶認證主要通過nsswitch和pam來實現,關於nsswitch和pam,請看此處
10.6 vsftpd
此處我們要說的ftp應用程序是vsftpd,這也是在公司中用得最多的一款ftp軟件。
本章主要說一下vsftpd的配置,關於安裝就不啰嗦了,請自行google
vsftpd用戶認證配置文件是/etc/pam.d/vsftpd
服務腳本為/etc/rc.d/init.d/vsftpd
配置文件目錄為/etc/vsftpd/,其中主配置文件為/etc/vsftpd/vsftpd.conf
匿名用戶(映射為ftp用戶)的共享資源位置是/var/ftp
系統用戶通過ftp訪問的資源位置為用戶的家目錄
虛擬用戶通過ftp訪問的資源位置為給虛擬用戶指定的映射成為的系統用戶的家目錄
10.7 vsftpd的常用配置
匿名用戶的配置:
anonymous_enable=YES啟用匿名用戶登錄
anon_upload_enable=YES允許匿名用戶上傳
anon_mkdir_write_enable=YES允許匿名用戶創建目錄,但是不能刪除
anon_other_write_enable=YES允許匿名用戶創建和刪除目錄
系統用戶的配置:
local_enable=YES啟用本地用戶登錄
write_enable=YES允許本地用戶有寫權限
local_umask=022通過ftp上傳文件的默認遮罩碼
chroot_local_user=YES禁錮所有的ftp本地用戶於其家目錄中
禁錮文件(/etc/vsftpd/chroot_list)中指定的ftp本地用戶於其家目錄中:
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list
虛擬用戶的配置:
所有的虛擬用戶會被統一映射為一個指定的系統帳號,訪問的共享位置即為此系統帳號的家目錄
各虛擬用戶可被賦予不同的訪問權限,通過匿名用戶的權限控制參數進行指定
虛擬用戶帳號的存儲方式:
a) 文件:編輯文件,此文件需要被編碼為hash格式。
奇數行為用戶名
偶數行為密碼
b) 關系型數據庫的表中:
通過即時查詢數據庫完成用戶認證
mysql庫:pam要依賴於pam_mysql軟件,可以通過epel源yum安裝
日誌配置:
xferlog_enable=YES是否啟用傳輸日誌,記錄ftp傳輸過程
xferlog_std_format=YES傳輸日誌是否使用標準格式
xferlog_file=/var/log/xferlog指定傳輸日誌存儲的位置
改變上傳文件的屬主:自動將客戶端上傳到服務器的某文件的屬主改為指定的用戶
chown_uploads=YES是否啟用改變上傳文件屬主的功能
chown_username=whoever 指定要將上傳的文件的屬主改為哪個用戶,此用戶必須在系統中存在
vsftpd使用pam完成用戶認證,其用到的pam配置文件:
pam_service_name=vsftpd指定vsftpd使用/etc/pam.d下的哪個pam配置文件進行用戶認證
是否啟用控制用戶登錄的列表文件:默認為/etc/vsftpd/user_list文件
userlist_enable=YES
userlist_deny=YES是否拒絕userlist指定的列表文件中存在的用戶登錄ftp
連接限制:
max_clients=#最大並發連接數
max_per_ip=#每個IP可同時發起的並發請求數
傳輸速率:
anon_max_rate匿名用戶的最大傳輸速率,單位是“字節/秒”
local_max_rate本地用戶的最大傳輸速率,單位是“字節/秒”
通用配置:
dirmessage_enable=YES啟用某目錄下的.message描述信息
假定有一個目錄為/upload,在其下創建一個文件名為.message,在文件內寫入一些描述信息,則當用戶切換至/upload目錄下時會自動顯示.message文件中的內容
message_file設置訪問一個目錄時獲得的目錄信息文件的文件名,默認是.message
idle_session_timeout=600設置默認的斷開不活躍session的時間
data_connection_timeout=120設置數據傳輸超時時間
ftpd_banner=Welcome to chenlf FTP service.定制歡迎信息,登錄ftp時自動顯示
10.8 vsftpd虛擬用戶配置
vsftpd虛擬用戶的配置步驟如下,這裏使用mysql進行用戶認證
a) 安裝所需要的程序
yum -y install vsftpd mysql-server mysql-devel pam_mysql
註意:pam_mysql由epel源提供
b) 創建虛擬用戶帳號
準備數據庫及相關表:首先確保mysql服務已經正常啟動。而後,按需要建立存儲虛擬用戶的數據庫即可,這裏將其創建為vsftpd數據庫
mysql> CREATE DATABASE vsftpd; mysql> GRANT SELECT ON vsftpd.* TO [email protected] IDENTIFIED BY ‘Your password‘; mysql> GRANT SELECT ON vsftpd.* TO [email protected] IDENTIFIED BY ‘Your password‘; mysql> FLUSH PRIVILEGES; mysql> use vsftpd; mysql> CREATE TABLE users ( id int UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, name char(20) binary NOT NULL, password char(48) binary NOT NULL );
添加測試的虛擬用戶:根據需要添加所需要的用戶,需要說明的是,這裏將其密碼為了安全起見應使用PASSWORD函數加密後存儲
mysql> INSERT INTO users(name,password) values(‘tom‘,password(‘Your password‘)); mysql> INSERT INTO users(name,password) values(‘jerry‘,password(‘Your password‘));
c) 配置vsftpd
建立pam認證所需文件,編輯/etc/pam.d/vsftpd.mysql文件,添加如下兩行:
auth required /lib64/security/pam_mysql.so user=vsftpd passwd=‘Your password‘ host=mysqldb_ip db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2 account required /lib64/security/pam_mysql.so user=vsftpd passwd=‘Your password‘ host=mysqldb_ip db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2
註意:由於mysql的安裝方式不同,pam_mysql.so基於unix sock連接mysql服務器時可能會出問題,此時,建立授權一個可遠程連接的mysql並訪問vsftpd數據庫的用戶
修改vsftpd的配置文件/etc/vsftpd/vsftpd.conf,使其適應mysql認證
建立虛擬用戶映射的系統用戶及對應的目錄:
建立虛擬用戶映射的系統用戶及對應的目錄:
useradd -s /sbin/nologin -d /var/ftproot vuser chmod go+rx /var/ftproot/
請確保/etc/vsftpd/vsftpd.conf中已經啟用了以下選項:
anonymous_enable=YES local_enable=YES write_enable=YES anon_upload_enable=NO anon_mkdir_write_enable=NO chroot_local_user=YES
而後添加以下選項:
guest_enable=YES guest_username=vuser
並確保pam_service_name選項的值如下所示:
pam_service_name=vsftpd.mysql
d) 啟動vsftpd服務並查看端口開啟情況
service vsftpd start chkconfig vsftpd on ss -tnlp|grep 21
e) 配置虛擬用戶具有不同的訪問權限
vsftpd可以在配置文件目錄中為每個用戶提供單獨的配置文件以定義其ftp服務訪問權限,每個虛擬用戶的配置文件名同虛擬用戶的用戶名。
配置文件目錄可以是任意未使用目錄,只需要在vsfptd.conf中指定其路徑及名稱即可
編輯vsftpd.conf文件,添加如下選項
user_config_dir=/etc/vsftpd/vusers_config
創建所需要的目錄,並為虛擬用戶提供配置文件
mkdir /etc/vsftpd/vusers_config cd /etc/vsftpd/vusers_config touch tom jerry
配置虛擬用戶的訪問權限
虛擬用戶對vsftpd服務的訪問權限是通過匿名用戶的相關指令進行的。
比如,如果需要讓tom用戶具有上傳文件的權限,可以修改/etc/vsftpd/vusers_config/tom文件,添加如下選項即可:
anon_upload_enable={YES|NO} anon_mkdir_write_enable={YES|NO} anon_other_write_enable={YES|NO}
Linux下好用的下載工具:
axel:可實現多線程下載,斷點續傳等功能,下載速度超快
lftpget
wget
curl
本文出自 “忘情居” 博客,請務必保留此出處http://itchentao.blog.51cto.com/5168625/1929322
第十章 網絡文件共享服務之ftp