实验环境虚拟机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之间的~
开启成功