【实验环境】一台虚机,一台真机 【实验目标】
Vsftp服务器的基本配置、权限控制 黑名单/白名单 速度及性能配置 基于IP的虚拟主机配置 【实验原理】
端口 21:用来传输命令,建立控制连接。 20:是数据端口,建立数据连接
FTP的数据传输模式,分为主动传输模式、被动传输模式
主动传输模式(主动FTP):当FTP的控制连接建立以后,且客户提出目录列表、传输文件时,客户端发出PORT命令与服务器进行协商,FTP服务器使用一个标准的端口20作为服务器端的数据连接端口与客户建立数据连接。端口20只适用于连接的源地址是服务器端的情况,并且在端口20上根本就没有监听进程监听客户请求。
被动传输模式(被动FTP):当FTP的控制连接建立以后,且客户提出目录列表、传输文件时,客户端发送PASV命令使服务器处于被动传输模式,FTP服务器等待客户与其联系,FTP服务器在非20端口的其他数据传输端口上监听客户的请求。在被动模式下,FTP的数据连接和控制连接的方向是一致的,也就是说,是客户端向服务器端发出一个用于数据传输的连接。客户端的连接端口是发起这个数据连接请求时使用的端口号。
当FTP客户在包过滤防火墙之后对外访问FTP服务器时,需要使用被动模式。因为通常情况下,防火墙允许所有内部向外部的连接通过,但是对于外部向内部发起的连接却存在很多限制。在这种情况下,客户可以正常地和服务器建立控制连接,而如果使用主动模式,
ls、put、get等数据传输命令就不能成功运行,因为防火墙会阻塞从外部服务器向内部客户发起的数据传输连接。而使用被动传输模式一般可以解决此类问题,因为在被动模式下,数据连接是由客户机发起的。
FTP使用者分为三类:
本地用户:如果用户在远程FTP服务器上拥有帐号,用户为本地用户。本地用户可以通过输入自己的帐号和口令来进行授权登录。当授权访问的本地用户登录系统后,其登录目录为此用户的自家目录(/home中),本地用户即可下载又可上传
虚拟用户:如果用户在远程FTP服务器上拥有帐号,且此帐号只能用于文件传输服务,和本地用户不一样,它没有自家目录。虚拟用户可以通过输入自己的帐号和口令来进行授权登录。当授权访问的虚拟用户登录系统后,其登录目录为其指定目录,通常情况下虚拟用户即可下载又可上传。
匿名用户:如果用户在远程FTP服务器上没有帐号,则称此用户为匿名用户。若FTP服务器提供匿名访问的功能,则匿名用户可以通过输入帐号(anonymouse或ftp)来进行登录。当匿名用户登录以后,其登录目录为匿名FTP服务器的根目录(/var/ftp),一般情况下匿名用户FTP服务器只提供下载功能,不提供上传功能或是上传受到一定的限制。一旦控制连接断开,数据连接也会断开。 性能和安全选项
idle_session_timeout=600 //将在用户会话空闲10分钟后被中断 data_connection_timeout=120 //将在数据连接空闲2分钟后被中断 accept_timeout=60 //客户端空闲1分钟后自动中断连接 connect_timeout=60 //并在中断1分钟后自动激活连接 max_clients=200 //最大用户数
max_per_ip=3 //每个客户机的最大连接数为3
max_clients和max_per_ip,只在独立启动时才起作用。使用xinetd启动时将使用另外的配置方法。
local_max_rate=50000 //本地用户的最大传输速率为50字节/s anon_max_rate=30000 //匿名用户的最大传输速率为30字节/s listen_address=192.168.1.1 //设置在那个IP上地址进行监听 listen_port=2121 //设置监听端口 pasv_min_port=50000
pasv_max_port=60000 //设置客户机连接时服务器响应的端口范围
如果希望用户登录以后不能切换到自家以外的目录,则需设置chroot选项,涉及如下选项
chroot_local_user chroot_list_enable chroot_list_file 有两种设置chroot的方法
设置所有的本地执行chroot,只要将chroot_local_user=YES 设定指定的用户执行chroot,需要如下的设置
chroot_local_user=NO chroot_list_enable=YES
chroot_list_file=/etc/vsftpd.chroot_list //这个文件是自己创建的
用户接口(UI) 客户端协议解释器(CPI) 服务器端协议解释器(SPI) 提供了一个用户接口并使用客户端协议解释器的服务 向远程服务器协议机发送命令并驱动客户数据传输过程 响应客户协议机发出的命令并驱动服务器端数据传输过程 客户端数据传输协议(CDPI) 负责完成和服务器数据传输过程及客户端本地文件系统的通信 服务器端数据传输协议(SDPI) 负责完成和客户端数据传输过程及服务器端本地文件系统的通信
Vsftpd服务的主配置文件/etc/vsftpd/vsftpd.conf 黑名单/etc/vsftpd.ftpusers 白名单/etc/vsftpd.user_list Vsftp服务的默认主目录为/var/ftp Vsftp匿名登录有两个帐号
用户名:anonymous 密码:为空 用户名:ftp 密码:ftp 【实验步骤】
一、查询vsftpd软件包是否安装
[root@localhost ~]# rpm -qa | grep vsftpd vsftpd-2.0.1-5.EL4.3 //已安装
如未安装可用命令rpm –ivh vsftpd-2.0.1-5.EL4.3.i386.rpm (第一张光盘) 升级软件包 rpm –Uvh vsftpd-2.0.1-5.EL4.3.i386.rpm 卸载软件包 rpm –ef vsftp-2.0.1
二、查看vsftpd的主配置文件/etc/vsftpd/vsftpd.conf的默认配置
anonymous_enable=YES //允许匿名登录 local_enable=YES //允许本地用户登录 write_enable=YES //是否允许上传
local_umask=022 //设置本地文件生成的掩码为022,其实际权限为777-022=755 dirmessage_enable=YES //是否启用目录消息 xferlog_enable=YES //是否启用FTP日志文件
connect_from_port_20=YES //启用FTP数据端口的连接请求 xferlog_std_format=YES //使用标准的日志文件格式 pam_service_name=vsftpd //设置服务器名称
userlist_enable=YES //是否启用用户名单(黑名单/白名单)控制功能 listen=YES //使vsftpd处于独立启动模式,而不是由xinetd超级进程来管理 tcp_wrappers=YES //允许使用TCP访问控制功能
三、Vsftp服务器的基本配置、权限控制
1.测试Vsftp服务器的默认配置----匿名登录
在默认配置下,匿名服务器的默认下载目录为/var/ftp/pub 在/var/ftp/pub新建三个文件a b c [root@localhost ~]# cd /var/ftp/pub [root@localhost pub]# touch a b c [root@localhost pub]# ls a b c 启动vsftp服务
[root@localhost ~]# service vsftpd start ①从Win2K3客户端下载测试
C:\\>ftp 192.168.13.19
Connected to 192.168.13.19. 220 (vsFTPd 2.0.1)
User (192.168.13.19:(none)): anonymous //帐号为anonymous,也可以用匿名帐号ftp 来登录
331 Please specify the password. Password: //密码为空
230 Login successful. //登录成功 ftp> cd pub //进入默认下载目录
250 Directory successfully changed. ftp> dir //列表显示服务器下载目录中的文件
200 PORT command successful. Consider using PASV. 150 Here comes the directory listing.
-rw-r--r-- 1 0 0 0 Dec 25 07:11 a -rw-r--r-- 1 0 0 0 Dec 25 07:11 b -rw-r--r-- 1 0 0 0 Dec 25 07:11 c. ftp> get a //从服务器下载文件a
200 PORT command successful. Consider using PASV. //采用的被动FTP 150 Opening BINARY mode data connection for a (0 bytes). 226 File send OK. //下载成功,下载到Win2K3的C盘根目录下 ②.在Win2K3的C盘根目录下新建一个文件b.txt,看能否上传 ftp> put b.txt //上传b.txt文件
200 PORT command successful. Consider using PASV. 550 Permission denied. //上传被拒绝
③.修改主配置文件/etc/vsftpd/vsftpd.conf,使匿名用户也可以上传
anon_upload_enable=YES //在第27行把前面#号去掉。可以让匿名用户上传,但是还是不能上传到pub目录。
在/var/ftp下新建一个目录bbb,在bbb目录里面新建三个文件1 2 3,并赋予bbb目录的权限为777
[root@localhost ftp]# mkdir bbb
[root@localhost ftp]# cd bbb [root@localhost bbb]# ls
[root@localhost bbb]# touch 1 2 3 [root@localhost bbb]# ls 1 2 3
[root@localhost ftp]# chmod 777 bbb
[root@localhost ftp]# service vsftpd restart //重新启动vsftpd服务 ④.再在Win2K3做上传测试 ftp> put b.txt //上传b.txt
200 PORT command successful. Consider using PASV. 150 Ok to send data.
226 File receive OK. //上传完毕
2. 测试Vsftp服务器的默认配置----本地帐号登录
①在Vsftp服务器上增加一个leilei帐号,密码为:123456 [root@localhost ~]# useradd leilei //增加帐号leilei [root@localhost ~]# passwd leilei //设置密码 Changing password for user leilei. New UNIX password:
BAD PASSWORD: it is too simplistic/systematic Retype new UNIX password:
passwd: all authentication tokens updated successfully. [root@localhost bbb]# cd /home [root@localhost home]# cd leilei [root@localhost leilei]# ls
[root@localhost leilei]# touch 4 //新建一个文件4 [root@localhost leilei]# ls 4
[root@localhost ~]# service vsftpd restart //重新启动服务 ②在Win2K3客户机进行上传下载测试,在C盘新建一个文件c.txt C:\\>ftp 192.168.13.19
Connected to 192.168.13.19. 220 (vsFTPd 2.0.1)
User (192.168.13.19:(none)): leilei //用帐号leilei登录 331 Please specify the password. Password:
230 Login successful. ftp> dir
200 PORT command successful. Consider using PASV. 150 Here comes the directory listing.
-rw-r--r-- 1 0 0 0 Dec 25 08:11 4 226 Directory send OK.
ftp: 59 bytes received in 0.00Seconds 59000.00Kbytes/sec. ftp> get 4 //下载4文件
200 PORT command successful. Consider using PASV. 150 Opening BINARY mode data connection for 4 (0 bytes). 226 File send OK. //下载成功 ftp> put c.txt //上传c.txt文件
200 PORT command successful. Consider using PASV. 150 Ok to send data.
226 File receive OK. //上传完毕 [root@localhost leilei]# ls 4 c.txt
四、黑名单和白名单
1.查看默认的黑名单 root bin daemon adm lp
sync shutdown halt mail news uucp operator games nobody
2.查看默认的白名单,
# 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 mail news uucp operator games nobody
3.默认情况下,用黑名单和白名单的用户去登录时,是都不能登录的。测试用root帐户去登录。
C:\\>ftp 192.168.13.19
Connected to 192.168.13.19. 220 (vsFTPd 2.0.1)
User (192.168.13.19:(none)): root 530 Permission denied.
Login failed. //可以看出是不允许登录的。 我们可以修改黑名单,把root帐户去掉。看能否登录 C:\\>ftp 192.168.13.19
Connected to 192.168.13.19. 220 (vsFTPd 2.0.1)
User (192.168.13.19:(none)): root 530 Permission denied. Login failed. //还是被拒绝
因为root帐户,又在白名单中,又因白名单默认又是拒绝里面所有的用户登录。所以要把root从白名单中删除。 C:\\>ftp 192.168.13.19
Connected to 192.168.13.19. 220 (vsFTPd 2.0.1)
User (192.168.13.19:(none)): root 331 Please specify the password. Password:
230 Login successful. //这次可以登录了
把默认的白名单(和黑名单一个效果)转变为真正的白名单,可以修改主配置文件/etc/vsftpd/vsftpd.conf pam_service_name=vsftpd userlist_enable=YES
userlist_deny=NO //添加这样一行,把这个默认的YES该为NO listen=YES
也可以这样做,不加上面的那一行,而是把root从白名单/etc/vsftpd.user_list删除也可以。
五、配置本地组访问的FTP服务器
1.创建本地组的FTP服务器的目录
[root@localhost ~]# groupadd netgrp [root@localhost ~]# mkdir -p /var/ftp/netgrp 2.创建本地用户和组
[root@localhost netgrp]# useradd -G netgrp -d /var/ftp/netgrp -M net1 [root@localhost netgrp]# useradd -G netgrp -d /var/ftp/netgrp -M net2 [root@localhost netgrp]# useradd -G netgrp -d /var/ftp/netgrp -M net 3.设置用户口令
[root@localhost netgrp]# passwd net [root@localhost netgrp]# passwd net1 [root@localhost netgrp]# passwd net2 4.修改/var/ftp/netgrp的属主和权限
[root@localhost ~]# chown net.netgrp /var/ftp/netgrp [root@localhost ~]# chmod 750 /var/ftp/netgrp 5.在Win2K3中测试用net用登录 C:\\>ftp 192.168.13.19
Connected to 192.168.13.19. 220 (vsFTPd 2.0.1)
User (192.168.13.19:(none)): net 530 Permission denied.
Login failed. //登录被拒绝,因为白名单已经启用,而net用户又不在白名单中,所以要把net、net1、net2添加到白名单中/etc/vsftpd.user_list中。重新启动服务。 C:\\>ftp 192.168.13.19
Connected to 192.168.13.19. 220 (vsFTPd 2.0.1)
User (192.168.13.19:(none)): net //用net用户登录
331 Please specify the password. Password:
230 Login successful. //登录成功 ftp> put c.txt //上传文件c.txt
200 PORT command successful. Consider using PASV. 150 Ok to send data.
226 File receive OK. //上传成功 C:\\>ftp 192.168.13.19
Connected to 192.168.13.19. 220 (vsFTPd 2.0.1)
User (192.168.13.19:(none)): net1 //用net1用户登录 331 Please specify the password. Password:
230 Login successful. //登录成功 ftp> put c.txt //上传文件c.txt
200 PORT command successful. Consider using PASV.
553 Could not create file. //不能上传文件c.txt因为net1用没有写的权限。 C:\\>ftp 192.168.13.19
Connected to 192.168.13.19. 220 (vsFTPd 2.0.1)
User (192.168.13.19:(none)): net2 //用net2用户登录 331 Please specify the password. Password:
230 Login successful. //登录成功 ftp> put c.txt
200 PORT command successful. Consider using PASV. 553 Could not create file. //上传失败 设置了上面对目录/var/ftp/netgrp的文件系统之后 net用户是该目录的属主,具有读写和进入的权限
而net1和net2用户属于netgrp组,因此具有读权限和进入目录的权限。
六、特定的使用者不可以变更目录
1.在vsftp服务器中新建两个用户aaa和bbb,同时把这个两个用户添加到白名单中 2.修改/etc/vsftpd/vsftpd.conf 添加以下两行
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list
新增一个文档: /etc/vsftpd/chroot_list 内容增加两行: aaa bbb
重新启动vsftpd service vsftpd restart 3.从Win2K3客户端访问
在浏览器中ftp://192.168.13.19打开FTP服务器,然后用aaa用户登录,aaa用户登录以后,是不可以变更到其他目录。换用bbb用户,也是不可登录到其的目录,只能在本目录下操作。
七、配置基于IP的虚拟FTP服务器 1.配置多个IP地址
[root@localhost ~]# ifconfig eth0:1 192.168.13.18 netmask 255.255.255.0 [root@localhost ~]# ifconfig | grep inet
inet addr:192.168.13.19 Bcast:192.168.13.255 Mask:255.255.255.0 inet addr:192.168.13.18 Bcast:192.168.13.255 Mask:255.255.255.0 2.建立虚拟FTP服务器的目录
[root@localhost ~]# mkdir -p /var/ftp2/pub 3、创建虚拟服务器的匿名用户所映射的本地用户ftp2 [root@localhost ~]# useradd -d /var/ftp2 -M ftp2
4、修改原独立运行的服务器配置文件/etc/vsftpd/vsftpd.conf 添加主服务器的ip如下listen_address=ip地址 listen_address=192.168.13.19
5、生成虚拟服务器的主配置文件/etc/vsftpd/vsftpd2.conf [root@localhost ~]#cd /etc/vsftpd/vsftpd.conf [root@localhost vsftpd]#cp vsftpd.conf vsftd2.conf
6、绑定虚拟服务器的ip
listen_address=192.168.13.18
使虚拟服务器的匿名用户映射到本地用户ftp2 ftp_username=ftp2 重新启动vsftpd服务 把ftp2加入白名单 C:\\>ftp 192.168.13.18
Connected to 192.168.13.18. 220 (vsFTPd 2.0.1)
User (192.168.13.18:(none)): anonymous 331 Please specify the password. Password:
230 Login successful. //登录成功
C:\\>ftp 192.168.13.18
Connected to 192.168.13.18. 220 (vsFTPd 2.0.1)
User (192.168.13.18:(none)): ftp2 //用ftp2登录 331 Please specify the password. Password:
230 Login successful. //登录成功
【实验备注】 【实验总结】
一、1.测试Vsftp服务器的默认配置----匿名登录
2.测试Vsftp服务器的默认配置----本地帐号登录 通过这两步,可以看出RedHat AS4.0的默认配置:
允许匿名用户和本地用户登录
匿名用户的登录的用户名为ftp或是anonymous,密码分别为ftp和空密码 匿名用户不能离开匿名服务器目录/var/ftp,且只能下载不能上传
本地用户的登录名为本地用户名,口令为此本地用户的口令,在客户端(Win2K3)用本地帐户(Linux系统内的用户)登录之后,可以下载,可以上传。
因篇幅问题不能全部显示,请点此查看更多更全内容