實驗環境虛擬機CentOS 6.5
IPADDR=192.168.1.224
安裝vsftpd
yum -y install vsftpd
配置文件:
vim/etc/vsftpd/vsftpd.conf
查看端口
[root@localhost ~]# netstat -anp |grep vsftpd
tcp 0 0 0.0.0.0:21 0.0.0.0:* LISTEN 1409/vsftpd
配置文件說明20端口爲數據傳輸端口
# Make sure PORT transfer connections originate from port 20 (ftp-data).
connect_from_port_20=YES
所以要開放端口TCP 21 20 兩個端口
iptables -I INPUT -p tcp --dport 20:21 -j ACCETP
service iptables save
防火牆加載ftp模塊 #不加載訪問不了
vim /etc/sysconfig/iptables-config
加入以下兩個,順序不要錯
IPTABLES_MODULES="ip_conntrack_ftp"
IPTABLES_MODULES="ip_nat_ftp"
重啓防火牆
/etc/init.d/iptables restart
原理:
vsftpd 分主動模式和被動模式,
默認爲主動模式:
客戶端通過21端口訪問ftp服務器建立連接後,再通過20端口交換數據,主動模式就是服務器20端口主動連接客戶端開放的隨機端口,進行傳輸!因此如果客戶端在內網的話,路由難以開放隨機端口,數據是很難傳得入內網的.
被動模式:
客戶端通過21端口訪問ftp服務器建立連接後,被動模式就是服務器隨機打開端口xxxx叫客戶端訪問服務器的xxxx端口進行數據傳輸!因此這種模式也大大不安全,因此我們可以自己設置開放的端口來控制!
##################配置主動模式#################################################
vim /etc/vsftpd/vsftpd.conf
anonymous_enable=YES #允許區名訪問
local_enable=YES #允許本地登錄
write_enable=YES #允許寫
anon_upload_enable=YES #允許區名上傳
anon_mkdir_write_enable=YES #允許區名mkdir和寫
dirmessage_enable=YES #啓用目錄歡迎信息
xferlog_enable=YES #啓用日誌
ftpd_banner=######This is my FTP service.###### #全局歡迎信息
chroot_local_user=YES #更改用戶目錄爲家目錄限制訪問別的目錄
保存
重啓服務
/etc/init.d/vsftpd restart
查看selinux
setsebool -a |grep ftp
[root@localhost pub]# getsebool -a |grep ftp
allow_ftpd_anon_write --> off
allow_ftpd_full_access --> off
allow_ftpd_use_cifs --> off
allow_ftpd_use_nfs --> off
ftp_home_dir --> off
ftpd_connect_db --> off
ftpd_use_fusefs --> off
ftpd_use_passive_mode --> off
httpd_enable_ftp_server --> off
tftp_anon_write --> off
tftp_use_cifs --> off
tftp_use_nfs --> off
設置selinux
setsebool -P allow_ftpd_anon_write on
setsebool -P allow_ftpd_full_access on
setsebool -P ftp_home_dir on
再查看
[root@localhost pub]# getsebool -a |grep ftp
allow_ftpd_anon_write --> on
allow_ftpd_full_access --> on
allow_ftpd_use_cifs --> off
allow_ftpd_use_nfs --> off
ftp_home_dir --> on
ftpd_connect_db --> off
ftpd_use_fusefs --> off
ftpd_use_passive_mode --> off
httpd_enable_ftp_server --> off
tftp_anon_write --> off
tftp_use_cifs --> off
tftp_use_nfs --> off
創建用戶
#創建不能登錄的用戶bob 並指定家目錄爲/var/ftpusers/
useradd -s /sbin/nologin -d /var/ftpusers/ bob
passwd bob
創建目錄歡迎信息文件
因爲剛纔啓用了dirmessage_enable=YES,進入目錄出現歡迎信息
所有我在pub目錄下創建歡迎信息文件
echo "########There is pub#######" > /var/pub/.message
###############測試###############################
windows下打開cmd
ftp 192.168.1.224
看到歡迎信息
######This is my FTP service.######
輸入用戶名ftp
輸入dir
>dir
看到pub目錄了
>pwd
>"/" #顯示爲根
>cd pub
250-"########There is pub#######" 進入pub目錄出現在歡迎信息
用資源管理器訪問ftp://192.168.1.224
看到pub目錄。
上傳文件失敗,提示沒權限。
服務器查看權限
這時這個根目錄其實是/var/ftp/
[root@localhost pub]# ll -d /var/ftp/
drwxr-xr-x. 3 root root 4096 4月 3 14:04 /var/ftp/
[root@localhost pub]# ll /var/ftp/
drwxr-xr-x. 3 ftp ftp 4096 4月 3 14:30 pub
因此ftp目錄上是沒權限寫入的。
只能寫入pub目錄裏。
windows下訪問ftp://192.168.1.224
區名登錄看到pub
右鍵選擇 登錄 輸入用戶名bob 密碼123456
登錄成功
上傳下載操作都OK
############下面繼續配置文件的一些常用功能##############
(一).FTP服務器的流量控制
max_clients=100 ;允許的最大連接數,定義爲100,默認爲0,表沒有限制
max_per_ip=5 ;每個IP允許的連接數,0表沒有限制,需要運行於獨立模式方可
anon_max_rate=50000 ;匿名用戶最大帶寬,單位爲bps
local_max_rate=200000 ;系統用戶最大帶寬
如何對指定用戶進行流量限制呢?
#vi /etc/vsftpd/vsftpd.conf,添加一行:
user_config_dir=/etc/vsftpd/userconf
#touch /etc/vsftpd/userconf/netseek_com 爲netseek_com這個用戶建立一個netseek_com文件
#vi /etc/vsftpd/userconf/netseek_com 添加以下內容
local_max_rate=100000
(二)改變上傳所有者
#chown_uploads=YES #改變上傳所有者
#chown_username=ltiaw #上傳所有者改爲ltiaw
#chroot_list_enable=YES #啓用改爲根目錄的list
#chroot_list_file=/etc/vsftpd/chroot_list #指定list文件
啓用這裏的時間把上面啓用所有人都chroot註釋掉 #chroot_local_user=YES
這個可以指定用戶誰chroot,不放去list文件的用戶就不chroot
(三)用戶訪問控制
userlist_enable=YES #用戶控制啓用
查看文件
vim /etc/vsftpd/user_list
內容如下:
# vsftpd userlist
# If userlist_deny=NO, only allow users in this file
# If userlist_deny=YES (default), never allow users in this file, and
# do not even prompt for a password.
# Note that the default vsftpd pam config also checks /etc/vsftpd/ftpusers
# for users that are denied.
root
bin
daemon
adm
lp
sync
shutdown
halt
news
uucp
operator
games
nobody
意思是:默認是拒絕這個文件下的用戶名,還有 /etc/vsftpd/ftpusers 這個文件裏的用戶也是拒絕的!
所以root是登錄不了的。
也可以在配置文件里加入:userlist_deny=NO
1.userlist_deny=NO 這樣user_list裏的用戶名就是允許的,
但是/etc/vsftpd/ftpusers 裏的還是禁止的.
2./etc/vsftpd/ftpusers文件,是由這個配置文件控制的: vim /etc/pam.d/vsftpd
具體怎麼控制自己看了。
抓包
tcpdump -i eth0 host 192.168.1.5 and host 192.168.1.224 |grep -v ssh
分別傳輸文件兩次,發現果然是服務器20訪問客戶端端口,而且第一次與第二次的端口不是同的並大於1024
##########################被動模式###########################################
vim /etc/vsftpd/vsftpd.conf
註釋20端口 #connect_from_port_20=YES
增加下面三行
pasv_enable=yes #啓用被動模式
pasv_min_port=4500 #被動模式起始端口爲:4500
pasv_max_port=5000 #被動模式結束端口爲:5000
保存重啓服務
/etc/init.d/vsftpd restart
開放端口:
iptables -I INPUT -p tcp --dport 4500:5000 -j ACCETP
/etc/init.d/iptables save
抓包:
tcpdump -i eth0 host 192.168.1.224 and host 192.168.1.5 |grep -v ssh
客戶端傳文件
15:55:32.341781 IP 192.168.1.5.ssowatch > 192.168.1.224.4693: Flags [.], seq 1:1461, ack 1, win 65535, length 1460
15:55:32.341795 IP 192.168.1.5.ssowatch > 192.168.1.224.4693: Flags [P.], seq 1461:1847, ack 1, win 65535, length 386
5:55:37.358912 IP 192.168.1.5.vxcrnbuport > 192.168.1.224.4776: Flags [.], ack 447, win 65090, length 0
15:55:37.358921 IP 192.168.1.5.vxcrnbuport > 192.168.1.224.4776: Flags [F.], seq 1, ack 447, win 65090, length 0
正是我剛纔開放的端口4500-5000之間的~
開啓成功