JAVA之ftp的基本配置

1.  安装和卸载ftp服务器端

1)   查看是否安装ftp服务器端

【rpm软件包管理】

    rpm -q vsftpd           #查看是否安装vsftpd软件包(也可用rpm -qa |grep vsftpd查看)

2)   安装vsftpd软件包

①   查看光驱挂载情况,进入光驱挂载目录  mount -s

JAVA之ftp的基本配置_第1张图片

②   cd /media/RHEL_6.1\ I386\ Disc\ 1       #进入光驱(因为目录的名字中有空格,所以在空格前需要用“\”连接,也可以用tab键自动完成)


③   ls              #查看当前目录,可以找到Packages目录,所有的rpm软件包都在该目录下

④   cd Packages     #进入该目录

⑤   ls |grep vsftpd     查看vsftpd软件包的完整名称

⑥   rpm -ivh vsftpd-2.2.2-6.el6_0.1.i686.rpm   #用rpm命令安装vsftpd(用tab键自动完成)

⑦   rpm -q vsftpd               #查看是否安装成功,显示文件名则表示安装成功

JAVA之ftp的基本配置_第2张图片

JAVA之ftp的基本配置_第3张图片

3)   卸载软件包

rpm -e vsftpd               #卸载软件包

【注意】若卸载时提示有关联文件,即存在依赖关系,则需要带上参数“--nodeps”,此时不考虑关联文件,仅卸载指定的软件:rpm --nodeps -e vsftpd

2.  安装和卸载ftp客户端

1)   查看是否安装ftp客户端

    rpm -q ftp                  #查看是否安装ftp软件包

2)   安装vsftpd软件包

①   cd /media/RHEL_6.1\ I386\ Disc\ 1/Packages  #进入光驱的Packages目录

②   ls |grep ftp                            #查看ftp的完整名称

③   rpm -ivh ftp-0.17-51.1.el6.i686.rpm        #用rpm命令安装ftp

④   rpm -q ftp              #查看是否安装成功,显示文件名则表示安装成功

 

3:配置ftp服务器端

1.   vsftpd服务器基本知识

1)      vsftpd.conf

该文件为vsftpd服务器的主配置文件,具体路径/etc/vsftpd/vsftpd.conf。

配置vsftpd服务器主要是通过对配置文件/etc/vsftpd /vsftpd.conf中选项的设定来实现,配置文件vsftpd.conf的内容非常单纯,每一行即为一项设定。若是空白行或是开头为“#”的一行,将会被忽略。对每一项的描述都是由代表该项的名称和值两部分组成,如:option=value,其中option代表要设定项的名称,value代表为该项所赋的值,设定时需注意等号两边不能加空格。简单地说其格式有如下规则:

l 配置语句的语法规则形式为:参数名称=参数值;

l 配置语句中除了参数值以外,所有选项都不区分大小写;

l 可以使用“#”标注该行为注释信息。

vsftpd.conf 文件中可定义多个配置参数,常用的部分配置参数如下表所示:

参数名

说明

anonymous_enable

设定是否允许匿名登入,默认值为YES

local_enable

设定是否允许本机的用户登入,默认值为YES;

write_enable

指定是否开放写权限,默认值为YES

local_umask

设定本机登入者新增档案时的umask 数值,默认值为022

dirmessage_enable

指定是否能浏览目录内的信息

userlist_enable

指定是否启用user_list 文件,默认取值为YES

用vim编辑器打开vsftpd.conf文件,可以查看到其默认内容如下所示:

根据vsftpd服务器的默认设置,本地用户和匿名用户都可以登录。

默认状态下,本地用户可以进入其宿主目录,并可以切换到其他有权访问的目录,还可以上传和下载文件

下载:匿名用户只能下载/var/ftp目录下的文件,默认情况下/var/ftp中没有任何文件;

上传:匿名用户默认的上传目录为/var/ftp/pub。要保证匿名用户能上传文件到该目录,还需要确认匿名用户对该目录具有相应的读写权限。

2)      vsftpd服务器用户

一般情况下,用户必须经过身份验证才能登录vsftpd服务器,然后访问和传输FTP服务器上的资源。vsftpd服务器的用户主要可以分为两类:本地用户和匿名用户。

本地用户是vsftpd服务器上拥有账户的用户。本地用户输入自己的用户名和密码可以登录vsftpd服务器,并且直接进入该用户的主目录。

匿名用户是vsftpd 服务器上没有账号的用户。如果vsftpd服务器提供匿名访问功能,那么就可以输入匿名用户名(ftp或者anonymous),然后输入相应的密码(ftp的密码是ftp,anonymous的密码为空)进行登录。当匿名用户登录系统后,进入匿名FTP服务目录/var/ftp。

3)      ftpusers

/etc/vsftpd/ftpusers用于记录不能访问vsftpd服务器的用户列表。此文件在格式上采用每个用户一行的形式,它包含的用户通常是Linux系统的超级用户和系统用户。

4)      user_list

/etc/vsftpd/user_list文件中也保留用户列表,但该文件中的用户能否访问vsftpd服务器还取决于vsftpd.conf文件中的userlist_enable和userlist_deny参数。

2.   配置vsftpd服务器

【注意】先备份配置文件再修改!

cp   /etc/vsftpd/vsftpd.conf   /etc/vsftpd/vsftpd.conf.bak

1)  允许和禁止匿名用户登录

①     允许匿名用户登录:将vsftpd.conf文件中的anonymous_enable的值设置为YES;

②     禁止匿名用户登录:将vsftpd.conf文件中的anonymous_enable的值设置为NO;

2)  允许和禁止本地用户登录

①      允许本地用户登录:将vsftpd.conf文件中的local_enable的值设置为YES;

②      禁止本地用户登录:将vsftpd.conf文件中的local_enable的值设置为NO;

3)  设置匿名用户的上传和下载权限

默认情况下,匿名用户可以下载/var/ftp/目录下的所有文件,但是不能上传文件。要增加匿名用户的写权限,必须保证vsftpd.conf文件中的以下语句有效:

  write_enable=yes;                                         #允许用户写

  anon_upload_enable=yes;                            #允许上传

  anon_mkdir_write_enable=yes                        #允许创建目录

【例1】配置一台简单的ftp服务器,要求只允许匿名用户登录,且匿名用户可以在/var/ftp/pub目录中新建目录、上传和下载文件。

①  按照 点击打开链接的方法设置网络,使虚拟机中的linux操作系统和实体机的windows操作系统可以相互通信(可以相互ping通)

②  关闭selinux防火墙

③  备份vsftpd.conf

cp  /etc/vsftpd/vsftpd.conf  /etc/vsftpd/vsftpd.conf.bak

④   配置vsftpd.conf 主配置文件,使其包括下列参数:

JAVA之ftp的基本配置_第4张图片

⑤   修改/var/ftp/pub 目录的权限,允许其匿名用户写入文件

chmod 777 /var/ftp/pub

⑥   重新启动vsftpd 服务器

service vsftpd restart

⑦   测试,匿名登录ftp服务器

【步骤一】测试本地ftp服务器(服务器IP:127.0.0.1,确保ftp服务器已经打开)

a)   ftp 127.0.0.1           #使用匿名用户登录,用户名为anonymous,密码为空

JAVA之ftp的基本配置_第5张图片

b)   pwd                 #查看当前目录

JAVA之ftp的基本配置_第6张图片

c)   ls                  #查看目录中的内容


d)   cd  pub             #切换到pub子目录

e)   put  /home/rjxy/x   x    #把本地/home/rjxy目录下的文件x上传到ftp的pub目录中,并命名为x(必须要命名,否则无法上传)


【步骤二】测试远程ftp服务器(在实体机的Windows系统中测试连接ftp服务器,假设服务器IP为192.168.1.100)

a)   确保在Windows中能ping通ftp服务器

JAVA之ftp的基本配置_第7张图片

b)   ftp 192.168.1.100       #在Windows的命令提示符中输入该命令,连接ftp服务器


若直接出现ftp提示符,未出现任何提示,表示没有连接到ftp服务器,因为linux的防火墙没有把ftp放行

需要在“系统”→“管理”→“防火墙”→“可信任的服务”中把“FTP”勾选上。

  JAVA之ftp的基本配置_第8张图片

c)   ftp 192.168.1.100       #再次连接ftp服务器,并用匿名用户anonymous登录

JAVA之ftp的基本配置_第9张图片

d)   cd  pub                 #切换到pub子目录

e)   put c:\1.txt  y    #把本地c盘的1.txt文件上传到到ftp的pub目录中,并命名为y(必须要命名,否则无法上传)

JAVA之ftp的基本配置_第10张图片

4)  限制本地用户

vsftpd服务器提供多种方法限制某些本地用户登录服务器。具体包括以下三种方法。

a)      直接编辑/etc/vsftpd/ftpusers 文件,将禁止登录的用户名写入到ftpusers 文件。

b)      直接编辑/etc/vsftpd/user_list 文件,将禁止登录的用户名写入到user_list 文件。同时vsftpd.conf文件中设置“userlist_enable=YES”和“userlist_deny=YES”语句,则user_list文件中的用户不能访问FTP 服务器,其他用户可以访问FTP服务器。

c)      直接编辑/etc/vsftpd/user_list文件,将允许登录的用户名写入到user_list 文件。同时vsftpd.conf文件中设置“userlist_enable=YES”和“userlist_deny=NO”语句,则只允许user_list文件中的用户访问FTP 服务器,其他用户不能访问FTP服务器。如果某用户同时出现在user_list ftpusers 文件中,那么该用户将不允许登录。这是因为vsftpd总是先执行user_list文件,再执行ftpusers文件。

【例2】验证ftpusers文件的功能(在本地测试,即测试127.0.0.1)。

①   添加新用户test并设置密码

useradd testfu

passwd testfu

②   修改/etc/vsftpd/ftpusers,将用户testfu添加到该文件中

③   由于【例1】中修改了local_enable,所以要将该参数恢复为local_enable=YES

                15local_enable= YES                                 //允许本地用户登录

④   service vsftpd restart          #重启vsftpd服务

      ftp 127.0.0.1                   #测试testfu用户不能登录,结果如图1所示

JAVA之ftp的基本配置_第11张图片

图1 ftpusers文件限制用户登录测试结果

【例3】验证vsftpd.conf文件中userlist_enable和userlist_deny参数的值与user_list中用户登录状态的对应关系(在本地测试,即测试127.0.0.1)。

①   添加新用户test并设置密码

useradd test

passwd test

②   修改/etc/vsftpd/user_list,将用户test添加到该文件中

【步骤一】测试userlist_enable=YES ,userlist_deny=YES的情况。修改vsftpd.conf,使其包含以下参数:


u 此时配置文件中没有userlist_deny参数,该参数不存在等同于将其设置为YES,也可以添加参数userlist_deny=YES

service vsftpd restart          #重启vsftpd服务

ftp 127.0.0.1                   #测试test用户不能登录,结果如图2所示

图2 user_list文件限制用户登录测试结果

【注意】对比图1和图2,可以发现ftpusers文件和user_list文件限制用户登录时的表现不同,ftpusers文件限制的用户允许输入密码,但总是提示密码错误(530 Login incorrect),而user_list文件限制的用户不允许输入密码,直接拒绝请求(530 Permission denied)。因此如果用户被禁止登录ftp服务器,可以从用户的登录信息确定该用户究竟是被ftpusers文件禁止还是user_list文件禁止。

【步骤二】测试userlist_enable=YES ,userlist_deny=NO的情况。修改vsftpd.conf,添加参数userlist_deny=NO

service vsftpdrestart          #重启vsftpd服务

ftp 127.0.0.1                   #test用户可以登录——即user_list中的用户可以登录,不在user_list中的用户不能登录

【步骤三】测试userlist_enable=NO ,userlist_deny=YES的情况。修改vsftpd.conf,使其包含以下参数:

service vsftpdrestart          #重启vsftpd服务

ftp 127.0.0.1                   #user_list失效,除了ftpusers中的用户不能登录外,其他用户都可以登录

【步骤四】测试userlist_enable=NO ,userlist_deny=NO的情况。修改vsftpd.conf,使其包含以下参数:

service vsftpdrestart          #重启vsftpd服务

ftp 127.0.0.1                   #user_list失效,除了ftpusers中的用户不能登录外,其他用户都可以登录

JAVA之ftp的基本配置_第12张图片

【总结】userlist_enableuserlist_deny参数的值与user_list中用户登录状态的对应关系

userlist_enable=YES

userlist_deny=YES

user_list中的用户不能登录,其他用户可以登录

userlist_deny=NO

user_list中的用户可以登录,其他用户不能登录

userlist_enable=NO

userlist_deny=YES

user_list文件无效

userlist_deny=NO

5)  允许root用户登录

原理:ftpusers和user_list两个文件都对root都放行。

【方法一】将/etc/vsftpd/ftpusers和/etc/vsftpd/user_list文件中的root前面加“#”注释掉;在vsftpd.conf配置文件中,设置userlist_enable=YES且userlist_deny=YES;

【方法二】将/etc/vsftpd/ftpusers文件中的root前面加“#”注释掉,保留/etc/vsftpd/user_list文件中的root;在vsftpd.conf配置文件中,设置userlist_enable=YES且userlist_deny=NO;

【方法三】将/etc/vsftpd/ftpusers文件中的root前面加“#”注释掉;在vsftpd.conf配置文件中,设置userlist_enable=NO;

①  上面3种方法根据题目其他要求选择合适的设置。

②  测试用root用户连接ftp服务器,如果出现错误提示“500 OOPS:cannot change directory:/root”,说明selinux防火墙没有关闭,将selinux防火墙关闭即可。

JAVA之ftp的基本配置_第13张图片

③  将selinux防火墙关闭后,再次测试root用户登录

JAVA之ftp的基本配置_第14张图片

6)  禁止切换到其他目录

ftp用户的主目录:匿名用户的默认主目录是“/var/ftp”;本地用户的默认主目录是其宿主目录;此外,本地用户也可以通过“local_root=/var/ftp”把主目录设置成指定的目录(此处为“/var/ftp”)。

在vsftpd服务器的默认设置里,本地用户可以切换到其主目录以外的其他目录进行浏览,并在权限允许的范围内进行上传和下载资料。显然,这样的默认设置是不安全的。用户可以通过设置chroot相关参数,禁止用户切换到主目录以外的其他目录。当用户不允许切换到其他目录时,登录ftp站点后运行“pwd”命令显示的是“/”,该“/”目录并不是系统的根目录,而是该ftp帐户的主目录。

a)      设置所有的本地用户的主目录。本地用户的默认主目录是其宿主目录,如果要把本地用户的主目录设置成指定的其他目录,可以在vsftpd.conf文件中添加“local_root=/var/ftp”配置语句(“/var/ftp”可以修改成其他目录)。

b)      在vsftpd.conf配置文件中添加以下语句,并根据下面的表格编辑,指定相关用户允许/禁止切换到主目录以外的目录。

JAVA之ftp的基本配置_第15张图片

【总结】chroot_local_userchroot_list_enable 参数的值与chroot_list中用户切换目录状态的对应关系

chroot_list_enable =YES

chroot_local_user =YES

chroot_list中列出的用户可切换到站点的其他目录,未在chroot_list中列出的用户不可以切换;

chroot_local_user =NO

chroot_list中列出的用户不可切换到站点的其他目录,未在chroot_list中列出的用户可以切换;

chroot_list_enable =NO

chroot_local_user

=YES

所有用户均不可切换到站点的其他目录;

chroot_local_user =NO

所有用户均可切换到站点的其他目录;

c) 在/etc目录下创建chroot_list文件,其文件格式同user_list,要求每个用户占一行;

d) 重启vsftpd服务。

【例3】配置一台ftp服务器,要求禁止test用户切换到其他目录,其他本地用户可以切换到其他目录,并在本地测试该服务器。

①     由于【例2】中修改了userlist_enable和userlist_deny,需要先把这两项恢复成默认设置,即userlist_enable=YES,userlist_deny=YES

②     由于【例2】中把test用户添加到了user_list文件中,需要先把该文件中的test删除

③     修改vsftpd.conf,使其包含以下参数:

④     touch  /etc/vsftpd/chroot_list                  #创建chroot_list文件

⑤     vim  /etc/vsftpd/chroot_list                    #修改chroot_list文件,添加用户test

⑥     service  vsftpd restart

⑦     ftp 127.0.0.1                                            #测试本地ftp服务器

JAVA之ftp的基本配置_第16张图片


3.   ftp服务器的启动与停止

1)   临时启动

service vsftpd restart


2)   永久启动(系统重启后自动激活服务:通过chkconfig命令)

①   chkconfig --list  vsftpd           //查看vsftpd服务的自动激活状态

JAVA之ftp的基本配置_第17张图片

②   chkconfig --level 345  vsftpd  on  //在3级、4级和5级三个运行级别自动激活vsftpd服务

③   chkconfig --list  vsftpd           //再次查看vsftpd服务的自动激活状态

JAVA之ftp的基本配置_第18张图片

4.   ftp客户端的使用

【常用命令】

    open:打开ftp服务器

    pwd:显示远程目录

    ls:显示远程目录的内容

    !cd:查看本地当前目录(!cd是Windows的命令,如果本地是linux,则用!pwd命令)

    !dir:查看本地目录的内容(!dir是Windows的命令,如果本地是linux,则用!ls命令)

    cd:改变远程主机目录

    lcd:改变本地主机目录

    get:下载文件

    put:上传文件

    quit/bye:退出登录

【例】

①   ftp 192.168.2.1     #在windows中登录ftp服务器(假设ftp服务器地址为192.168.2.1),使用用户rjxy登录

②   ls                  #查看远程目录

③   pwd                 #查看远程主机宿主目录

④   cd /home            #切换远程目录到/home

      pwd       #查看是否切换成功

⑤   !cd                 #查看本地目录

⑥   lcd c:\             #切换本地目录到c:\

        !cd                 #查看是否切换成功

⑦   mkdir ab            #创建目录ab,提示失败,因为当前在/home目录,而rjxy用户对此目录没有写权限

⑧   cd /home/rjxy       #切换远程目录到/home/rjxy

⑨   mkdir ab            #在当前目录下创建目录ab

⑩   get a aaa.txt   #把远程当前目录下的文件“a”复制到本地当前目录,并重命名为“aaa.txt”(注意,需要先在redhat    中/home/rjxy目录下创建文件“a”)

!dir                #查看当前目录有没有文件“aaa.txt”

⑪   put c:\1.txt 2      #把本地c:\1.txt文件上传到ftp服务器当前目录,并改名为“2”(注意,需要现在c:\创建文件1.txt)

       ls      #查看ftp服务器当前目录是否有文件“2”

⑫   bye           #退出ftp服务器


你可能感兴趣的:(Linux)