FTP
file transferprotocol
成本低,跨平台,跨公网
使用的端口号:
数据传输端口 20
命令传输端口 21
主动:默认情况下,ftp服务是开放了21端口,用来接受控制命令,服务器用20端口去发送数据(连接客户端大于1024的随机端口)
被动:ftp服务器开放21端口,用来接受命令控制,进行数据传输时,客户端会告知服务端打开一个大于1024的端口,然后客户端去主动连接服务
配置文件参数说明:
[root@rootbug ~]# cat /etc/vsftpd/vsftpd.conf |grep -v ^# |grep -v^$
-- ^#代表以#开头的行,也就是注释; ^$代表空行
anonymous_enable=YES --允许匿名用户登录
local_enable=YES --允许本地用户登录
write_enable=YES --允许本地用户登录后可写
local_umask=022 --建立文件或者目录的权限掩码
dirmessage_enable=YES --启用目录的说明或者欢迎信息
xferlog_enable=YES --打开日志功能 (只记录文件的上传和下载信息)
connect_from_port_20=YES --默认支持主动模式(两个模式都是开启的,直接使用的话是使用的被动模式)
xferlog_std_format=YES --日志使用xferlog而不是vsftpd.log,改为NO的话,则相反
listen=YES --默认运行在standalone下
pam_service_name=vsftpd --支持pam(可植入模块)
userlist_enable=YES --打开用户列表的功能
tcp_wrappers=YES --支持tcp_wrappers
1、匿名登录ftp服务器
ftp服务器匿名登录的账号是ftp和anonymous,密码为空
配置文件anonymous_enable=yse是控制是否允许匿名登录ftp服务器
默认情况匿名用户登录到ftp服务器之后目录是在/var/ftp/中,具备下载但是不具备上传功能,并且/var/ftp/目录不能直接利用chmod757修改写权限,如果修改了会导致ftp无法登录,所以需要在/ftp/目录下再创建一个目录作为上传目录,同时修改配置文件允许匿名用户上传。
[root@rootbug ~]#chmod 777 /var/ftp/pub --把pub改为可写,用于上传
[root@rootbug ~]# vim /etc/vsftpd/vsftpd.conf
anonymous_enable=YES
anon_upload_enable=YES --允许匿名用户上传文件
anon_mkdir_write_enable=YES --允许匿名用户创建目录
2、普通账号登录ftp服务器
普通用户默认是允许登录ftp的,并且是登录到自己的家目录,登录密码也就是普通用户登录系统的密码。
如果想禁用全部普通账号登录ftp服务器,可以直接在配置文件中修改即可。
local_enable=NO ----禁用全部的普通账号登录ftp服务器
如果想控制部分普通用户登录ftp服务器,部分普通账号无法登录ftp服务器,可以利用用户列表进行控制
黑名单,可以利用它进行控制账号无法登录ftp服务器
[root@rootbug ~]# vim /etc/vsftpd/vsftpd.conf
userlist_enable=yes --打开用户列表功能
userlist_deny=YES --这一句可加可不加,默认就是有这一句的
vim/etc/vsftpd/user_list --加上要禁止的用户,一个用户写一行
-------------
白名单,如果你黑名单太多添加麻烦,那么也可以直接利用白名单,控制哪些账号可以登录ftp服务器即可
[root@rootbug ~]# vim /etc/vsftpd/vsftpd.conf
userlist_enable=yes
userlist_deny=no
vim /etc/vsftpd/user_list --加上允许的用户,一个用户写一行
-----------上面的主要要注意的是:
userlist_enable 指定的是用户列表功能是否有效
userlit_deny 指定的是用户列表是允许还是拒绝
3、配置匿名账号登录目录是在/var/ftp/下,普通账号默认登录目录在/ftp。
由于ftp的家目录默认在/var/ftp/下,所以匿名账号登录之后就是/var/ftp/,不需要配置。但是普通账号登录之后是在各自账号的家目录下,那该如何配置才能使目录默认为/ftp呢?
[root@rootbug ~]# vim /etc/vsftpd/vsftpd.conf
在里面添加一行即可。
local_root=/ftp
4、chroot安全配置。
除了匿名账号登录ftp服务器之外,其他所有的账号登录ftp服务器之后都可以cd到整个系统的目录,并且可以下载系统的各个重要文件,这样就导致出现了安全漏洞。那么该如何配置才能杜绝这种不安全性?这就需要配置chroot,配置chroot有两种情况。
(1)将所有的用户都控制在ftp目录下
[root@rootbug ~]# vim /etc/vsftpd/vsftpd.conf
chroot_local_user=YES
开启了此功能之后,所有的用户登录ftp服务器之后将会控制在ftp目录下,无法cd切换到其他目录,保证了系统的安全性。
(2)配置控制部分用户在ftp目录下,但是剩下其他用户不受控制。
[root@rootbug ~]# vim /etc/vsftpd/vsftpd.conf
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list
vim/etc/vsftpd/chroot_list --手动创建这个文件,默认不存在,并写上要加入笼环境的用户名,一行写一个
[root@rootbug ~]# /etc/init.d/vsftpdreload ----刷新服务
5、ftp的日志
ftp服务器的日志有两种存放方式
xferlog方式
[root@rootbug ~]# vim /etc/vsftpd/vsftpd.conf
xferlog_enable=YES --打开日志记录功能
xferlog_std_format=YES --使用xferlog,而不是vsftpd.log
xferlog_file=/var/log/xferlog --打开注释,指定日志文件路径,也可以不用管,因为默认值就是这个,但是xferlog方式的日志只记录上传和下载
[root@rootbug ~]#cat/var/log/xferlog --只记录上传和下载的日志
Tue Sep 3 22:12:25 CST 2013 1 10.1.1.185 660/etc/fstab b _ o r a ftp 0 * c
Tue Sep 3 22:12:25 CST 2013 1 10.1.1.185 0 /rootb _ o r a ftp 0 * i
Tue Sep 3 22:12:12 CST 2013 1 10.1.1.132 2322/etc/passwd b _ o r a ftp 0 * c
Tue Sep 3 22:11:37 CST 2013 1 10.1.1.132 660/etc/fstab b _ o r a ftp 0 * c
Tue Sep 3 22:11:37 CST 2013 1 10.1.1.132 0/etc/fstab b _ i r a ftp 0 * i
Tue Sep 3 22:11:37 CST 2013 1 10.1.1.86 0/etc/passwd b _ i r a ftp 0 * i
vsftpd.log方式
[root@rootbug ~]#vim /etc/vsftpd/vsftpd.conf
xferlog_enable=YES --打开日志记录功能
xferlog_std_format=NO --此参数为NO,表示只有vsftpd.log产生
[root@rootbug ~]#/etc/init.d/vsftpd reload
6、限速
[root@rootbug ~]#vim /etc/vsftpd/vsftpd.conf
在配置文件添加下面的关键字
anon_max_rate --匿名用户下载传输率
local_max_rate --本地用户下载传输率
比如
local_max_rate=10000 --普通账号下载传输率为10k
[root@rootbug ~]#/etc/init.d/vsftpd reload
7、关于限制链接数
在配置文件添加下面的关键字
[root@rootbug ~]#vim /etc/vsftpd/vsftpd.conf
max_clients --ftp服务允许的总的连接数
max_per_ip --单个客户端的最大连接数
比如
max_per_ip=2 --指定单个客户端的最大连接数为2
[root@rootbug ~]#/etc/init.d/vsftpd reload
8、控制某IP允许登录ftp服务器,其他IP无法登录ftp服务器。
只要由下面两个文件控制
/etc/hosts.allow
/etc/hosts.deny
访问控制机制为先去匹配/etc/hosts.allow,再去匹配/etc/hosts.deny,如果都没有,则都允许
[root@rootbug ~]#vim /etc/hosts.deny
vsftpd: all --拒绝所有
vsftpd: all EXCEPT 10.10.10.104 --只允许104ftp上来
vsftpd: all EXCEPT 10.10.10.104 10.10.10.105
vsftpd: 10.10.10.0/255.255.255.0 EXCEPT 10.10.10.104 --拒绝10.10.10.0网段的人ftp访问,除了104外;注意子网掩码不支持/24写法
vsftpd:all:spawn echo "`date`" %c %d >>/var/log/tcpwrapperdeny.log
--拒绝所有人登录,并把拒绝的时间和IP等信息保存到日志文件
vsftp:all:spawn wall %c "login denied"
--拒绝所有人登录,只要一登录被拒绝,就发送广播信息
例题:
搭建ftp服务器,
(1)允许本地用户登录,但只允许a,b,c三个用户登录,所有的普通用户都默认登录到/ftp目录下;
(2)也允许匿名用户登录,登录到/var/ftp;
(3)匿名用户可以下载,不能上传
(4) a,b,c用户都只能上传和下载自己的文件;不同用户之间不能互相删除文件
(5)只使用vsftp形式的日志记录,并且实现日志轮转(每月轮转一次,最多保留两个副本)
(6) 只使用主动模式的ftp连接方式
(7) 三个用户只能在/ftp目录下活动
(8) 允许匿名用户和普通用户下载的最大传输率都为100kb/s
(9)允许ftp服务器最大的总连接为300
(10)一个客户端最大只能有3个连接
(11)只能在上午9:30到晚上的8:30访问ftp
(12)允许172.16.2.0/24网段登录,但拒绝172.16.2.35登录,并将拒绝的信息保存到/var/log/ftp_denyip.log
配置如下:
[root@rootbug ~]#vim /etc/vsftpd/vsftpd.conf
*****其他注释省略******
anonymous_enable=YES
userlist_enable=YES
userlist_deny=NO
local_root=/ftp
local_umask=026
xferlog_std_format=NO
pasv_enable=NO
chroot_local_user=yes
anon_max_rate=100000
local_max_rate=100000
max_clients=300
max_per_ip=3
Listen=NO
[root@rootbug ~]# vim /etc/vsftpd/user_list ----------配置允许用户登录列表
a
b
c --加上这三个用户
[root@rootbug ~]#vim /etc/xinetd.d/ftp -----------托管到超级进程下
service ftp
{
disable =yes
socket_type= stream
protocol =tcp
wait =no
user =root
server =/usr/sbin/vsftpd
access_times= 9:30-20:30
}
[root@rootbug ~]#vim/etc/hosts.allow ---------控制IP范围登录ftp服务器
vsftpd: 172.16.2.0/255.255.255.0 EXCEPT 172.16.2.35 :spawn echo"`date`" %c >> /var/log/ftp_denyip.log
[root@rootbug ~]#vim/etc/logrotate.d/vsftpd --------论转日志
/var/log/vsftpd.log {
# ftpddoesn't handle SIGHUP properly
nocompress
missingok
monthly --加上这一句
rotate2 --加上这一句
}
Ubuntu中用vsftpd搭建FTP服务器笔记:http://www.linuxdiyf.com/linux/12175.html
Linux下FTP和TFTP服务配置:http://www.linuxdiyf.com/linux/10708.html
CentOS 7安装配置FTP服务器:http://www.linuxdiyf.com/linux/10355.html
Ubuntu 14.04下FTP服务器的搭建:http://www.linuxdiyf.com/linux/10217.html
Ubuntu下常用FTP服务器简介:http://www.linuxdiyf.com/linux/16.html