LINUX的FTP实验报告
linux下搭建ftp实验报告
local_enable=YES允许本地用户登录
local_umask=022设置本地用户的文件生成掩码为022
anon_upload_enable=YES允许匿名上传文件
anon_mkdir_write_enable=YES允许匿名新建文件夹
测试下载功能,下载test文件:在命令提示符ftp登陆成功状态下输入get test
测试上传功能,上传文件ftpftp.tx:在命令提示符ftp登陆成功状态下put ftpftp.txt
四、登录FTP
在另一台与宿主机网络连通的电脑地址栏上输入ftp://192.168.8.202图形界面登陆FTP
五、实验总结
/etc/vsftpd/vsftpd.conf主配置文件
/etc/vsftpd.ftpusers指定哪些用户不能访问FTP服务器
/etc/er_list文件中指定的用户是否可以访问ftp服务器由vsftpd.conf文件中的userlist_deny的取值来决定。
4.根据需求对vsftpd.conf主配置文件进行如下配置:
在本次试验过程中遇到的问题(问题交给你写):
通过本次试验我们了解了FTP服务的基本原理,学会了FTP服务器的配置,利用它提供相关的网络文件服务。
XX学院计算机学院
Linux网络管理及应用实验报告
实验名称
FTP服务器的配置与应用
班级成绩
一、工作原理:
FTP是TCP/IP协议组中的协议之一。FTP服务器能在网络上提供文件传输服务,可以向用户提供上传和下载文件服务。一般来说,传输文件的用户需要先经过认证以后,才能登录并访问远程服务器上的文件。大多数的FTP服务器提供了一个guest的公共账户,允许远程用户访问该FTP服务器。FTP会话通常包括5个元素的交互:用户接口、客户PI、服务器PI、客户DTP、服务DTP。在FTP会话中,会存在有两个独立的网络连接,一个是由两端的PI所使用的,另一个是由两端的DTP所使用的。PI之间的连接一般称为控制连接(control connection),DTP之间的连接称为数据连接(data connection)。在通常情况下,FTP服务器监听21端口来等待控制连接建立请求。而数据连接端口的选择,依赖于控制连接的命令,通常是客户发送一个控制消息,来指定客户监听并等待服务器端发送数据连接建立请求的端口。
Linux文件传输服务实验报告FTP
一、搭建匿名FTP访问[root@localhost ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth0 修改ip地址BOOTPROTO=noneIPADDR=192.168.1.1NETMASK=255.255.255.0[root@localhost ~]# service network restart 重启网卡[root@localhost ~]# ifconfig eth0 查看网卡ip地址eth0 Link encap:Ethernet HWaddr 00:0C:29:F5:12:C9inet addr:192.168.1.1 Bcast:192.168.1.255 Mask:255.255.255.0[root@localhost ~]# rpm -q vsftpd 查看vsftpd软件包是否安装package vsftpd is not installed(没有安装)[root@localhost ~]# mount /dev/cdrom /mnt 挂载光盘mount: block device /dev/cdrom is write-protected, mounting read-only[root@localhost ~]# vim /etc/yum.repos.d/rhel-debuginfo.repo 修改baseurl=file:///mnt/Serverenabled=1[root@localhost ~]# yum -y install vsftpd 安装vsftpd软件包[root@localhost ~]# rpm -q vsftpd 再查看是否已经安装vsftpd-2.0.5-16.el5_4.1安装方法二:[root@localhost ~]# rpm -ivh /mnt/Server/vsftpd-2.0.5-16.el5_4.1.i386.rpm[root@localhost ~]# vim /etc/vsftpd/vsftpd.conf 修改配置文件anonymous_enable=YESlocal_enable=NOanon_upload_enable=YESanon_mkdir_write_enable=YES[root@localhost ~]# service vsftpd restart 重启vsftpd服务在Windows中验证:在linux中验证:[root@localhost ~]# lftp 192.168.1.1 登陆ftp服务器lftp 192.168.1.1:~> ls 查看drwxr-xr-x 2 0 0 4096 Dec 04 2009 pub二、搭建使用用户名、密码登陆FTP [root@localhost ~]# vim /etc/vsftpd/vsftpd.conf 编辑配置文件anonymous_enable=NOlocal_enable=YES[root@localhost ~]# service vsftpd restart 重启vsftpd服务创建本地用户:[root@localhost ~]# useradd hehe[root@localhost ~]# passwd hehe[root@localhost ~]# useradd heihei[root@localhost ~]# passwd heihei验证:在Windows中验证:在Linux中验证:[root@localhost ~]# lftp -u hehe 192.168.1.1口令:lftp hehe@192.168.1.1:~> lsdrwxr-xr-x 2 500 500 4096 Mar 07 09:09 hehe三、白名单的使用[root@localhost ~]# vim /etc/vsftpd/vsftpd.conf 编辑配置userlist_enable=YESuserlist_deny=YES[root@localhost ~]# vim /etc/vsftpd/user_list 编辑白名单配置把hehe用户添加上(表示hehe用户不能登陆)hehe验证:。
LINUX的FTP实验报告
LINUX的FTP实验报告实验需求:为了实现文件传输,共享资源实验环境:一台centos和一台XP客户机实验步骤:首先打开centos再将安装光盘挂载上,输入命令“rpm -qa|grep vsftpd”查看是否有此软件,如果没有进入到光盘的挂载目录,然后输入命令“rpm -ivh vsftpd(然后使用补全)”,如图1所示,安装软件完成图1下面我们到配置文件中设置一下,输入命令“vi /etc/vsftpd/vsftpd.conf”就出现如图2所示,用末行模式加上行号图2我们将文件中的第27和31行启用,就是把前面的#删除即可,然后在31行下面写上“anon_other_write_enable=YES”这一行的意思是给匿名用户删除权限,第27行是给匿名用户上传权限,31行是给匿名用户创建、修改文件夹权限,如图3所示,修改完成后保存退出图3然后我们再到“/var/ftp/”下将pub文件夹的其它用户权限设为读、写、执行,输入命令“chmod o+w pub”如图4所示图4下面我们将两台虚拟机网段设置成3,将centos的IP设置为192.168.6.2 将XP的IP设置为192.168.6.3,如图5-1,5-2所示,都点击确定完成设置图5-1图5-2然后我们在XP上测试一下网络是否畅通,如图6所示网络畅通图6 下面我们到centos上启动FTP服务,输入命令“service vsftpd restart”,,我们启动成功,下面我们到XP上测试,我们的设置是否生效,如图7所示,我们访问成功图7 我们测试一下上传和删除功能,如图8-1,8-2所示,设置生效,我们实验成功图8-1图8-2总结:此次实验,让我学到FTP功能也是很强大的,如果不小心就会让其不能实验你想要的功能,我在删除文件夹的时候,因为忘记了文件夹有内容,所以怎么也删除不掉,后来将文件一删除就把问题解决了附加内容:解释一下配置文件中的选项意思,如图#vi /etc/vsftpd/vsftpd.conf 允许匿名用户登录anonymous_enable=YES 允许本地用户登录local_enable=YES开放本地用户的写权限write_enable=YES设置本地用户的文件掩码local_umask=022匿名用户上传文件anon_upload_enable=YES 匿名用户创建文件夹权限精选文库anon_mkdir_write_enable=YES匿名用户删除权限anon_other_write_enable=YES切换目录时显示的消息dirmessage_enable=YES开启日志功能xferlog_enable=YES标准数据传输端口connect_from_port_20=YES上传文件时改变文件的所有者chown_uploads=YESchown_username=whoever日志文件的路径xferlog_file=/var/log/vsftpd.log使用标准的日志格式xferlog_std_format=YES会话超时600秒自动中断连接idle_session_timeout=600数据连接超时120秒中断连接data_connection_timeout=120设置客户端空闲时的自动中断和激活连接的时间accept_timeout=60connect_timeout=60精选文库限制客户并发连接数max_clients=200设置每客户的连接数max_per_ip=5设置传输速率local_max_rate=50000anon_max_rate=50000guest_max_rate=50000开启ASCII码上传、下载方式ascii_upload_enable=YESascii_download_enable=YESFTP欢迎信息ftpd_banner=Welcome to blah FTP service.设置chroot第一种:所有用户都锁定目录chroot_local_user=YES第二种:只有文件里的用户才会锁定目录chroot_local_user=NOchroot_list_enable=YESchroot_list_file=/etc/vsftpd.chroot_list限制本地用户的访问精选文库第一种:设置文件里的本地用户不能访问FTP服务器userlist_enable=YESuserlist_deny=YESuserlist_file=/etc/er_list第二种:设置只有文件里的本地用户才能访问FTP服务器userlist_enable=YESuserlist_deny=NOuserlist_file=/etc/er_list另外:/etc/vsftpd.ftpusers只要是这个文件里的用户都不能访问服务器vsftp服务器参数怎样配置#################用户登陆控制###############接受匿名用户anonymous_enable=YES#匿名用户login时不询问口令no_anon_password=YES#匿名用户主目录anon_root=(none)#接受本地用户local_enable=YES#本地用户主目录local_root=(none)#如果匿名用户需要密码,那么使用banned_email_file里面的电子邮件地址的用户不能登录deny_email_enable=YES#仅在没有pam验证版本时有用,是否检查用户有一个有效的shell来登录check_shell=YES#若启用此选项,userlist_deny选项才被启动userlist_enable=YES#若为YES,则userlist_file中的用户将不能登录,为NO则只有userlist_file的用户可以登录userlist_deny=NO#如果和chroot_local_user一起开启,那么用户锁定的目录来自/etc/passwd每个用户指定的目录(这个不是很清楚,很哪位熟悉的指点一下)passwd_chroot_enable=NO#定义匿名登入的使用者名称。
实训2使用Linux搭建FTP服务器实训报告
实训2使用Linux搭建FTP服务器实训报告1. 实验目的本实训的目的是通过在Linux系统上搭建FTP服务器,了解和掌握FTP协议以及服务器的基本配置和使用方法。
2. 实验环境本次实训使用的实验环境如下:- 操作系统:Linux- 软件:vsftpd3. 实验步骤3.1 安装vsftpd软件在Linux系统上,通过包管理工具安装vsftpd软件。
具体步骤如下:- 打开终端。
- 输入以下命令进行安装:sudo apt-get install vsftpd- 等待安装完成。
3.2 配置vsftpd安装完成后,需要进行一些配置才能正常使用vsftpd。
具体步骤如下:- 进入vsftpd配置文件所在的目录。
一般位于`/etc`目录下。
- 使用文本编辑器打开文件`vsftpd.conf`。
- 根据需求修改配置项,如FTP根目录、允许匿名访问等。
保存修改后关闭文件。
- 重启vsftpd服务,使配置生效。
3.3 创建FTP用户在FTP服务器上创建用户,以便其他用户可以通过FTP协议访问服务器。
具体步骤如下:- 打开终端。
- 输入以下命令创建新用户:sudo adduser ftpuser- 根据提示设置用户密码等信息。
3.4 测试FTP服务器完成以上配置后,可以进行简单的测试,确保FTP服务器可以正常使用。
具体步骤如下:- 打开FTP客户端软件。
- 输入服务器地址、FTP用户和密码进行连接。
4. 实验结果5. 实验总结注意:本文档内容仅供参考,具体配置和操作可能因不同的Linux发行版和软件版本略有不同,建议在实际操作过程中参考相关文档和官方说明。
FTP实验报告
FTP实验报告1、实验目的本实验要求在linux系统上完成一个文件传输协议,通过本实验,不但可以深入理解FTP协议的原理和细节,还可以学会利用Socket接口设计实现简单应用层协议,掌握网络应用程序的基本设计方法和实验技巧。
2、实验说明文件传输协议用于两台计算机之间传递文件,FTP包含了两个通道。
一个是控制通道,一个是数据通道。
控制通道是和FTP服务器进行沟通的通道,连接服务器,发送指令。
数据通道则是和FTP服务器进行文件传输和获取文件列表的通道。
3、实验内容本实验要求在Linux系统上使用Socket接口实现FTP客户顿和服务器端的程序,使客户端可以连接至服务器,并且可以进行一些FTP的基本操作。
应实现的FTP命令包括如下几点:1、 get: 取远方的一个文件2、 put: 传给远方一个文件3、 pwd: 显示远方当前目录 4、 dir: 列出远方当前目录 5、 cd: 改变远方当前目录 6、 help: 显示提供的命令 7、 quit: 退出4、实验代码客户端和服务器代码见附件。
5、思考题1.在FTP协议中,为什么要建立两个TCP连接来分别传送命令和数据?答:如果只用一个连接,那就是复用一个端口。
而我们知道,端口之间通信需要传输协议才能建立连接,端口的复用等于说在一个端口上同时使用2种协议以上,但如果是10种协议呢?不但会影响传输速度,数据出错的概率也变大了。
2.主动方式和被动方式的主要区别是什么?为何要设计这两种方式?答:区别:主动方式下客户端首先和服务端建立连接,在传输数据时服务器和客户端必须建立一个新的连接,而被动方式则是由服务器等待客户端来连接,且不用建立新的连接。
原因:一般情况下都是采用主动模式,但很多防火墙在设置的时候都是不允许接受外部发起的连接的,所以主动模式许多时候在内部网络的机器通过防火墙出去时受到了限制,因为从服务器的TCP 20无法和内部网络的客户端建立一个新的连接,造成无法工作。
Linux-14-vsftpd实验报告
Vsftpd实验报告1.实验环境:Vm(ftp服务器):192.168.10.1物理机(客户机):192.168.10.42.实验要求:学校有Linux服务器做为FTP服务器有两个班,分别是wl28和wl29现要求,wl28班的人和wl29班的人都能够使用自己的账号wl28或wl29,密码123登录FTP 登录上后能看到自己的文件夹,在文件夹中只能上传,不能下载(且有文件类型的要求)3.实验步骤:服务器1)挂光盘。
装包mount /dev/cdrom /mntrpm -ivh vsftpd…2)更改主配置文件vim /etc/vsftpd/vsftpd.confchroot_local_user=YES//强制用户在自己的家里边guest_enable=YES //开启来宾账户guest_username=virtual//来宾映射成virtual用户pam_service_name=ftp.virtual //身份验证文件anon_world_readable_only=NO //列出文件夹中文件user_config_dir=/etc/vsftpd/vsftpd_user_conf //用户配置文件目录设置3)创建一个用来做为来宾的用户useradd -d /home/ftpsite virtual4)创建身份验证文件(基数行是用户名,偶数行是密码)vim login.txtwl28123Wl291235)把login.txt 转换为 login.db(因为db_load默认没有安装,所以要先安装包rpm -ivh db4-utils) db_load -T -t hash -f login.txt /etc/vsftpd/login.db6)创建身份验证模块,把主配置文件和用户数据库关联起来vim /etc/pam.d/ftp.virtualAuth required /lib/security/pam_userdb.so db=/etc/vsftpd/loginAccount required /lib/security/pam_userdb.so db=/etc/vsftpd/login7)创建用户配置文件所在目录mkdir /etc/vsftpd/vsftpd_user_conf8)建立用户配置文件vim /etc/vsftpd/vsftpd_user_conf/wl28local_root=/home/ftpsite/wl28 //用户ftp站点目录anon_upload_enable=YES //用户可上传文件anon_mkdir_write_enable=NO //用户无建立、删除目录的权限anon_other_write_enable=NO //用户无对文件改名删除和覆盖文件的权限deny_file={*.mp3,*.mid,*.wav,*.mp4,*.3gp,*.avi ,*.flv,*.rmvb,*.qvod,*.rm,*.rar,*.zip,*.exe,*. bat,*.vbs,*.vod}//用户无法上传括号中的文件download_enable=NO //用户无法下载文件vim /etc/vsftpd/vsftpd_user_conf/wl29local_root=/home/ftpsite/wl29 //用户ftp站点目录anon_upload_enable=YES //用户可上传文件anon_mkdir_write_enable=NO//用户无建立、删除目录的权限anon_other_write_enable=NO //用户无对文件改名删除和覆盖文件的权限deny_file={*.mp3,*.mid,*.wav,*.mp4,*.3gp,*.avi ,*.flv,*.rmvb,*.qvod,*.rm,*.rar,*.zip,*.exe,*. bat,*.vbs,*.vod}//用户无法上传括号中的文件download_enable=NO //用户无法下载文件9)创建用户目录mkdir /home/ftpsite/wl28mkdir /home/ftpsite/wl2910)在其中建立新人员cd /etc/vsftpd/vsftpd_user_conf/wl28mkdir xzlcd /etc/vsftpd/vsftpd_user_conf/wl29mkdir xzl11)改变属组、属主chown -R virtual:virtual /home/ftpsite/wl28chown -R virtual:virtual /home/ftpsite/wl29客户机用浏览器检测ftp://192.168.10.1用不同的身份登录,上传下载文件,进行验证实验总结:通过权限设置,可以不同用户在ftp上的权限,便于管理。
FTP服务器及数据库服务器的配置实验报告
云南大学软件学院实验报告课程:网络操作系统分析与实现任课教师:梁宇实验指导教师(签名):实验6 FTP服务器及数据库服务器的配置一、实验目标:1. 了解在Linux下配置FTP所需要环境和资源。
2. 掌握Linux下配置FTP服务器的方法。
3. 能够按照实际情况修改FTP的配置文件。
4. 熟悉常用的FTP基本内部命令。
二、实验要求采用主机操作系统和VMware客户操作系统,两部分为一组进行FTP的配置。
客户操作系统作为FTP服务器,主机操作系统作为FTP客户机。
三、实验内容按照下面的要求进行配置,并记录实验过程和结果。
(一)、安装vsftp软件1、如果已经将Red Hat Linux 9.0进行完全安装,则FTP服务器软件已经安装。
如果没有安装,可以从Red Hat Linux 9.0的第一张安装盘里找到对应的RPM软件包进行安装。
//安装vsftpd:rpm -ivh vsftpd-1.1.3.i386.rpm//查看是否安装了vsftpd:#rpm -qa|grep vsftpd//启动vsftpd:service vsftpd start//检查是否启动:pstree | grep vsftpd2、VSFTP的主配置文件:/etc/vsftpd/vsftpd.conf,以及/etc/vsftpd.ftpusers和/etc/er_list文件。
/etc/vsftpd.ftpuser中指定不能访问FTP服务器的用户,/etc/er_list中指定用户在默认情况(即在/etc/vsftpd/vsftpd.conf中设置了userlist_deny=YES)下不能访问FTP服务器。
当在/etc/vsftpd/vsftpd.conf中设置userlist_deny=NO时,仅允许/etc/er_list中指定的用户访问FTP服务器。
(二)、配置FTP服务器的属性1. 在Linux 环境下使用的FTP服务器软件主要有Wu-ftpd、vsftpd和ProFTPd三种,本机上使用的是哪一种?它的守护进程是什么?Vsftp,其守护进程为vsftpd2. 在FTP服务器上创建本地用户wangming,liping;3. 在FTP服务器上禁止liping使用FTP功能,应该如何操作?在/etc/ftpusers中添加liping。
Linux-FTP服务器配置与管理实验报告
Linux实验报告
姓名学号班级成绩
实验名称: Linux-FTP服务器配日期
一、实验目的:
●掌握Vsftpd服务器的配置方法。
●熟悉FTP客户端工具的使用。
●掌握常见的FTP服务器的故障排除。
二、实验内容:
练习Linux系统下Vsftpd服务器的配置方法及FTP客户端工具的使用。
三、实验记录:
○1修改本地权限,使匿名用户对/var/ftp目录具有写入权限
○2修改配置文件
○3设置禁止本地user1用户登入ftp服务器
○4设置只有指定本地用户user1和user2可以访问ftp服务器
○5设置将所有本地用户都锁定在家目录中
○6设置本地用户登录FTP服务器之后,在进入dir目录时显示提示信息“welcome”
四、思考题:
FTP的配置过程:基本的过程就是修改方/etc/vsftpd/ftpusers 中的VSFTPD.CONF的配置文件中的属性,如userlist_enable等,然后添加访问的用户名称到/etc/vsftpd/ftpusers 中的用户列表,这样该用户便可以反问该ftp。
五、评语:。
linux ftp服务器配置实验报告
linux服务项目报告姓名:李嘉猛班级:计算机网络2班学号:30号配置FTP服务器项目报告1、项目需求配置一个高安全级别的匿名FTP服务器,实现功能:2、项目方案仅仅允许匿名用户访问不允许本地用户访问关闭所有写权限,不允许匿名用户上传设置匿名用户最大传输速率设置最大并发连接数,配置每个主机的最大连接数3、项目环境准备软件要求:虚拟机,linux系统光盘。
操作系统:RED HAT 5.0本机IP地址:10.129.33.100服务所需的安装包:配置文件:/etc/vsftpd/vsftpd.conf4、项目实施步骤(1).检查FTP软件安装包是否安装,完成安装。
(2).配置/etc/vsftpd/vsftpd.conf文件。
修改一下内容:Anonymous_enable=YES 允许匿名用户访问Localhost_enable=NO 禁止本地用户访问Write_enable=NO 关闭所有写权限Anon_upload_enable=NO 匿名用户无法上传max_per_ip=5 每个ip最多支持5个连接max_clients=10 最大连接数为10anony_max_rate=30000 限制匿名用户的最大传输速率为30kb(3)为满足实验需求,创建一个本地用户:(4).重启ftp服务:Service vsftp restart(5).在windows主机上进行测试:1.进行本地用户访问的测试:成功!2.匿名用户访问:成功!3.关闭所有写权限,不允许匿名用户上传如上所述,匿名用户无法写入。
匿名用户可下载不可上传!5、项目测试项目总结嗯嗯。
很简单、、、。
3-Linux搭建ftp和nfs服务
蚌埠学院计算机工程学院实验报告(3)课程名称Linux 操作系统指导教师陶启宏姓名施张淳学号51802032057实验日期2020.5.20专业网络工程班级18网络工程2班实验地点线上实验项目实验三:Linux 搭建ftp 和nfs 服务成绩一、实验目的熟悉Linux 软件安装方法,掌握FTP 服务搭建和使用方法,掌握NFS 服务搭建和使用方法。
此栏为教师批改栏,用红色字(√或错误说明,阅后删除)二、实验要求安装FTP 软件,配置和使用FTP 服务。
安装NFS 软件,配置和使用NFS 服务。
三、实验环境硬件环境:ASUS 笔记本(Windows 10);软件环境:VMware Workstation Pro;四、问题描述和实现过程1.搭建ftp 服务器(1)新建ftp 服务器目录(4)配置vsftpd.conf文件,要有root权限:(3)测试download能力(get filename)(4)测试上传功能①进入anonymous目录②上传文件(put filename)5.安装和配置NFS(1)从服务器端安装NFS服务sudo apt-get nfs-kernel-server在安装的时候提示建议安装open-iscsi watchdog,也一起安装了(2)配置/etc/exports,NFS挂载目录及权限由/etc/exports文件定义sudo vim/etc/exports/home/daochi/Desktop(目录不限)共享,则在该文件末尾添加下列语句:/home/daochi/Desktop*(rw,sync,no_root_squash,no_subtree_check)如果想和部分用户共享,设置相应的IP(IP不限)即可:/home/daochi/Desktop192.168.250.*(rw,sync,no_root_squash,no_subtree_check)注意:在这个实验中,我只选择了尝试做/home/daochi/Desktop共享(4)了解nfs相关参数*表示所有的客户机都可以挂接此目录;rw表示挂接此目录的客户机对该目录有读写的权力;sync表示所有数据在请求时写入共享,即数据同步写入内存和硬盘;no_root_squash表示允许挂接此目录的客户机享有该主机的root身份。
实验14Linux的FTP服务
启动FTP服务
重新启动FTP服务器软件,以使新的 配用户目录
在FTP服务器上创建虚拟用户账号,这些账 号独立于系统本地账号。
为每个虚拟用户指定一个共享目录,用于 存储公共文件。
配置虚拟用户访问权限
THANKS FOR WATCHING
感谢您的观看
启动FTP服务
根据需要设置虚拟用户的访问权限,限制 其对特定目录的访问。
重新启动FTP服务器软件,以使新的配置生 效。
04 安全设置
禁止root登录
总结词
为了提高FTP服务的安全性,应禁止root用 户登录。
详细描述
root用户是Linux系统的最高权限用户,如 果允许root用户登录FTP服务器,可能会带 来严重的安全风险。因此,应该禁止root用 户直接登录FTP服务器,而是创建一个具有 必要权限的普通用户来管理FTP服务。
配置vsftpd服务
• write_enable=YES
配置vsftpd服务
```
保存并关闭文件。
VS
启动vsftpd服务
• 运行以下命令启动vsftpd服务
启动vsftpd服务
```sql
sudo systemctl start vsftpd
启动vsftpd服务
```
要使vsftpd在系统启动时自动启动,运行以 下命令
无法上传或下载文件
总结词
无法上传或下载文件可能是由于权限问 题、磁盘空间不足或文件路径错误等。
VS
详细描述
首先检查文件权限,确保FTP用户具有足 够的权限来访问和修改目标目录。可以使 用命令`ls -l`查看目录权限,并使用 `chmod`和`chown`命令进行修改。其次 检查磁盘空间,使用命令`df -h`查看磁盘 使用情况,确保有足够的空间进行文件上 传或下载。最后检查文件路径,确保提供 的文件路径正确无误。
linux ftp服务器配置实验报告
linux ftp服务器配置实验报告linux服务姓名: 李嘉猛班级:计算机网络2班学号: 30号with the supervising engineer in the construction process, strictly in accordance with the owner and engineer for construction approval of construction organization design and quality control. In the team of "self-inspection, mutual inspection, handover inspection" and mass spot check on the basis of the technology sector, initiative to accept supervision engineers, tianjing quality supervision and quality supervision station of Beijing railway administration supervision and inspection, with the supervising engineer for good construction quality inspection and supervision engineer's request for rectification, and ensure the timely completion of construction quality. 4, with the coordination of railway-related units to give full play of my units in railway construction experience, familiar with the advantages ofexisting procedures relating to the construction, active railway-related functions, contact the facilities management unit, comply with the relevant provisions of existing line construction, signed before construction to maintain existing equipment security operations and ensure the safety of construction match the custody agreement, and implementation in the construction process. 5, coordination with localgovernments, transportation agencies actively contact with local governments, transportation, environmental protection and other sectors, actively seeking the cooperation and support of the local government sector, with local governments and make the construction of law and order in the region, environmental protection, ensure配置FTP服务器项目报告1、项目需求配置一个高安全级别的匿名FTP服务器,实现功能: 2、项目方案仅仅允许匿名用户访问不允许本地用户访问关闭所有写权限,不允许匿名用户上传设置匿名用户最大传输速率设置最大并发连接数,配置每个主机的最大连接数 3、项目环境准备软件要求:虚拟机,linux系统光盘。
ftp实验报告
ftp实验报告一、实验目的1.在linux系统上完成一个FTP协议的简单实现。
2.深入了解FTP的原理和协议细节。
3.学会利用socket接口设计简单的应用层协议,掌握TCP/IP网络应用程序的基本设计方法和实现技巧。
二、实验内容实现以下FTP命令1.get:取远方的一个文件。
2.put:传给远方一个文件。
3.pwd:显示远方的当前目录。
4.dir:列出远方的当前目录。
5.cd:改变远方的当前目录。
6.?:显示提供的命令。
7.quit:退出。
三、思考题1.为什么需要建立两个TCP连接来分别传输命令和数据?为了在传输数据的同时还能进行控制。
2.主动方式和被动方式的区别是什么,为什么要设计这两种不同的方式?主动方式:客户端开好数据端口,服务器通过20端口向客户端数据端口发送连接请求被动方式:服务器开好数据端口并通过命令端口来告知客户端,等待客户端连接PASV模式出现的目的之一是防止客户端防火墙的影响。
3.当使用FTP下载大量小文件的时候,速度会很慢,为什么,怎么改进?因为每一个文件的传输都要在控制连接中发送几次控制命令并且每次都要重新关闭和打开数据连接,因此速度很慢。
可以通过保留每一次的数据连接以减少时间消耗。
四、源代码及注释见附件。
五、源代码(linux下)server.cpp#include <stdio.h>#include <stdlib.h>#include <string.h>#include <unistd.h>#include <fstream>#include <dirent.h>#include <sys/socket.h>#include <sys/types.h>#include <signal.h>#include <arpa/inet.h>#include <pthread.h>#include <assert.h>#include <string>#include <netinet/in.h>#include <iostream>#define BUF_SIZE 256#define ROOT_DIR "."using namespace std;enum DataType {TYPE_ASCII, TYPE_IMAGE};//打印线程信息void log(const string & s){pthread_t th = pthread_self();printf("[PID %d] %s \n", th, s.c_str());}//根据文件名,将文件读到content中去int readFile(const string & filename, string & content){ log("Reading file: " + filename);ifstream in(ROOT_DIR + filename, ios::in | ios::binary);if(in){content = "";in.seekg(0, ios::end);//获得文件大小content.resize(in.tellg());in.seekg(0, ios::beg);//复制文件in.read(&content[0], content.size());in.close();log("Read file ok. Size: " + to_string(content.size()));return 0;}log("Read file error.");return -1;}//将content中的内容存到文件名为filename的文件中int storeFile(const string & filename, string & content){ log("Writing to file: " + filename);ofstream out(ROOT_DIR + filename, ios::out | ios::binary);if(out){out << content;out.close();log("Write ok. Size: " + to_string(content.size()));return 0;}log("Write file error.");return -1;}//列出cwd下的文件列表int listDir(string cwd, string & ret){ret = "";DIR * dp;struct dirent *ep;dp = opendir((ROOT_DIR + cwd).c_str());if(dp == NULL) return -1;while(ep = readdir(dp)){ret += ep->d_name;ret += "\r\n";}closedir(dp);return 0;}//读控制连接string readCmd(int sockfd, bool logging = true){string buf;char _tmp[BUF_SIZE];while(true){int _len = read(sockfd, _tmp, BUF_SIZE - 1);for(int i = 0 ; i < _len ; i += 1) buf += _tmp[i];if(_len == 0 || _tmp[_len-1] == '\n') break;}while(buf.length() != 0 && (buf.back() == '\n' || buf.back() == '\r')) buf.pop_back();if(logging){string to_print = "Recv: " + buf +"[len:" + to_string(buf.length()) + "]";log(to_print);}return buf;}//写控制连接int writeCmd(int sockfd, int code, const string & msg){string buf = to_string(code);buf += ' ';buf += msg;log("Send: " + buf);buf += "\r\n";return write(sockfd, buf.c_str(), buf.length());}//启动被动模式,开启数据连接int openPasvSocket(int sockfd){struct sockaddr_in localaddr, dataserv_addr, datacli_addr;socklen_t localaddrlen = sizeof(localaddr),datacli_addr_len = sizeof(datacli_addr),dataserv_addr_len = sizeof(datacli_addr);//得到客户端的地址getsockname(sockfd, (struct sockaddr*)&localaddr, &localaddrlen);//换成点分十进制的地址string ret_str = inet_ntoa(localaddr.sin_addr);for(int i = 0 ; i < ret_str.length() ; i += 1)if(ret_str[i] == '.') ret_str[i] = ',';//配置数据连接的地址dataserv_addr.sin_family = AF_INET;dataserv_addr.sin_addr.s_addr = INADDR_ANY;dataserv_addr.sin_port = 0;int dataserve_sock = socket(AF_INET, SOCK_STREAM, 0);//绑定if(bind(dataserve_sock, (struct sockaddr *)&dataserv_addr,sizeof(dataserv_addr)) < 0){log("Bind PASV socket error.");writeCmd(sockfd, 421, "Service not available");return -1;}//监听listen(dataserve_sock, 1);//获取本地的数据端口getsockname(dataserve_sock, (struct sockaddr *)&dataserv_addr, &datacli_addr_len);unsigned int dataserv_port = ntohs(dataserv_addr.sin_port);log((string("PASV socket port: ") +to_string(dataserv_port)).c_str());ret_str += ",";ret_str += to_string(dataserv_port >> 8) + ",";ret_str += to_string(dataserv_port & 0xff) + ").";ret_str = "Entering Passive Mode (" + ret_str;//通过控制连接将数据端口发送给客户端writeCmd(sockfd, 227, ret_str);log("Listening PASV socket.");//等待客户端连接数据端口int newfd = accept(dataserve_sock,(struct sockaddr *)&datacli_addr,(socklen_t *)&datacli_addr_len);log("PASV socket accepted.");close(dataserve_sock);return newfd;}//写数据连接void writeData(int sockfd, int &datasock,const void * buf, int buf_len){if(datasock < 0){writeCmd(sockfd, 150, "File status okay. About to open data connection.");return ;}writeCmd(sockfd, 125, "Data connection already open. Transfer starting.");write(datasock, buf, buf_len);close(datasock);datasock = -1;writeCmd(sockfd, 226, "Transfer complete.");}//读数据连接void readData(int sockfd, int &datasock, string & content){content = "";if(datasock < 0){writeCmd(sockfd, 150, "File status okay. About to open data connection.");return ;}writeCmd(sockfd, 125, "Data connection already open. Transfer starting.");char _tmp[BUF_SIZE];while(1){int _len = read(datasock, _tmp, BUF_SIZE-1);for(int i = 0 ; i < _len ; i += 1) content += _tmp[i];if(_len <= 0) break;}close(datasock);datasock = -1;writeCmd(sockfd, 226, "Transfer complete.");}void * workThread(void * clientcmdID){//工作线程signal(SIGPIPE, SIG_IGN);int clientcmdsock = *(int *)clientcmdID;//clientcmdsockstring buf;//当前相对路径string cwd = "/";int datasock = -1;//220 对新用户准备完毕writeCmd(clientcmdsock, 220, "preperation done, ftp is available");while(true){//取命令buf = readCmd(clientcmdsock);if(buf.length() == 0){log("Read error. exit.");break;}char * buf_str = new char[buf.length() + 1];strcpy(buf_str, buf.c_str());// 取命令的前部,转成C风格字符串char * CMDCode = strtok(buf_str, " \r\n");if(strcmp(CMDCode, "QUIT") == 0) break;if(strcmp(CMDCode, "PASV") == 0){//启动被动模式,准备数据连接datasock = openPasvSocket(clientcmdsock);continue;}if(strcmp(CMDCode, "PWD") == 0){string _tmp = '"' + cwd + '"';//使用命令连接传送当前路径writeCmd(clientcmdsock, 257, _tmp + " is the current path.");continue;}if(strcmp(CMDCode, "DIR") == 0){string _tmp;//列出当前路径下的文件名listDir(cwd, _tmp);//使用数据连接发送当前文件夹下的文件列表writeData(clientcmdsock, datasock, _tmp.c_str(), _tmp.length());continue;}if(strcmp(CMDCode, "CD") == 0){//改变路径//取第二个参数路径转移目标CMDCode = strtok(NULL, " \r\n");string _tmp;if(listDir(cwd+CMDCode, _tmp) == 0){cwd += CMDCode;cwd += '/';writeCmd(clientcmdsock, 200, "Changed dir to " + cwd + ".");}else writeCmd(clientcmdsock, 550, "Dir not exist.");continue;}if(strcmp(CMDCode, "GET") == 0){//下载文件CMDCode = strtok(NULL, " \r\n");string _tmp;if(readFile(cwd+CMDCode, _tmp) == 0)//使用数据连接发送文件流writeData(clientcmdsock, datasock, _tmp.c_str(), _tmp.length());else writeCmd(clientcmdsock, 550, "Open file error.");continue;}if(strcmp(CMDCode, "PUT") == 0){CMDCode = strtok(NULL, " \r\n");string _tmp;//使用数据连接接收文件流readData(clientcmdsock, datasock, _tmp);storeFile(cwd+CMDCode, _tmp);continue;}// other commandwriteCmd(clientcmdsock, 500, "Unknown command.");}close(clientcmdsock);close(datasock);log("Quiting...");return NULL;}int main(int argc, char ** argv){//第一个参数是端口//检查参数个数if(argc < 2){cout << "usage:sudo ./server port" << endl;return -1;}int cmdsock = socket(AF_INET, SOCK_STREAM, 0);//检查是否socket是否创建成功if(cmdsock < 0){cout << "create socket failed" << endl;return -1;}struct sockaddr_in serv_addr, cli_addr;//配置本地地址信息serv_addr.sin_family = AF_INET;serv_addr.sin_addr.s_addr = INADDR_ANY;serv_addr.sin_port = htons(atoi(argv[1]));//绑定地址int ret = bind(cmdsock, (struct sockaddr *)&serv_addr, sizeof(serv_addr));if(ret < 0){cout << "bind failed" << endl;return -1;}//开始监听ret = listen(cmdsock, 5);if(ret < 0){cout << "listen failed" << endl;return -1;}pthread_t thread;puts("Listening...");while(true){int cli_addr_len = sizeof(cli_addr);//接收客户端的连接请求int clientcmdsock = accept(cmdsock, (struct sockaddr *)&cli_addr, (socklen_t *)&cli_addr_len);//创建线程处理与客户端的通信pthread_create(&thread, NULL, workThread, (void *)&clientcmdsock);cout << "accept a new connection from" << inet_ntoa(cli_addr.sin_addr)<< ":" << ntohs(cli_addr.sin_port) << ", thread:" << thread << endl;}return 0;}client.cpp#include <stdio.h>#include <stdlib.h>#include <iostream>#include <string.h>#include <unistd.h>#include <fstream>#include <dirent.h>#include <sys/socket.h>#include <sys/types.h>#include <signal.h>#include <arpa/inet.h>#include <assert.h>#include <string>#include <netinet/in.h>#include <netdb.h>#define BUF_SIZE 256#define ROOT_DIR "."using namespace std;//根据文件名,将文件读到content中去int readFile(const string & filename, string & content){ printf("Reading file: %s\n", filename.c_str());ifstream in(filename, ios::in | ios::binary);if(in){content = "";in.seekg(0, ios::end);//获得文件大小content.resize(in.tellg());in.seekg(0, ios::beg);//复制文件in.read(&content[0], content.size());in.close();printf("Read ok\n");return 0;}printf("Read error.\n");return -1;}//将content中的内容存到文件名为filename的文件中int storeFile(const string & filename, string & content){ printf("Writing file: %s\n", filename.c_str());ofstream out(filename, ios::out | ios::binary);if(out){out << content;out.close();printf("Write ok. ");return 0;}printf("Write file error.");return -1;}//读控制连接string readCmd(int sockfd){string buf;char _tmp[BUF_SIZE];while(1){int _len = read(sockfd, _tmp, BUF_SIZE - 1);for(int i = 0 ; i < _len ; i += 1) buf += _tmp[i];if(_len == 0 || _tmp[_len-1] == '\n') break;}while(buf.length() != 0 && (buf.back() == '\n' || buf.back() == '\r')) buf.pop_back();return buf;}//写控制连接string sendCmd(int cmdsock, string msg){//sockfd 服务器msg += "\r\n";write(cmdsock, msg.c_str(), msg.length());string ret = readCmd(cmdsock);cout << ret << endl;return ret;}int connectSocket(const char * host, int port){//连接到服务器printf("Connecting to %s:%d\n", host, port);int sockfd = -1;struct sockaddr_in serv_addr;struct hostent *server;//创建一个socketsockfd = socket(AF_INET, SOCK_STREAM, 0);//含有服务器的相关信息server = gethostbyname(host);if(server == NULL){printf("No such host.\n");return -1;}serv_addr.sin_family = AF_INET;//拷贝地址信息memcpy(&serv_addr.sin_addr.s_addr, server->h_addr, server->h_length);//设置连接的端口serv_addr.sin_port = htons(port);//建立连接if(connect(sockfd, (struct sockaddr *) & serv_addr, sizeof(serv_addr)) < 0){ printf("Connect error.\n");return -1;}printf("Connect OK.\n");//返回连接的socketreturn sockfd;}int connectPASV(int cmdsock){//sockfd 服务器printf("Connecting PASV...\n");string tmp("PASV");//发送请求被动连接命令tmp = sendCmd(cmdsock, tmp);//检查返回值,返回值包含了数据连接的地址和端口assert(strncmp(tmp.c_str(), "227", 3) == 0);tmp = tmp.substr(tmp.find('(') + 1);string _addr;//获取数据连接的地址for(int i = 0, dot_count=0; i < tmp.length() ; i += 1){ if(tmp[i] == ','){if(dot_count == 3) break;tmp[i] = '.';dot_count += 1;}_addr += tmp[i];}//获取数据连接的端口unsigned int port = 0;tmp = tmp.substr(tmp.find(',') + 1);char * s = new char[tmp.length() + 1];strcpy(s, tmp.c_str());port = atoi(strtok(s, ",) "));port <<= 8;port += atoi(strtok(NULL, ",) "));delete []s;//创建并返回数据连接return connectSocket(_addr.c_str(), port);}//写数据连接void readData(int &datasock, string & content){content = "";char _tmp[BUF_SIZE];while(1){int _len = read(datasock, _tmp, BUF_SIZE-1);for(int i = 0 ; i < _len ; i += 1) content += _tmp[i];if(_len <= 0) break;}//close(datasock);//datasock = -1;}void printHelp(){cout << "GET:取回服务器一个文件" << endl<< "PUT:传给服务器一个文件" << endl<< "PWD:显示服务器当前目录" << endl<< "DIR:显示服务器当前目录下的文件" << endl<< "CD:改变服务器目录" << endl<< "?:帮助" << endl;}int main ( int argc, char *argv[] ){assert(argc > 1);signal(SIGPIPE, SIG_IGN);//控制连接,连接服务器int cmdsock = connectSocket(argv[1], 21);assert(cmdsock >= 0);string tmp = readCmd(cmdsock);cout << tmp << endl;int datasock = -1;while(true){//数据连接if(datasock < 0) datasock = connectPASV(cmdsock);string cmd;printf("> ");//获取命令getline(cin, cmd);while(cmd.back() == '\n' || cmd.back() == '\r' || cmd.back() == ' ') cmd.pop_back();if(strncmp("?", cmd.c_str(), 1) == 0){printHelp();continue;}//通过控制连接发送命令string reply = sendCmd(cmdsock, cmd);if(strncmp("125", reply.c_str(), 3) == 0){//如果发送控制指令成功string filecontent;//只有存、取和列在本地才会有后续操作//存文件if(strncmp("PUT", cmd.c_str(), 3) == 0){//取文件名tmp = cmd.substr(cmd.find(' ') + 1);//读本地文件assert(readFile(tmp, filecontent) >= 0);//写数据连接write(datasock, filecontent.c_str(), filecontent.size());//关闭数据连接close(datasock);}//下载文件if(strncmp("GET", cmd.c_str(), 3) == 0){//取文件名tmp = cmd.substr(cmd.find(' ') + 1);//读数据连接readData(datasock, filecontent);//写本地文件assert(storeFile(tmp, filecontent) >= 0);//关闭数据连接close(datasock);}if(strncmp("DIR", cmd.c_str(), 3) == 0){readData(datasock, filecontent);cout << filecontent << endl;//关闭数据连接close(datasock);}if(strncmp("PWD", cmd.c_str(), 3) == 0)cout << reply << endl;elsedatasock = -1;//再读一行命令连接??readCmd(cmdsock);}}return EXIT_SUCCESS;}。
FTP协议实验报告
FTP协议实验报告●实验目的1、在Linux系统上完成一个文件传输协议(FTP)的简单实现。
2、深入理解FTP协议的原理和协议细节。
3、学会利用Socket接口设计实现简单应用层协议。
4、掌握TCP/IP网络应用程序的基本设计方法和实现技巧。
●实验原理1、FTP协议FTP是File Transfer Protocol,即文件传输协议的缩写。
该协议用于在两台计算机之间传送文件。
FTP会话包括了两个通道,一个是控制通道,一个是数据通道。
控制通道是和FTP 服务器进行沟通的通道,连接FTP服务器,发送FTP指令;数据通道则是和FTP服务器进行文件传输或者获取文件列表的通道。
FTP协议中,控制连接的各种指令均由客户端主动发起,而数据连接有两种工作方式:主动方式(PORT方式)和被动方式(PASV方式)。
主动方式下,FTP客户端首先和FTP服务器的控制通道对应端口(一般为21)建立连接,通过控制通道发送命令,客户端需要接收数据的时候在这个通道上发送PORT命令。
PORT命令包含了客户端用什么端口(一个大于1024的端口)接收数据。
在传输数据的时候,FTP服务器必须和客户端建立一个新的连接,服务器通过自己的TCP 20端口发送数据。
被动方式下,建立控制通道的过程和主动方式类似,当客户端通过这个通道发送PASV命令的时候,FTP server打开一个位于1024-5000之间的随机端口并且通知客户端,然后客户端与服务器之间将通过这个端口进行数据的传送。
2、socket编程(1)什么是SocketSocket接口是TCP/IP网络的API,Socket接口定义了许多函数或例程。
网络的Socket 数据传输是一种特殊的I/O,Socket也是一种文件描述符。
(2)Socket的建立为了建立Socket,程序可以调用Socket函数,该函数返回一个socket描述符。
Socket 描述符是一个指向内部数据结构的指针,它指向描述符表入口。
LINUX的FTP实验
LINUX的FTP实验实验需求:实现机房的文件共享管理(FTP可以跨网段,也可以在互联网上使用)实验环境:一台Centos虚拟机,一台XP客户机实验步骤:我们的文件共享要求为:1.需要是一个超户,可以管理任何文件夹2.每个老师文件夹有个老师用户,可以管理自己的文件夹,但是不可以管理别的老师的文件夹,有三个老师,分别为:赵老师,钱老师,孙老师3.学生可以匿名访问所有的文件夹我们首先将两台虚拟机打开,将网络设置畅通,网段为3,Centos的IP为192.168.6.1, XP客户端的IP为192.168.6.6,如图1-1,1-2所示图1-1图1-2下面我们测试网络畅通,如图2所示,网络畅通图2 接下来我们就可以动手设置了,我们先把需要的软件包装上,然后再建立需要的所有文件夹,如图3所示图3下面我们建立用户并指定其工作目录,再将用户密码设置完毕,如图4所示图4下面我们将更改文件夹的所有者和属组,当然权限也要改变一下,修改权限的命令是“chmod [选项] 参数文件夹名”,修改属主或属组的命令是“chown [选项] 属主/属组文件夹名”我们修改zuoye文件夹的所有者为admin是为了,让其管理所有文件夹,我们修改权限为775是为了只给所有者和属组有权修改此文件夹,将每个老师文件夹的属组修改为每个老师用户组是为了让每个老师只能对自己的文件夹进行修改,不能对其他老师的文件夹修改,如图5所示图5然后修改主配置文件,我们只需将下面这几行启用,编辑/etc/vsftpd/vsftpd.conf 这个文件,如图6所示,我们用的centos系统的主配置文件默认就开启了这几项功能,所以我们不用再开启,如果实验时主配置文件中没有开启这几行,你就要开启了,如果没有就自己写入到主配置文件,保存退出anonymous_enable=YESlocal_enable=YESwrite_enable=YES图6然后我们再去将FTP的默认工作路径改为/zuoye,编辑/etc/passwd文件,如图7所示,我们将默认的/var/ftp改为了/zuoye,保存退出图7 下面我们重启FTP服务,如图8所示图8然后我们到XP客户机测试一下,如图9-1,9-2所示,我们的匿名用户测试成功图9-1图9-2我们再测试管理员登录,是否有权限管理所有文件夹,如图10-1,10-2,10-3,10-4,所示,我们的超户管理员可以管理所有文件夹,拥有建立和删除的权限图10-1 图10-2图10-3图10-4然后我们测试,每个老师是不是只能管理自己的文件夹,我们只测试一个老师,我们用赵老师登录,如图11-1,11-2所示,我们的赵老师只能管理属组是自己的文件夹,不是自己的文件夹,,则没有权限管理,到此我们的实验全部完成,测试也成功图11-1图11-2总结:这种简单的FTP做的没有问题,可是要想把FTP学好,还要仔细研究,很多权限的分配和配置文件中的设置生效,都要自己一个一个去发现,加油!附加内容:对不同用户进行不同的配置vi /etc/vsftpd/vsftpd.confuser_config_dir=/etc/vsftpd_user_confanon_max_rate=100000local_max_rate=0mkdir /etc/vsftpd_user_confcd /etc/vsftpd_user_conftouch lizhangkang adminvi zhanglocal_max_rate=200000vi lilocal_max_rate=200000vikanglocal_max_rate=200000############################################# 或:对不同用户进行不同的配置vi /etc/vsftpd/vsftpd.confuser_config_dir=/etc/vsftpd_user_confanon_max_rate=100000local_max_rate=200000mkdir /etc/vsftpd_user_confcd /etc/vsftpd_user_conftouch adminvi adminlocal_max_rate=0############################################# 补充要求admin不受限制,li传输速率为300KB/Szhang传输速率为200KB/Skang传输速率为100KB/S匿名用户速率为50KB/S对不同用户进行不同的配置user_config_dir=/etc/vsftpd_user_confanon_max_rate=50000mkdir /etc/vsftpd_user_confcd /etc/vsftpd_user_conftouch adminvi adminlocal_max_rate=0touch zhangvi zhanglocal_max_rate=300000touch livi lilocal_max_rate=200000touch kangvi kanglocal_max_rate=100000,这部分内容这里就不在做实验演示了,自己下去将上面的要求做一下,每个要求下都有详细的步骤,所以不会的话可以参照一下,努力!。
linux ftp实验报告
linux ftp实验报告Linux FTP实验报告一、实验目的本次实验的目的是通过使用Linux系统自带的FTP工具,掌握FTP服务器的搭建和FTP客户端的使用方法,了解FTP协议的工作原理,以及掌握基本的文件传输操作。
二、实验环境本次实验使用的操作系统为Ubuntu 20.04 LTS,FTP服务器软件为vsftpd,FTP 客户端为命令行工具ftp。
三、实验步骤1. 安装vsftpd在终端中输入以下命令进行安装:```sudo apt updatesudo apt install vsftpd```2. 配置vsftpd编辑vsftpd的配置文件,可以使用以下命令打开配置文件进行编辑:```sudo nano /etc/vsftpd.conf```在配置文件中进行相关设置,如允许匿名登录、设置用户访问权限等。
3. 启动vsftpd配置完成后,使用以下命令启动vsftpd服务:```sudo systemctl start vsftpd```4. 使用ftp客户端连接FTP服务器在终端中输入以下命令连接FTP服务器:```ftp <服务器IP地址>```输入用户名和密码进行登录,成功登录后即可进行文件传输操作。
四、实验结果通过以上步骤,成功搭建了一个FTP服务器,并且使用ftp客户端进行了文件传输操作。
在实验中,我们还了解了FTP协议的工作原理,掌握了基本的文件传输操作方法。
五、实验总结通过本次实验,我们深入了解了Linux系统下FTP服务器的搭建和FTP客户端的使用方法,对FTP协议的工作原理有了更深入的理解。
同时,我们也发现了FTP在文件传输方面的便利性和高效性,对于文件的传输和共享有着重要的作用。
在今后的工作中,我们将进一步探索FTP在实际工作中的应用,并且不断提升自己的技能,为更好地使用FTP服务做好准备。
六、参考文献[1] Ubuntu Documentation: vsftpd[2] Linux man page: ftp。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
LINUX的FTP实验报告实验需求:为了实现文件传输,共享资源实验环境:一台centos和一台XP客户机实验步骤:首先打开centos再将安装光盘挂载上,输入命令“rpm -qa|grep vsftpd”查看是否有此软件,如果没有进入到光盘的挂载目录,然后输入命令“rpm -ivh vsftpd(然后使用补全)”,如图1所示,安装软件完成图1下面我们到配置文件中设置一下,输入命令“vi /etc/vsftpd/vsftpd.conf”就出现如图2所示,用末行模式加上行号图2我们将文件中的第27和31行启用,就是把前面的#删除即可,然后在31行下面写上“anon_other_write_enable=YES”这一行的意思是给匿名用户删除权限,第27行是给匿名用户上传权限,31行是给匿名用户创建、修改文件夹权限,如图3所示,修改完成后保存退出图3然后我们再到“/var/ftp/”下将pub文件夹的其它用户权限设为读、写、执行,输入命令“chmod o+w pub”如图4所示图4下面我们将两台虚拟机网段设置成3,将centos的IP设置为192.168.6.2 将XP的IP设置为192.168.6.3,如图5-1,5-2所示,都点击确定完成设置图5-1图5-2然后我们在XP上测试一下网络是否畅通,如图6所示网络畅通图6下面我们到centos上启动FTP服务,输入命令“service vsftpd restart”,,我们启动成功,下面我们到XP上测试,我们的设置是否生效,如图7所示,我们访问成功图7我们测试一下上传和删除功能,如图8-1,8-2所示,设置生效,我们实验成功图8-1图8-2总结:此次实验,让我学到FTP功能也是很强大的,如果不小心就会让其不能实验你想要的功能,我在删除文件夹的时候,因为忘记了文件夹有内容,所以怎么也删除不掉,后来将文件一删除就把问题解决了附加内容:解释一下配置文件中的选项意思,如图#vi /etc/vsftpd/vsftpd.conf允许匿名用户登录anonymous_enable=YES允许本地用户登录local_enable=YES开放本地用户的写权限write_enable=YES设置本地用户的文件掩码local_umask=022匿名用户上传文件anon_upload_enable=YES匿名用户创建文件夹权限anon_mkdir_write_enable=YES匿名用户删除权限anon_other_write_enable=YES切换目录时显示的消息dirmessage_enable=YES开启日志功能xferlog_enable=YES标准数据传输端口connect_from_port_20=YES上传文件时改变文件的所有者chown_uploads=YESchown_username=whoever日志文件的路径xferlog_file=/var/log/vsftpd.log使用标准的日志格式xferlog_std_format=YES会话超时600秒自动中断连接idle_session_timeout=600数据连接超时120秒中断连接data_connection_timeout=120设置客户端空闲时的自动中断和激活连接的时间accept_timeout=60connect_timeout=60限制客户并发连接数max_clients=200设置每客户的连接数max_per_ip=5设置传输速率local_max_rate=50000anon_max_rate=50000guest_max_rate=50000开启ASCII码上传、下载方式ascii_upload_enable=YESascii_download_enable=YESFTP欢迎信息ftpd_banner=Welcome to blah FTP service.设置chroot第一种:所有用户都锁定目录chroot_local_user=YES第二种:只有文件里的用户才会锁定目录chroot_local_user=NOchroot_list_enable=YESchroot_list_file=/etc/vsftpd.chroot_list限制本地用户的访问第一种:设置文件里的本地用户不能访问FTP服务器userlist_enable=YESuserlist_deny=YESuserlist_file=/etc/er_list第二种:设置只有文件里的本地用户才能访问FTP服务器userlist_enable=YESuserlist_deny=NOuserlist_file=/etc/er_list另外:/etc/vsftpd.ftpusers只要是这个文件里的用户都不能访问服务器vsftp服务器参数怎样配置#################用户登陆控制############## #接受匿名用户anonymous_enable=YES#匿名用户login时不询问口令no_anon_password=YES#匿名用户主目录anon_root=(none)#接受本地用户local_enable=YES#本地用户主目录local_root=(none)#如果匿名用户需要密码,那么使用banned_email_file里面的电子邮件地址的用户不能登录deny_email_enable=YES#仅在没有pam验证版本时有用,是否检查用户有一个有效的shell来登录check_shell=YES#若启用此选项,userlist_deny选项才被启动userlist_enable=YES#若为YES,则userlist_file中的用户将不能登录,为NO则只有userlist_file的用户可以登录userlist_deny=NO#如果和chroot_local_user一起开启,那么用户锁定的目录来自/etc/passwd每个用户指定的目录(这个不是很清楚,很哪位熟悉的指点一下)passwd_chroot_enable=NO#定义匿名登入的使用者名称。
默认值为ftp。
ftp_username=FTP#################用户权限控制################可以上传(全局控制).write_enable=YES#本地用户上传文件的umasklocal_umask=022#上传文件的权限配合umask使用#file_open_mode=0666#匿名用户可以上传anon_upload_enable=NO#匿名用户可以建目录anon_mkdir_write_enable=NO匿名用户其它的写权利(更改权限?)anon_other_write_enable=NO如果设为YES,匿名登入者会被允许下载可阅读的档案。
默认值为YES。
anon_world_readable_only=YES#如果开启,那么所有非匿名登陆的用户名都会被切换成guest_username指定的用户名#guest_enable=NO所有匿名上传的文件的所属用户将会被更改成chown_usernamechown_uploads=YES匿名上传文件所属用户名chown_username=lightwiter#如果启动这项功能,则所有列在chroot_list_file之中的使用者不能更改根目录chroot_list_enable=YES#允许使用"async ABOR"命令,一般不用,容易出问题async_abor_enable=YES管控是否可用ASCII 模式上传。
默认值为NO。
ascii_upload_enable=YES#管控是否可用ASCII 模式下载。
默认值为NO。
ascii_download_enable=YES#这个选项必须指定一个空的数据夹且任何登入者都不能有写入的权限,当vsftpd不需要file system 的权限时,就会将使用者限制在此数据夹中。
默认值为/usr/share/emptysecure_chroot_dir=/usr/share/empty###################超时设置###################空闲连接超时idle_session_timeout=600#数据传输超时data_connection_timeout=120#PAVS请求超时ACCEPT_TIMEOUT=60#PROT模式连接超时connect_timeout=60################服务器功能选项################开启日记功能xferlog_enable=YES#使用标准格式xferlog_std_format=YES#当xferlog_std_format关闭且本选项开启时,记录所有ftp请求和回复,当调试比较有用.#log_ftp_protocol=NO#允许使用pasv模式pasv_enable=YES#关闭安全检查,小心呀.#pasv_promiscuous+NO#允许使用port模式#port_enable=YES#关闭安全检查#prot_promiscuous#开启tcp_wrappers支持tcp_wrappers=YES#定义PAM 所使用的名称,预设为vsftpd。
pam_service_name=vsftpd#当服务器运行于最底层时使用的用户名nopriv_user=nobody#使vsftpd在pasv命令回复时跳转到指定的IP地址.(服务器联接跳转?)pasv_address=(none)#################服务器性能选项###############是否能使用ls -R命令以防止浪费大量的服务器资源#ls_recurse_enable=YES#是否使用单进程模式#one_process_model#绑定到listen_port指定的端口,既然都绑定了也就是每时都开着的,就是那个什么standalone模式listen=YES#当使用者登入后使用ls -al 之类的指令查询该档案的管理权时,预设会出现拥有者的UID,而不是该档案拥有者的名称。
若是希望出现拥有者的名称,则将此功能开启。
text_userdb_names=NO#显示目录清单时是用本地时间还是GMT时间,可以通过mdtm命令来达到一样的效果use_localtime=NO#测试平台优化#use_sendfile=YES################信息类设置#################login时显示欢迎信息.如果设置了banner_file则此设置无效ftpd_banner=欢迎来到湖南三辰Fake-Ta FTP 网站.#允许为目录配置显示信息,显示每个目录下面的message_file文件的内容dirmessage_enable=YES#显示会话状态信息,关!#setproctitle_enable=YES############## 文件定义###################定义不能更改用户主目录的文件chroot_list_file=/etc/vsftpd/vsftpd.chroot_list#定义限制/允许用户登录的文件userlist_file=/etc/vsftpd/er_list#定义登录信息文件的位置banner_file=/etc/vsftpd/banner#禁止使用的匿名用户登陆时作为密码的电子邮件地址banned_email_file=/etc/vsftpd.banned_emails#日志文件位置xferlog_file=/var/log/vsftpd.log#目录信息文件message_file=.message############## 目录定义##################定义用户配置文件的目录user_config_dir=/etc/vsftpd/userconf#定义本地用户登陆的根目录,注意定义根目录可以是相对路径也可以是绝对路径.相对路径是针对用户家目录来说的.local_root=webdisk #此项设置每个用户登陆后其根目录为/home/username/webdisk#匿名用户登陆后的根目录anon_root=/var/ftp#############用户连接选项##################可接受的最大client数目max_clients=100#每个ip的最大client数目max_per_ip=5#使用标准的20端口来连接ftpconnect_from_port_20=YES#绑定到某个IP,其它IP不能访问listen_address=192.168.0.2#绑定到某个端口#listen_port=2121#数据传输端口#ftp_data_port=2020#pasv连接模式时可以使用port 范围的上界,0 表示任意。