一、ftp連接方式
1、命令連接
? ?ftp在與用戶交互時,首先打開的是TCP的21號端口,建立命令連接,這個連接會始終存在,直到用戶輸入bye的那一刻,才斷開命令連接。
2、數據連接
? ?1)主動連接
? ?主動連接是基于TCP21號端口的,這種方式下,是ftp服務器主動去連接客戶端的,而客戶端該使用哪個端口來響應這個請求呢?在這種情況下,ftp服務器和客戶端就會達成一個共識:ftp服務器主動連接請求的端口是用于命令連接的端口加1,如果端口被占用,就再加1,直到找到空閑的端口為止。假如客戶端與服務端建立的命令連接是:CIP,12345,SIP,21 此時客戶端使用12345這個端口與ftp服務器的21號端口建立命令連接,那么在主動連接時,服務器就會使用12345+1=12346這個端口去主動連接客戶端。
? ?使用主動連接這種方式去連接客戶端,就必然會造成一種缺陷:客戶端是不向外提供服務的,所以對于像這種主動來掃描它端口的行為就會被認為是一種赤裸裸的挑釁,一種攻擊,因此很容易被客戶端防火墻拒絕掉,造成連接的失敗。
? ?2)被動連接
? ?被動連接是基于TCP的隨機端口,這種方式下,客戶端會發送給服務器兩個數字(如123,89),那么這時建立的數據連接端口就是123*256+89。
二、用戶認證方式
1、匿名用戶
? ?在登錄FTP時使用默認的用戶名,一般是ftp或anonymous
2、系統用戶?
? ?使用系統用戶登錄,在/etc/passwd中
3、虛擬用戶
? ?FTP虛擬用戶是FTP服務器的專有用戶,使用虛擬用戶登錄FTP,只能訪問FTP服務器提供的資源,大大增強了系統的安全。
? ?虛擬用戶的優點:
? ?1)獨立:即為虛擬的,那么不會受到系統其他用戶的影響
2)安全:如果vsftpd用本地用戶搭建的話,有可能由于限制目錄,權限等問題而引發安全為題
三、配置虛擬用戶,實現安全控制(vsftpd+pam_mysql+mysql)
1、使用ftp虛擬用戶案例
? ?某技術論壇需要做一個與用戶交流使用的FTP服務器,需實現以下2條功能:
? ?1)專用賬號(ftpuser1)允許用戶上傳文件、下載文件、刪除文件、創建目錄
? ?2)專用賬號(ftpuser2)則只允許用戶下載,不允許上傳
2、新建本地用戶"vuser"
? ?為什么需要本地用戶呢?因為虛擬用戶在服務器系統上不存在,所以需要新建一個本地用戶,把所有的虛擬用戶映射為一個系統用戶,它們訪問時的文件目錄就是此系統用戶的家目錄(默認權限是700)
3、安裝相關軟件程序
1 | [root@nmshuishui ~] # yum -y install vsftpd mysql-server mysql-devel pam_mysql |
4、創建虛擬用戶賬號
? ?1)準備數據庫及相關表
? ?(1)創建數據庫
1 | [root@nmshuishui ~] # service mysqld start |
? ?(2)授權管理數據庫的用戶及網段
? ?(3)為vsftpd數據庫創建用戶表
? ?2)添加測試的虛擬用戶
? ?為了密碼安全,在為虛擬用戶添加密碼時應該使用PASSWORD函數加密后存儲
5、配置vsftpd
? ?1)建立基于pam認證配置文件
1 | [root@nmshuishui ~] # vim /etc/pam.d/vsftpd.mysql |
? ?添加如下兩行
1 2 | auth required? /lib64/security/pam_mysql .so user=vsftp? passwd =vsftpd host=172.16.251.93 db=vsftpd table= users ?usercolumn=name passwdcolumn=password crypt=2 account required? /lib64/security/pam_mysql .so user=vsftp? passwd =vsftpd host=172.16.251.93 db=vsftpd table= users ?usercolumn=name passwdcolumn=password crypt=2 |
? ?注意:由于mysql的安裝方式不同,pam_mysql.so基于unix sock連接mysql服務器時可能會出問題,此時,建議授權一個可遠程連接的mysql并訪問vsftpd數據庫的用戶。
? ?2)修改vsftpd的配置文件(/etc/vsftpd/vsftpd.conf),使其支持mysql認證
? ?3)啟動vsftpd服務進行測試
為了以示區別,在公共目錄/var/ftp/pub目錄下,touch一個pub.txt,在/var/ftproot/目錄下touch一個ftproot.txt
? ?(1)匿名用戶登錄
? ?(2)虛擬用戶ftpuser1登錄
再看它所處的目錄,是在/var/ftproot/目錄下,有文件為證
(3)虛擬用戶ftpuser2登錄
? ?虛擬用戶ftpuser2登錄后與ftpuser1登錄所處的位置完全一樣,不再貼圖。
6、配置虛擬用戶的訪問權限
? ?vsftpd可以在配置文件目錄中為每個用戶提供單獨的配置文件以定義其ftp服務訪問權限,每個虛擬用戶的配置文件名同虛擬用戶的用戶名。配置文件目錄可以是任意未使用目錄,只需要在vsftpd.conf指定其路徑及名稱即可。
? ?1)配置vsftpd為虛擬用戶提供配置文件目錄
1 2 | #vim /etc/vsftpd/vsftpd.conf user_config_dir= /etc/vsftpd/vusers ??#添加此項 |
? ?2)創建虛擬用戶的配置文件目錄,并提供配置文件
1 2 3 4 5 6 | [root@nmshuishui ~] # cd /etc/vsftpd/??????????????? #進入vsftpd目錄 [root@nmshuishui vsftpd] # mkdir vusers????????????? #創建虛擬用戶的配置文件目錄 [root@nmshuishui vsftpd] # cd vusers???????????????? #進入虛擬用戶的配置文件目錄 [root@nmshuishui vusers] # touch ftpuser1 ftpuser2?? #提供虛擬用戶的配置文件 [root@nmshuishui vusers] # ls ftpuser1? ftpuser2 |
? ?3)配置虛擬用戶的訪問權限
? ?(1)ftpuser1允許用戶上傳文件、下載文件、刪除文件、創建目錄
1 2 3 4 5 | #vim ftpuser1 anon_upload_enable=YES anon_mkdir_write_enable=YES anon_other_write_enable=YES anon_umask=022 |
? ? ? 在windows上使用FlashFXP測試
? ?(2)ftpuser2只允許用戶下載,不允許上傳
既然只允許ftpuser2下載,不允許上傳,那就不需要給它任何權限了,只要ftpuser1上傳的文件可讀,ftpuser2即可下載。
四、經驗分享時刻
1、如果沒有iptables規則的話,請關閉iptables,否則它會阻擋你vsftp服務的正常運行
2、如果不使用selinux,也請關閉,如果不關閉會報下面這個錯(使用FlashFXP連接FTP服務器)