家住海邊喜歡浪:zhang789.blog.51cto.comcss
簡介html
ftp工做原理mysql
常見的FTP服務web
Vsftpd服務器的安裝sql
Vsftpd.conf配置文件詳解shell
配置FTP服務器實例數據庫
實例:配置匿名用戶vim
實例:配置本地用戶登陸安全
實例:配置虛擬用戶登陸(MySQL認證)ruby
實例:控制用戶登陸
實例:設置歡迎信息
分析vsftpd日誌管理
FTP 是File Transfer Protocol(文件傳輸協議)的英文簡稱
,而中文簡稱爲「文傳協議」。用於Internet上的控制文件的雙向傳輸。同時,它也是一個應用程序(Application)。基於不一樣的操做系統有不一樣的FTP應用程序,而全部這些應用程序都遵照同一種協議以傳輸文件。互聯網上提供文件存儲和訪問服務的計算機,他們依照的是FTP協議提供服務!支持FTP協議的服務器就是FTP服務器!FTP協議提供存儲和傳輸服務的一套協議!
下載"(Download)
和"上傳"(Upload)
。」下載」文件就是從遠程主機拷貝文件至本身的計算機上;」上傳」文件就是將文件從本身的計算機中拷貝至遠程主機上。用Internet語言來講,用戶可經過客戶機程序向(從)遠程主機上傳(下載)文件。
ftp採用客戶端/服務端的工做模式(C/S結構),經過TCP協議創建客戶端和服務器之間的鏈接,但與其餘大多數應用協議不一樣,FTP協議在客戶端和服務端之間創建了兩條通訊鏈路,分別是控制鏈路和數據鏈路,其中,控制鏈路負責FTP會話過程當中FTP命令的發送和接收,數據鏈路則負責數據的傳輸
FTP會話包含了兩個通道,控制通道和數據通道,FTP的工做有兩種方式,一種是主動模式,一種是被動模式,以FTPServer爲參照物,主動模式,服務器主動鏈接客戶端傳輸,被動模式,等待客戶端的的鏈接
(不管是主動模式仍是被動模式,首先的控制通道都是先創建起來的,只是在數據傳輸模式上的區別)
工做的原理: FTP客戶端鏈接到FTP服務器的21端口,發送用戶名和密碼,客戶端隨機開放一個端口(1024以上),發送 PORT命令到FTP服務器,告訴服務器客戶端採用主動模式並開放端口;FTP服務器收到PORT主動模式命令和端口號後,經過服務器的20端口和客戶端開放的端口鏈接,發送數據,原理以下圖:
PASV是Passive的縮寫,中文成爲被動模式,工做原理:FTP客戶端鏈接到FTP服務器的21端口,發送用戶名和密碼,發送PASV命令到FTP服務器, 服務器在本地隨機開放一個端口(1024以上),而後把開放的端口告訴客戶端, 客戶端再鏈接到服務器開放的端口進行數據傳輸,原理以下圖:
20號端口:數據傳輸端口 ftp-data
21號端口:指令傳輸端口
ASCII
、二進制
。假定用戶正在拷貝的文件包含的簡單ASCII碼文本,若是在遠程機器上運行的不是UNIX,當文件傳輸時ftp一般會自動地調整文件的內容以便於把文件解釋成另外那臺計算機存儲文本文件的格式。
可是經常有這樣的狀況,用戶正在傳輸的文件包含的不是文本文件,它們多是程序,數據庫,字處理文件或者壓縮文件。在拷貝任何非文本文件以前,用binary 命令告訴ftp逐字拷貝。
在二進制傳輸中,保存文件的位序,以便原始和拷貝的是逐位一一對應的。即便目的地機器上包含位序列的文件是沒意義的。例如,macintosh以二進制方式傳送可執行文件到Windows系統,在對方系統上,此文件不能執行。
如在ASCII方式下傳輸二進制文件,即便不須要也仍會轉譯。這會損壞數據。(ASCII方式通常假設每一字符的第一有效位無心義,由於ASCII字符組合不使用它。若是傳輸二進制文件,全部的位都是重要的。)
Windows下:Serv-U FTP Server
Linux下有表明性的FTP服務器軟件是Wu-FTP
、ProFTP
及vsftpd
。Wu-FTP(Washington University FTP)
是由美國華盛頓大學開發的、以效率和穩定性爲參考量的FTP軟件。它的功能強大,配置較複雜,因爲開發時間較早,應用十分普遍,也所以成爲***們主要的***目標。Wu-FTP的早期各級版本不斷出現安全漏洞,系統管理員不得不因安全因素而常常對其進行升級。ProFTP針對Wu-FTP的弱項而開發,除了在安全性方面進行了改進外,還具有設置簡單的特色,並提供了一些Wu-FTP沒有的功能,大大簡化了架設和管理FTP服務器的工做。vsftpd
則憑藉在安全性方面的出色表現,被不少大型網站廣爲採用。
vsftpd-2.2.2-11.el6_4.1.x86_64.rpm //服務端軟件包
ftp-0.17-54.el6.x86_64.rpm //客戶端軟件包
lftp-4.0.9-1.el6.x86_64.rpm //相似ftp的客戶端軟件包,具備加強功能
一、安裝vsftpd軟件
[root@localhost ~]# yum -y install vsftpd
二、相關配置文件
[root@localhost ~]# cd /etc/vsftpd/
[root@localhost vsftpd]# ls
ftpusers user_list vsftpd.conf vsftpd_conf_migrate.sh
/etc/vsftpd/vsftpd.conf //主配置文件,核心配置文件
/etc/vsftpd/ftpusers //黑名單,這個裏面的用戶不容許訪問FTP服務器
/etc/vsftpd/user_list //白名單,容許訪問FTP服務器的用戶列表
三、啓動服務
服務啓動與關閉
[root@localhost vsftpd]# chkconfig vsftpd on
[root@localhost vsftpd]# service vsftpd start
Starting vsftpd for vsftpd: [ OK ]
[root@localhost vsftpd]# netstat -antup | grep ftp
tcp 0 0 0.0.0.0:21 0.0.0.0:* LISTEN 2579/vsftpd
tcp 0 0 10.1.252.97:21 10.1.250.64:54777 ESTABLISHED 2582/vsftpd
[root@localhost vsftpd]# vim /etc/vsftpd/vsftpd.conf
#################用戶登錄控制##############
anonymous_enable=YES #接受匿名用戶
no_anon_password=YES #匿名用戶login時不詢問口令
anon_root=(none) #匿名用戶主目錄
local_enable=YES #接受本地用戶
local_root=(none) #本地用戶主目錄
deny_email_enable=YES #若是匿名用戶須要密碼,那麼使用banned_email_file裏面的電子郵件地址的用戶不能登陸
check_shell=YES #僅在沒有pam驗證版本時有用,是否檢查用戶有一個有效的shell來登陸
userlist_enable=YES #若啓用此選項,userlist_deny選項才被啓動
userlist_deny=NO #若爲YES,則userlist_file中的用戶將不能登陸,爲NO則只有userlist_file的用戶能夠登陸
#若是和chroot_local_user一塊兒開啓,那麼用戶鎖定的目錄來自/etc/passwd每一個用戶指定的目錄
passwd_chroot_enable=NO #切換目錄密碼支持
ftp_username=FTP #定義匿名登入的使用者名稱。默認值爲ftp。
#################用戶權限控制###############
write_enable=YES #能夠上傳(全局控制).
local_umask=022 #本地用戶上傳文件的umask
file_open_mode=0666 #上傳文件的權限配合umask使用
anon_upload_enable=NO #匿名用戶能夠上傳
anon_mkdir_write_enable=NO #匿名用戶能夠建目錄
anon_other_write_enable=NO #匿名用戶修改刪除
anon_world_readable_only=YES #若是設爲YES,匿名登入者會被容許下載可閱讀的檔案。默認值爲YES。
#guest_enable=NO #若是開啓,那麼全部非匿名登錄的用戶名都會被切換成guest_username指定的用戶名
chown_uploads=YES #全部匿名上傳的文件的所屬用戶將會被更改爲chown_username
chown_username=lightwiter #匿名上傳文件所屬用戶名
chroot_list_enable=YES #若是啓動這項功能,則全部列在chroot_list_file之中的使用者不能更改根目錄
async_abor_enable=YES #容許使用"async ABOR"命令,通常不用
ascii_upload_enable=YES #使用ASSCII上傳
ascii_download_enable=YES #用ASCII 模式下載
secure_chroot_dir=/usr/share/empty #這個選項必須指定一個空的數據夾且任何登入者都不能有寫入的權限,當
vsftpd不須要file system 的權限時,就會將使用者限制在此數據夾中
默認值爲/usr/share/empty
###################超時設置##################
idle_session_timeout=600 #空閒鏈接超時
data_connection_timeout=120 #數據傳輸超時
ACCEPT_TIMEOUT=60 #PAVS請求超時
connect_timeout=60 #PROT模式鏈接超時
################服務器功能選項###############
xferlog_enable=YES #開啓日記功能
xferlog_std_format=YES #使用標準格式
#log_ftp_protocol=NO #當xferlog_std_format關閉且本選項開啓時,記錄全部ftp請求和回覆,當調試比較有用.
pasv_enable=YES #容許使用pasv模式
#pasv_promiscuous=NO #關閉安全檢查,Pasv向
#port_enable=YES #容許使用port模式
#prot_promiscuous #關閉安全檢查,Port向
tcp_wrappers=YES #開啓tcp_wrappers支持
pam_service_name=vsftpd #定義PAM 所使用的名稱,預設爲vsftpd
nopriv_user=nobody #當服務器運行於最底層時使用的用戶名
pasv_address=(none) #使vsftpd在pasv命令回覆時跳轉到指定的IP地址.(服務器聯接跳轉?)
#################服務器性能選項##############
#ls_recurse_enable=YES #是否能使用ls -R命令以防止浪費大量的服務器資源
#one_process_model #是否使用單進程模式
listen=YES #綁定到listen_port指定的端口,既然都綁定了也就是每時都開着的,就是那個什麼standalone模式
text_userdb_names=NO #當使用者登入後使用ls -al 之類的指令查詢該檔案的管理權時,預設會出
現擁有者的UID,而不是該檔案擁有者的名稱。如果但願出現擁有者的名
稱,則將此功能開啓。
use_localtime=NO #顯示目錄清單時是用本地時間仍是GMT時間,能夠經過mdtm命令來達到同樣的效果
#use_sendfile=YES #測試平臺優化
################信息類設置################
ftpd_banner=WelcomeFTP Server. #login時顯示歡迎信息.若是設置了banner_file則此設置無效
dirmessage_enable=YES #容許爲目錄配置顯示信息,顯示每一個目錄下面的message_file文件的內容 #setproctitle_enable=YES #顯示會話狀態信息,關!
##############文件定義 ##################
chroot_list_file=/etc/vsftpd/vsftpd.chroot_list#定義不能更改用戶主目錄的文件
userlist_file=/etc/vsftpd/vsftpd.user_list #定義限制/容許用戶登陸的文件
banner_file=/etc/vsftpd/banner #定義登陸信息文件的位置
banned_email_file=/etc/vsftpd.banned_emails #禁止使用的匿名用戶登錄時做爲密碼的電子郵件地址
xferlog_file=/var/log/vsftpd.log #日誌文件位置
message_file=.message #目錄信息文件
##############目錄定義 #################
user_config_dir=/etc/vsftpd/userconf #定義用戶配置文件的目錄
#定義本地用戶登錄的根目錄,注意定義根目錄能夠是相對路徑
也能夠是絕對路徑.相對路徑是針對用戶家目錄來講的.
local_root=webdisk #此項設置每一個用戶登錄後其根目錄爲/home/username/webdisk
anon_root=/var/ftp #匿名用戶登錄後的根目錄
#############用戶鏈接選項#################
max_clients=100 #可接受的最大client數目
max_per_ip=5 #每一個ip的最大client數目
connect_from_port_20=YES #使用標準的20端口來鏈接ftp
listen_address=192.168.0.2 #綁定到某個IP,其它IP不能訪問
#listen_port=2121 #綁定到某個端口
#ftp_data_port=2020 #數據傳輸端口
pasv_max_port=0 #pasv鏈接模式時可使用port 範圍的上界,0 表示任意。默認值爲0。
pasv_min_port=0 #pasv鏈接模式時可使用port 範圍的下界,0 表示任意。默認值爲0。
##############數據傳輸選項#################
anon_max_rate=51200 #匿名用戶的傳輸比率(b/s)
local_max_rate=5120000 #本地用戶的傳輸比率(b/s)
經過修改不一樣的配置文件選項,達到不一樣的實驗效果
使用匿名FTP,用戶無需輸入用戶名密碼便可登陸FTP服務器,vsftpd安裝後默認開啓了匿名ftp的功能,用戶無需額外配置便可使用匿名登陸ftp服務器
這個時候用戶能夠匿名方式登陸ftp服務器,查看並下載匿名帳戶主目錄下的各級目錄和文件,可是不能上傳文件或者建立目錄
[root@localhost ~]# lftp 10.1.252.97
lftp 10.1.252.97:~> ls
drwxr-xr-x 2 0 0 4096 May 11 06:17 pub
lftp 10.1.252.97:/> cd pub/
lftp 10.1.252.97:/pub> put /etc/issue
put: Access failed: 550 Permission denied. (issue) //拒絕上傳
lftp 10.1.252.97:/pub> get 1.txt //能夠下載
lftp 10.1.252.97:/pub>
出於安全方面的考慮,vsftpd在默認狀況下不容許用戶經過匿名FTP上傳文件,建立目錄等更改操做,可是能夠修改vsftpd.conf配置文件的選項,能夠賦予匿名ftp更多的權限
實例一、容許匿名ftp上傳文件
一、修改vsfpd.conf
write_enable=YES
anon_upload_enable=YES
二、更改/var/ftp/pub目錄的權限,爲ftp用戶添加寫權限,並從新加載配置文件
[root@localhost pub]# chmod o+w /var/ftp/pub/
[root@localhost pub]# service vsftpd reload
Shutting down vsftpd: [ OK ]
Starting vsftpd for vsftpd: [ OK ]
三、測試
lftp 10.1.252.97:/pub> put /etc/issue
79 bytes transferred //成功上傳
lftp 10.1.252.97:/pub> ls
-rw-r--r-- 1 0 0 0 Jul 25 01:13 1.txt
-rw------- 1 14 50 79 Jul 25 01:19 issue
實例二、容許匿名ftp建立目錄
一、修改vsftpd.conf文件
write_enable=YES
anon_mkdir_write_enable=YES
二、更改/var/ftp/pub目錄的權限,爲ftp用戶添加寫權限,並從新加載配置文件
[root@localhost pub]# chmod o+w /var/ftp/pub/
[root@localhost pub]# service vsftpd reload
Shutting down vsftpd: [ OK ]
Starting vsftpd for vsftpd: [ OK ]
三、測試
lftp 10.1.252.97:/pub> mkdir zabbix
mkdir ok, `zabbix' created
lftp 10.1.252.97:/pub> ls //建立成功
-rw-r--r-- 1 0 0 0 Jul 25 01:13 1.txt
-rw------- 1 14 50 79 Jul 25 01:19 issue
drwx------ 2 14 50 4096 Jul 25 01:23 zabbix
本地用戶登陸就是指使用Linux操做系統中的用戶帳號和密碼登陸ftp服務器,vsftp安裝後默只支持匿名ftp登陸,用戶若是試圖使用Linux操做系統中的帳號登陸服務器,將會被vsftpd拒絕
一、建立本地用戶
[root@localhost pub]# useradd zhanghe
[root@localhost pub]# passwd zhanghe
Changing password for user zhanghe.
New password:
BAD PASSWORD: it is too simplistic/systematic
BAD PASSWORD: is too simple
Retype new password:
passwd: all authentication tokens updated successfully.
二、修改vsftpd.conf文件
local_enable=YES
三、修改目錄權限
[root@localhost html]# chmod o+w /var/www/html/
四、登陸帳戶測試
一、安裝MySQL並建立對應用戶和表
[root@localhost ~]# yum install mysql-server -y #安裝MySQL數據庫
[root@localhost ~]# service mysqld start #啓動數據庫
[root@localhost ~]# mysql_secure_installation #初始化MySQL配置
建立用戶並受權,建立對應數據庫和表並插入兩行數據
[root@localhost ~]# mysql -uroot -p
Enter password:
mysql> GRANT ALL ON vsftpd.* TO vsftpd@'%' IDENTIFIED BY '123456';
Query OK, 0 rows affected (0.00 sec) #授予用戶權限
mysql> CREATE DATABASE vsftpd; #建立數據庫
Query OK, 1 row affected (0.00 sec)
mysql> use vsftpd; #進入指定默認數據庫
Database changed
mysql> CREATE TABLE vsftpd.users (uid SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT UNIQUE KEY,name VARCHAR(100) NOT NULL PRIMARY KEY,password CHAR(48) NOT NULL); #建立表
Query OK, 0 rows affected (0.01 sec)
mysql> INSERT INTO users (name,password) VALUES ('tom',PASSWORD('mageedu')),('jerry',PASSWORD('mageedu')),('lucy',PASSWORD('mageedu')); #插入3行,用戶爲tom,jerry,lucy
Query OK, 3 rows affected (0.00 sec)
Records: 3 Duplicates: 0 Warnings: 0
mysql> FLUSH PRIVILEGES; #刷新權限
Query OK, 0 rows affected (0.00 sec)
mysql> quit
Bye
二、配置vsftpd基於MySQL表的虛擬用戶
首先要完成基於MySQL表的認證,須要經過pam_mysql模塊實現,咱們要先安裝pam_mysql
pam_mysql模塊
CentOS 6:epel
CentOS 7:編譯安裝
[root@localhost ~]# yum -y install pam_mysql
準備要映射成爲的系統帳號:
[root@localhost ~]# mkdir -pv /ftproot/{pub,upload}
[root@localhost ~]# useradd -d /ftproot vuser
[root@localhost ~]# setfacl -m u:vuser:rwx /ftproot/upload
準備基於mysql認證的pam配置文件:/etc/pam.d/vsftpd.mysql
[root@localhost ~]# vim /etc/pam.d/vsftpd.mysql
auth required pam_mysql.so host=10.1.252.36 user=vsftpd passwd=123456 db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2
account required pam_mysql.so host=10.1.252.36 user=vsftpd passwd=123456 db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2
配置vsftpd啓用虛擬用戶,並使用指定的pam service:vsftpd.conf
//並確保pam_service_name選項的值以下所示
pam_service_name=vsftpd.mysql
userlist_enable=YES
tcp_wrappers=YES
guest_enable=YES
guest_username=vuser
配置每虛擬用戶擁有不一樣的權限:vsftpd.conf
user_config_dir=/etc/vsftpd/vusers_conf
爲每一個用戶單獨提供配置文件
[root@localhost ~]# mkdir /etc/vsftpd/vusers_conf
[root@localhost ~]# cd /etc/vsftpd/vusers_conf/
[root@localhost vusers_conf]# touch tom
[root@localhost vusers_conf]# vim tom
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
測試
[root@localhost ~]# ftp 10.1.252.97
Connected to 10.1.252.97 (10.1.252.97).
220 (vsFTPd 2.2.2)
Name (10.1.252.97:root): tom
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls
227 Entering Passive Mode (10,1,252,97,44,23).
150 Here comes the directory listing.
drwxr-xr-x 2 500 500 4096 Jul 25 01:47 51cto
drwx------ 2 501 501 4096 Jul 25 02:17 iii
drwxr-xr-x 2 500 500 4096 Jul 25 01:45 zabbix
226 Directory send OK.
ftp>
一、編輯vsftpd.conf文件
userlist_enable=YES
userlist_file=/etc/vsftpd/ftpuser_list
[root@localhost vsftpd]# vim user_list
或者:vim /etc/vsftpd/ftpuser_list
halt
mail
news
uucp
operator
games
nobody
tom //添加禁止登陸的用戶
二、登陸測試
[root@localhost ~]# ftp 10.1.252.97
Connected to 10.1.252.97 (10.1.252.97).
220 (vsFTPd 2.2.2)
Name (10.1.252.97:root): tom
530 Permission denied.
Login failed.
ftp> ls
530 Please login with USER and PASS.
Passive mode refused.
ftp>
一、修改vsftpd.conf,並重載服務
ftpd_banner=Welcome to blah mageedu@ftp service.
[root@localhost vsftpd]# service vsftpd reload
二、測試
[root@localhost ~]# ftp 10.1.252.97
Connected to 10.1.252.97 (10.1.252.97).
220 Welcome to blah mageedu@ftp service.
Name (10.1.252.97:root): tom
一、修改vsftpd.conf文件
#ftpd_banner=Welcome to blah mageedu@ftp service.
banner_file=/etc/vsftpd/banner.txt
二、添加歡迎信息文件
[root@localhost vsftpd]# cat banner.txt
*************************************************
* *
* Welocome to Mageedu FTP server *
* *
*************************************************
三、測試
[root@localhost ~]# ftp 10.1.252.97
Connected to 10.1.252.97 (10.1.252.97).
220-*************************************************
220-* *
220-* Welocome to Mageedu FTP server *
220-* *
220-*************************************************
220
Name (10.1.252.97:root):
一、編譯vsftpd.conf文件
dirmessage_enable=YES
二、在文件目錄下建立歡迎信息文件並重載服務
[root@localhost vsftpd]# cat /var/www/html/.message
歡迎進入ftp根目錄
[root@localhost html]# service vsftpd reload
三、測試
Name (10.1.252.97:root): tom
331 Please specify the password.
Password:
230-歡迎進入ftp根目錄
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
[root@localhost ~]# cat /var/log/xferlog
Mon Jul 25 09:13:36 2016 1 10.1.252.96 0 /pub/1.txt b _ o a lftp@ ftp 0 * c
//提示時間:從10.1.252.96訪問:訪問的文件:b是二進制傳輸方式:o是服務器到客戶端:a表示匿名
Mon Jul 25 09:19:49 2016 1 10.1.252.96 79 /pub/issue b _ i a lftp@ ftp 0 * c
//提示時間:從10.1.252.96訪問:訪問的文件:b是二進制傳輸方式:i是客戶端到服務端:a表示匿名
Mon Jul 25 09:46:01 2016 1 10.1.250.64 49451 /var/www/html/Linux_Services_and_Security.txt b _ i r zhanghe ftp 0 * c
提示時間:從10.1.252.64訪問:訪問的文件:b是二進制傳輸方式:i是客戶端到服務端:r表示真實用戶:服務名ftp:認證方式0表示無:*沒法獲取用戶ID:c表示傳輸已完成
[root@localhost ~]#