1、FTP簡介mysql
FTP:File Transger Protocol(文件傳輸協議)linux
文件共享服務:工做在應用層sql
NFS:Network File System(RPC:Remote Procedure Call,遠程過程調用)數據庫
Samba:CIFS/SMBvim
FTP:基於tcp/ip協議windows
兩個鏈接:安全
命令鏈接:控制鏈接:21/tcp,命令鏈接在爲明確斷開的狀況下將始終存在。服務器
數據鏈接:數據發送時創建,數據傳輸結束時終止。session
-主動模式:20/tcp,服務器主動將數據傳送給客戶端app
-被動模式:端口隨機(防火牆的鏈接追蹤)
數據傳輸模式:(自動模式)
二進制和文本
ftp server --> ftp client
服務器端程序:
wu-ftpd、vsftpd、proftpd、pureftpd、filezilla(windows和linux都有)、server-U(windows系統)
客戶端程序:
CLI:ftp、lftp
GUI:gftpd、flashFXP、cuteftp、filezilla
結構化數據、半結構化數據、非結構數據
2、安裝vsftpd服務並設置爲開機自啓動
一、安裝vsftpd:very secure ftp doemon
# yum -y install vsftpd
二、啓動vsftpd服務
# service vsftpd start
三、設置爲開機自啓動
# chkconfig vsftpd on 或者 # chkconfig vsftpd on 2345
四、文件目錄位置
/etc/vsftpd:配置文件目錄
/etc/init.d/vsftpd:服務腳本
/usr/sbin/vsftpd:主程序
/var/ftp:提供文件的目錄
五、基於PAM實現用戶認證:支持虛擬用戶
/etc/pom.d/*
/lib/security/*
64位的系統/lib64/security/*
3、ftp用戶:系統用戶
匿名用戶---系統用戶
系統用戶(ftp是用明文傳輸數據的,利用下面的方法可獲取密碼)
# tcpdump -i eth1 -nn -X -vv tcp port 21 and ip host 120.55.134.234
虛擬用戶---系統用戶
4、基於ssl的vsftp
# cd /etc/pki/CA/
# mkdir certs newcerts crl
# touch index.txt
# echo 01 > serial
# (umask 077;openssl genrsa -out private/cakey.pem 2048)
# openssl req -new -key vsftpd.key -out vsftpd.csr
# vim /etc/pki/tls/openssl.cnf
將[ CA_default ]中的dir改成/etc/pki/CA
# openssl ca -in vsftpd.csr -out vsftpd.crt
# vim /etc/vsftpd/vsftpd.conf
在最後加入以下內容
ssl_enable=YES
ssl_tlsv1=YES
ssl_sslv3=YES
allow_anon_ssl=NO
force_local_data_ssl=YES
force_local_logins_ssl=YES
rsa_cert_file=/etc/vsftpd/ssl/vsftpd.crt
rsa_private_key_file=/etc/vsftpd/ssl/vsftpd.key
# service vsftpd restart
測試鏈接:
openssl s_client -connect 120.55.194.217:21
出現下列內容鏈接成功:
CONNECTED(00000003)
20354:error:140770FC:SSL routines:SSL23_GET_SERVER_HELLO:unknown protocol:s23_clnt.c:591:
5、基於mysql的vsftp認證
# tar zxvf pam_mysql-0.7RC1.tar.gz
# cd pam_mysql-0.7RC1
# ./configure --with-mysql=/database/mysql --with-ssl
報錯:
error: Cannot find pam headers. Please check if your system is ready for pam module development.
解決辦法:
yum -y install pam-devel
# ./configure --with-mysql=/database/mysql --with-ssl
# make && make install
建立數據庫vsftp來存放相關的虛擬用戶的帳號
mysql> create database vsftpd;
mysql> use vsftpd;
mysql> create table users (
-> id smallint auto_increment not null,
-> name char(20) binary not null,
-> password char(48) binary not null,
-> primary key(id));
mysql> desc users;
mysql> grant select on vsftpd.* to vsftpd@localhost identified by 'vsftpd';
mysql> grant select on vsftpd.* to vsftpd@127.0.0.1 identified by 'vsftpd';
mysql> plush privileges;
插入用戶:
mysql> insert into users (name,password) value ('zhangsan','123456'),('lisi','123456');
# vim /etc/pam.d/vsftpd.mysql
auth required /lib64/security/pam_mysql.so user=vsftpd passwd=vsftpd host=localhost db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=0
account required /lib64/security/pam_mysql.so user=vsftpd passwd=vsftpd host=localhost db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=0
添加用戶
# useradd -s /sbin/nologin -d /var/fansik fansik
# chmod go+rx /var/fansik/
修改vsftpd.conf
# vim /etc/vsftpd/vsftpd.conf
修改以下內容:
pam_service_name=vsftpd.mysql
guest_enable=YES
guest_username=fansik
虛擬用戶的指令都是和匿名用戶的指令進行匹配的
分別對虛擬帳號設置不一樣的權限
# vim /etc/vsftpd/vsftpd.conf
user_config_dir=/etc/vsftpd/vusers_dir
vusers_dir在這個目錄必須存在,如不存在手動建立
# mkdir vusers_dir
在該目錄先建立與虛擬用戶同名的文件,並設置能夠上傳文件
# vim zhangsan
anon_upload_enable=YES
設置李四不能夠上傳文件
# vim lisi
anon_upload_enable=NO
測試結果:
張三的測試結果
C:\Users\Administrator>ftp 120.55.194.217
鏈接到 120.55.194.217。
220 (vsFTPd 2.0.5)
用戶(120.55.194.217:(none)): zhangsan
331 Please specify the password.
密碼:
230 Login successful.
ftp> put wohenhao
200 PORT command successful. Consider using PASV.
150 Ok to send data.
226 File receive OK.
ftp> bye
221 Goodbye.
李四的測試結果:
C:\Users\Administrator>ftp 120.55.194.217
鏈接到 120.55.194.217。
220 (vsFTPd 2.0.5)
用戶(120.55.194.217:(none)): lisi
331 Please specify the password.
密碼:
230 Login successful.
ftp> put wohenhao
200 PORT command successful. Consider using PASV.
550 Permission denied.
6、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。