vsftpd是linux发行版中的一款ftp服务器程序,它的全称是“very secure ftp daemon”,号称是最安全的ftp服务器。它工作在21,20号端口,主要提供文件传输服务,可以跨越网络提供服务
ftp的工作原理:
ftp的两种工作模式:
1,主动模式
工作原理:客户端从一个任意的非特权端口(大于1024)N连接到FTP服务器的命令端口,也就是21端口。然后客户端开始监听端口N+1,并发送FTP命令“port N+1”到FTP服务器。接着服务器会从它自己的数据端口(20)连接到客户端指定的数据端口(N+1)
2,被动模式
工作原理:当开启一个 FTP连接时,客户端打开两个任意的非特权本地端口(大于1024)N和N+1。第一个端口连接服务器的21端口,但与主动方式的FTP不同,客户端不会提交PORT命令并允许服务器来回连它的数据端口,而是提交 PASV命令。这样做的结果是服务器会开启一个任意的非特权端口(大于1024)P ,并发送PORT P命令给客户端。然后客户端发起从本地端口N+1到服务器的端口P的连接用来传送数据
主动模式与被动模式的比较:
主动FTP对FTP服务器的管理和安全很有利,但对客户端的管理不利,因为FTP服务器企图与客户端的高位随机端口建立连接,而这个端口很有可能被客户端的防火墙阻塞掉。被动FTP对FTP客户端的管理有利,但对服务器端的管理不利。因为客户端要与服务器端建立两个连接,其中一个连到一个高位随机端口,而这个端口很有可能被服务器端的防火墙阻塞掉。目前,ftp服务器一般工作在被动模式。
vsftpd服务器的特点:
1、安全、高速、稳定
2、可设定多个基于IP的虚拟FTP server
3、匿名FTP多个基于IP的虚拟FTP server
4、匿名FTP的根目录不需要任何特殊的目录结构,或系统程序或其他系统文件
5、不执行任何外部程序,从而减少了安全隐患
6、支持虚拟用户
7、支持带宽限制
8、支持inetd启动和独立FTP服务器两种运行方式
FTP用户有三种分别是:
本地用户、虚拟用户、匿名用户
本地用户:
用户在FTP服务器上的拥有账号,且该账号为本地用户可以通过输入的账号;
自己的账号和口令进行授权登录;
登陆目录为自己的home目录($HOME);
虚拟用户:
用户在FTP服务器上拥有账号,但该账号智能用于文件传输服务
登陆目录为某一指定的目录
通常可以上传和下载
匿名用户:
用户在FTP服务器上没有账号
登陆目录为/var/ftp
vsftpd的配置文件:
/etc/vsftpd/vsftpd.conf #主配置文件
/etc/vsftpd.ftpusers #指定哪些用户不能访问FTP服务器
/etc/vsftpd.user_list #当在/etc/vsftpd/vsftpd.conf中设置了 userlist_enabl=YES,且userlist_deny=YES时,vsftpd.user_list中指定的用户不能访问FTP服务器 ;当在/etc/vsftpd/vsftpd.conf中设置了userlist.enable=YES,且userlist.deny=NO时,仅仅允许vsftpd.user_list中指定的用户访问FTP服务器。
vsftpd.conf的一些默认配置选项:
anonymous_enable=YES #允许匿名登陆
local.enable=YES #允许本地用户登陆
write.enable=YES #开放本地用户的写权限
local_umask=022 # 设置本地用户的文件生成掩码
dirmessage_enable=YES #档切换目录是,显示目录下的.message隐含文 件的内容
xferlog_enable=YES #激活上传和下载日志
connect_from_port_20=YES #启用FTP数据段口德连接请求
xferlog_std_format=YES #使用标准的ftpd xferlog日志格式
pam_service_name=vsftpd #设置PAM认证服务的配置文件名称,该文件存 放在/etc/pam.d目录下
userlist_enable=YES #激活vsftpd检查userlist_file指定的用户是否可以访问 vsftpd服务器,userlist_file的默认值 是/etc/vsftpd.user_list文件,由于默认情况下, userlist.deny=YES,所以/etc/vsftpd.user_list文件中 所列的用户均不能访问此vsftpd服务器。
listen=YES #使用vsftpd处于独立启动模式
Tcp_wrappers=YES #使用tcp_wrappers作为主机的访问控制方式
测试vsftpd的默认配置-匿名账号
在匿名账号的下载目录/var/ftp/pub目录下,存放一个测试文件
#echo"This is a test file" > /var/ftp/pub/test_file
生成目录信息文件/var/ftp/pub/.message
#echo "Welcome to this Directory." > /var/ftp/pub/.message
使用FTP客户端连接FTP服务器
下载test_file.txt 成功
上传一个文件, eg: /root/install.log 失败
查看日志文件/var/log/vsftpd.log
需要打开配置选项xferlog_file=/var/log/vsftpd.log
测试vsftpd的默认配置—本地帐号:
以本地账号student测试vsftpd服务器
使用root不能登录vsftpd服务器
root用户被写在/etc/vsftp.ftpusers文件中
关于vsftpd默认配置的小结
允许匿名用户和本地用户登录;
匿名用户的登录名为ftp或anonymous;
匿名用户不能离开匿名服务目录/var/ftp,且只能下载不能上传;
本地用户(vsftpd服务器)的登录名为本地用户名(FC3),口令为本地用户的口令(FC3);
本地用户可以离开其家目录,切换到有权方位的其他目录,并且在权限允许的情况下进行上传和下载;
写在文件/etc/vsftpd.ftpusers中的本地用户禁止登录。
常用vsftpd服务器的配置:
允许匿名用户上传:
创建匿名上传目录
#mkdir /var/ftp/incomming
修改上传目录权限
#chmod 777 /var/ftp/incomming
在/etc/vsftpd/vsftpd.conf中激活如下配置选项
允许匿名用户上传:
anon_upload_enable=YES
anon_umask=022
允许匿名用户创建目录
anon_mkdir_write_enable=YES
允许匿名用户进行写操作(如删除和重命名文件或目录)
anon_other_write_enable=YES
匿名用户仅被允许下载对于它可读的文件
anon_world_readable_only=YES
检查配置文件
vsftpd /etc/vsftpd/vsftpd.conf
重新启动vsftpd
#service vsftpd restart
配置基本的性能和安全选项:
idle_session_timeout=600 #设置空心啊用户会话中断时间(s)
data_connection_timeout=120 #设置空闲的数据连接的中断时间(s)
max_clients=200
max_per_ip=3 #限制客户连接数
local_max_rate=50000
anon_max_rate=30000 #设置最大传输速率限制(B/s)
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd_chroot_list #不允许某些用户切换到其home目录以外的其他目录,/etc/vsftpd_chroot_list文件中指定的用户不能访问其home目录以外的其他目录;
chroot_local_user=YES #不允许所有用户切换到其home目录以外的其他目录
chroot_local_user=YES
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd.chroot_list #仅允许某些用户切换到其home目录以外的其他目录,/etc/vsftpd.chroot_list文件中指定的用户能够访问其home目录外的其他目录
配置基于本地用户的访问控制:
是选项userlist_file对应的文件(默认值为/etc/vsftpd.user_list)中指定的本地用户不能访问,而其他用户可以访问
userlist_enable=YES
userlist_deny=YES
使选项userlist_file对应的文件(默认值为/etc/vsftpd.user_list)中指定的本地用户可以访问,而其他用户不可以访问
userlist_enable=YES
userlist_deny=NO
配置基于主机的访问控制(独立模式)
TCP_wrappers使用/etc/hosts.allow和/etc/hosts.deny两个配置文件实现访问控制。
在hosts.allow可以使用DENY,通常使用他来实现访问控制
对于vsftpd,hosts.allow中每条记录的语法格式如下
vsftpd:主机表:setenv VSFTPD_LOAD_CONF配置文件名
配置vsftpd访问控制时主机表的书写语:
选项值 | 含义 |
Hostname | 可解析的主机名 |
IP Address | 点分十进制表示IP地址 |
.domain | 匹配一个域中的所有主机 |
Network-number | 匹配IP地址的开始部分,不管使用的网络掩码如何 |
IP Address/netmask | 第一要匹配的网络或子网 |
配置主机访问控制的列子:
要求:
拒绝192.168.2.0/24访问
对域smartraining.com和192.168.1.0/24内的所有主机不做连接数和最大传输速率限制
对其他主机的访问控制限制每
IP
地址的连接数为
1
,最大传输速率限制为
10kb/s
步骤
修改
/etc/vsftpd/vsftpd.conf
文件,设置如下选项
tcp_wrappers=YES (
默认情况)
local_max_rate=10000
anon_max_rate=10000
max_per_ip=1
修改
/etc/hosts.allow
,加入如下配置选项
vsftpd: .smartraining.com, 192.168.1.0/24: setenv VSFTPD_LOAD_CONF /etc/vsftpd/vsftpd_tcp_wrap.conf
vsftpd: 192.168.2.0/24: DENY
编辑
/etc/vsftpd/vsftpd_tcp_wrap.conf
local_max_rate=0
anon_max_rate=0
max_per_ip=0
重新启动
vsftpd
配置vsftpd
在非标准端口下提供服务
vsftpd
必须工作在独立启动方式下,才能在非标准端口提供服务
例子:在
10021
端口提供服务
修改
/etc/vsftpd/vsftpd.conf
文件,添加如下一行
listen_port=10021
重启
vsftpd
服务
配置基于IP的虚拟FTP服务器(1)
配置虚拟
IP
地址
设本机现有的
IP
地址为
192.168.1.222
配置一个虚拟网络接口
eth0:1
# ifconfig eth0:1 192.168.1.234 up
建立虚拟
FTP
的服务器目录并设置适当的权限
建立虚拟
FTP
的服务器目录
# mkdir –d /var/ftp2/pub
# chmod 755 –R /var/ftp2
在下载目录下生成测试文件
# echo “hello” > /var/ftp2/pub/test_file.txt
创建虚拟服务器的匿名用户所映射的本地用户
ftp2
# useradd –d /var/ftp2 –M ftp2
在
/etc/vsftpd/vsftpd.conf
中添加如下一行,将原
FTP
服务绑定到
eth0
接口
listen_address=192.168.1.222
建立虚拟
FTP
服务器的主配置文件
用备份的
vsftpd
的默认主配置文件生成虚拟
FTP
服务器的主配置文件
# cp /etc/vsftpd/vsftpd.conf.fc3 /etc/vsftpd/vsftpd_site2.conf
修改虚拟 FTP 服务器的主配置文件,添加如下一行
listen_address=192.168.1.234
ftp_username=ftp2
ftpd_banner=This is the alternative FTP site
重新启动vsftpd
注:添加本地ftp本地用户
有的ftp服务器需要用户名和密码才能登陆,就是因为设置ftp用户和权限
ftp用户一般是不能登陆系统的,只能进入ftp服务器自己的目录中,这是为了安全,这样的用户就叫做虚拟用户了,实际上并不是真正地虚拟用户,只是不能登陆shell了而已,没能力登陆系统。
/usr/sbin/adduser -d /opt/test_ftp -g ftp -s /sbin/nologin test
解释:使用命令adduser添加test用户,不能登陆系统(-s /sbin/nologin),自己的文件夹在(-d /opt/test_ftp)),属于组ftp(-g)
转载于:https://blog.51cto.com/rain1118/818353