FTP服務的簡介
mysql
FTP是Internet上使用很是普遍的一種通訊協議,用於在不一樣的主機之間進行文件傳輸。Linux系統下經常使用的FTP服務器軟件包括有wu-ftpd;vsftpd(Very Secure ftp Daemon);proftpd;pureftpd等sql
客戶端軟件有:數據庫
CLI:ftp;lftp;(wget ,lftpget)下載工具,非交互式centos
GUI: gftpd ;FlashFXP;Cuteftp;Filezilla服務器
FTP採用C/S的工做模式,經過TCP協議創建客戶端和服務器之間的鏈接。但與其餘大多數的應用協議不一樣,FTP協議在客戶端和服務器之間創建了兩套通訊鏈路,分別是控制鏈路和數據鏈路;併發
FTP客戶端與服務器之間的通訊過程ide
一、用戶使用FTP協議的客戶機程序,鏈接到遠程的FTP服務器程序上模塊化
二、用戶使用客戶端程序進行FTP文件的上傳或下載,FTP客戶端程序經過控制鏈路向FTP發送相應的控制命令工具
三、服務器程序接收並執行用戶所發出的命令ui
四、FTP服務器將執行結果返回到客戶端
FTP經過兩組套接字通訊:控制蓮姐套接字 21/TCP,數據鏈接套接字 20/TCP。可是傳輸數據又能夠分爲主動模式與被動模式,其數據傳輸端口有所不一樣。
主動模式工做的原理:FTP客戶端鏈接到FTP服務器的21端口,發送用戶名和密碼登陸,登陸成功後要list列表或者讀取數據時,客戶端隨機開放一個端口(1024以上),發送PORT命令到FTP服務器 ,告訴服務器客戶端採用主動模式並開放端口;FTP服務器收到PORT主動模式命令和端口號後,經過服務器的20端口和客戶端開放的端口鏈接,發送數據,原理以下圖:
被動模式工做原理:FTP客戶端鏈接到FTP服務器的21端口,發送用戶名和密碼登陸,登陸成功後要list列表或者讀取數據時,發送PASV命令到FTP服務器, 服務器在本地隨機開放一個端口(1024以上 ),而後把開放的端口告訴客戶端,客戶端再鏈接到服務器開放的端口進行數據傳輸,原理以下圖:
VSFTP服務器的安裝和配置
vsftpd能夠經過rpm包或者源碼安裝,經過rpm安裝只需使用yum命令便可。
文件的組成:
/etc/vsftpd: 配置文件目錄 /etc/rc.d/init.d/vsftpd: 服務腳本 /usr/sbin/vsftpd: 主程序 /var/ftp:數據文件目錄(匿名用戶訪問目錄) /etc/pam.d/vsftpd: 認證文件 pam(Plugable Authentication Module)插件式認證模塊 模塊化庫文件:/lib64/security/pam*.so 認證配置文件:/etc/pam.conf和/etc/pam.d/* 基本配置:/etc/vsftpd/vsftpd.conf |
啓動和關閉vsftpd
vsftpd支持兩種啓動方式:xinetd和standalone。其中,xinetd是經過xinetd進程來啓動和關閉vsftpd服務,這是vsftpd默認啓動方式。standalone方式則是採用獨立進程啓動和關閉,與普通程序的啓動方式同樣。
xinetd方式:
採用這種方式時,vsftpd不能單獨管理,當vsftpd須要重啓時,也必須重啓整個xinetd服務器。不推薦這種方式
standalone方式:
# service vsftpd star
# service vsftpd stop
# service vsftpd restart
或者使用: # chkconfig vsftpd on 使得ftp服務自啓動
vsftpd.conf配置文件
vsftpd服務器的配置主要經過其主配置文件/etc/vsftpd.conf來完成。該文件以'#'做爲註釋,每一個選項一行,格式爲'選項=值'。
經常使用選項:
匿名用戶的配置: anonymous_enable=YES登錄權限 anon_upload_enable=YES上傳權限 anon_other_write_enable=YES刪除權限 anon_mkdir_write_enable=YES建立目錄 啓用寫入功能時,ftp用戶對相應的本地文件系統也有相應的寫入權限;生效的權限取決於文件系統權限和服務權限的交集。 禁錮用戶於其家目錄中: chroot_local_user={Yes|No} chroot_list_enable={YES|NO} 只禁錮列表中的用戶在家目錄 chroot_list_file=/etc/vsftpd/chroot_list 禁錮用戶列表 歡迎信息的定義: ftp_banner=some string 或者banner_file=/path/to/some_banner_file(文件中寫歡迎信息) dirmessage_enable=yes(切換目錄時,目錄下的歡迎信息) 在ftp可訪問的目錄下建立.messages文件 控制登陸用戶的機制: /etc/vsftpd/ftpusers中的用戶都不容許使用ftp服務, 這是在/etc/pam.d/vsftpd中定義。 user_list配置文件有兩種用法: 黑名單: userlist_enable=YES userlist_deny=YES 白名單: userlist_enable=YES userlist_deny=NO 鏈接限制: max_clients: 最大併發鏈接數 max_per_ip: 每IP可同時發起併發請求 傳輸速率: anon_max_rate: 匿名用戶的最大傳輸速率,單位是「字節/秒」; local_max_rate: 本地用戶的最大傳輸速率,單位是「字節/秒」 上傳文件的umask: anno_umask: 匿名用戶上傳文件的umask; local_umask: 本地用戶上傳文件的umask; 修改匿名用戶上傳文件的屬主和屬組: chown_uploads=YES chown_username=someuser |
ftp用戶:
匿名用戶: anonymous_enable
系統用戶:local_enable
虛擬用戶:全部的虛擬用戶會映射會一個系統用戶,訪問時的文件目錄是爲此係統用戶的家目錄。
用戶的存放位置:
虛擬用戶帳戶在 : 文件,MySQL,Oracle,Redis,LDAP...
以文件存放虛擬用戶的配置步驟:
1.建立用於保存虛擬用戶文件,其中奇數行爲用戶名,偶數行爲密碼;
# touch VUSER_FILE
tom
123456
jerry
123123
2.將保存虛擬用戶帳戶的文本文件轉換爲數據庫文件:
db_load -T -t hash -f /PATH/TO/VUSER_FILE /PATH/TO/USERDB.db
3.設定PAM的認證文件
/etc/pam.d/vusers.file
auth required /lib64/security/pam_userdb.so db=/PATH/TO/USERDB
account required /lib64/security/pam_userdb.so db=/PATH/TO/USERDB
4.建立一個用於映射虛擬用戶身份的本地用戶
useradd LOCAL_USER
5.修改此虛擬主機的配置文件:
anonymous_enable=NO
guest_enable=YES
guest_username=LOCAL_USER
pam_service_name=vusers.file
local_root=/myftp/ftpdata
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
若是想要對於全部的虛擬用戶分別設定權限,能夠使用:
在虛擬主機的主配置文件中添加指令:
user_config_dir=/PATH/TO/CONFIG_DIR
建立出這個目錄,而且在目錄下建立出與虛擬用戶名相同的文件;
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
local_root=/myftp/ftpdata/alice
anon_umask=022
基於MySQL存放虛擬用戶
'centos',PASSWORD('qhdlink')
'suse',PASSWORD('link19')
1.編譯安裝pam的mysql驅動
下載地址:http://pam-mysql.sourceforge.net/
須要預先安裝編譯環境,即: Development Tools,Server Platform Development, pam-devel, mysql_devel
# tar xf pam_mysql-0.7RC1.tar.gz
# cd pam_mysql-0.7RC1
# ./configure --with-pam=/usr --with-mysql=/usr --with-pam-mods-dir=/lib64/secutiry
# make -j 4 && make install
2.建立數據庫,數據表,及受權用戶;
mysql> create database vsftpd;
mysql> use vsftpd;
mysql> create table users (username char(20),password char(48));
mysql> insert into users values ('centos',PASSWORD('qhdlink')),('gentoo',PASSWORD('qhdlink'))
mysql> grant all on vsftpd.* to 'vsftpd'@'localhost' identified by 'vsftppass';
mysql> grant all on vsftpd.* to 'vsftpd'@'127.0.0.1' identified by 'vsftppass';
mysql> grant all on vsftpd.* to 'vsftpd'@'172.16.%.%' identified by 'vsftppass';
3.建立pam的認證文件:
/etc/pam.d/vusers.mysql
auth required /lib64/security/pam_mysql.so user=vsftpd passwd=vsftppass host=127.0.0.1 db=vsftpd table=users usercolumn=username passwdcolumn=password crypt=2
account required /lib64/security/pam_mysql.so user=vsftpd passwd=vsftppass host=127.0.0.1 db=vsftpd table=users usercolumn=username passwdcolumn=password crypt=2
4.建立映射用戶:
useradd mysqluser
5.修改此虛擬主機的配置文件:
anonymous_enable=NO
guest_enable=YES
guest_username=LOCAL_USER
pam_service_name=vusers.mysql
user_config_dir=/PATH/TO/MYSQL_USER_CONFIG