Linux——基本命令介绍(6)
安装和卸载FTP服务器端及客户端
- 安装和卸载ftp服务器端
- 查看是否安装ftp服务器端
【rpm软件包管理】
rpm -q vsftpd #查看是否安装vsftpd软件包(也可用rpm -qa |grep vsftpd查看)
- 安装vsftpd软件包
- 查看光驱挂载情况,进入光驱挂载目录
- 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 #查看是否安装成功,显示文件名则表示安装成功
- 卸载软件包
rpm -e vsftpd #卸载软件包
【注意】若卸载时提示有关联文件,即存在依赖关系,则需要带上参数“--nodeps”,此时不考虑关联文件,仅卸载指定的软件:rpm --nodeps -e vsftpd
- 安装和卸载ftp客户端
- 查看是否安装ftp客户端
rpm -q ftp #查看是否安装ftp软件包
- 安装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 #查看是否安装成功,显示文件名则表示安装成功
- 配置ftp服务器端
- 与vsftpd服务器相关的文件和目录
- vsftpd.conf
该文件为vsftpd服务器的主配置文件,具体路径/etc/vsftpd/vsftpd.conf。
配置vsftpd服务器主要是通过对配置文件/etc/vsftpd /vsftpd.conf中选项的设定来实现,配置文件vsftpd.conf的内容非常单纯,每一行即为一项设定。若是空白行或是开头为“#”的一行,将会被忽略。对每一项的描述都是由代表该项的名称和值两部分组成,如:option=value,其中option代表要设定项的名称,value代表为该项所赋的值,设定时需注意等号两边不能加空格。简单地说其格式有如下规则:
·配置语句的语法规则形式为:“参数名称=参数值”。
·配置语句中除了参数值以外,所有选项都不区分大小写。
·可以使用“#”标注该行为注释信息。
vsftpd.conf 文件中可定义多个配置参数,常用的部分配置参数如下表所示:
参数名 |
说明 |
anonymous_enable |
设定是否允许匿名登入,默认值为YES |
local_enable |
设定是否允许本机使用者登入,默认值为YES |
local_umask |
设定本机登入者新增档案时的umask 数值,默认值为077 |
write_enable |
指定是否开放写权限,默认值为YES |
dirmessage_enable |
指定是否能浏览目录内的信息 |
Listen=YES/NO |
指定vsftpd 服务器的运行方式,默认为YES 以独立运作的方式运行 |
data_connection_timeout |
指定数据连接空闲多长时间(以秒为单位)后自动断开,默认值为300 |
idle_session_timeout |
指定用户会话空闲多次时间(以秒为单位)后自动断开,默认值为300 |
xferlog_enable |
指定是否启用日志功能,默认取值为YES |
xferlog_file |
指定日志文件所在的位置,默认取值为/var/log/vsftpd.log |
userlist_enable |
指定是否启用user_list 文件,默认取值为NO |
pam_service_name |
指定验证方式,默认取值为vsftpd |
tcp_wrapper |
指定是否启用防火墙 |
【注意】用vi编辑器打开vsftpd.conf文件,可以查看到其默认内容如下所示:
12:anonymous_enable=YES //允许匿名访问这是匿名服务器必需的 15:local_enable=YES 18:write_enable=YES 22:local_umask=022 35:dirmessage_enable=YES 38:xferlog_enable=YES 41:connect_from_port_20=YES 55:xferlog_std_format=YES 109:listen=YES 116:pam_service_name=vsftpd 117:userlist_enable=YES 118:tcp_wrappers=YES |
根据vsftpd服务器的默认设置,本地用户和匿名用户都可以登录。本地用户默认进入其个人主目录,并可以切换到其他有权访问的目录,还可以上传和下载文件。匿名用户只能下载/var/ftp目录下的文件。默认情况下/var/ftp没有任何文件。
- ftpusers
/etc/vsftpd/ftpusers用于指定不能访问vsftpd服务器的用户列表。此文件在格式上采用每个用户一行的形式,其包含的用户通常是Linux系统的超级用户和系统用户。
- user_list
同样处于/etc/vsftpd目录的user-list文件中也保留用户列表,其是否起效取决于vsftpd.conf文件中的userlist_enable和userlist_deny参数。
- vsftpd 服务器用户
一般情况下,用户必须经过身份验证才能登录vsftpd服务器,然后访问和传输FTP服务器上的资源。vsftpd服务器的用户主要可以分为两类:本地用户和匿名用户。
本地用户是vsftpd服务器上拥有账户的用户。本地用户输入自己的用户名和密码可以登录vsftpd服务器,并且直接进入该用户的主目录。
匿名用户是vsftpd 服务器上没有账号的用户。如果vsftpd服务器提供匿名访问功能,那么就可以输入匿名用户名(ftp或者anonymous),然后输入用户的E-mail地址作为密码进行登录。甚至不输入口令也可以登录。当匿名用户登录系统后,进入匿名FTP服务目录/var/ftp。
- 配置vsftpd服务器
- 允许和禁止匿名用户登录
- 允许匿名用户登录:将vsftpd.conf文件中的anonymous的值设置为YES;
- 禁止匿名用户登录:将vsftpd.conf文件中的anonymous的值设置为NO;
- 设置匿名用户的权限
匿名用户访问FTP 服务器在很多场合都会使用到,比如公共的资源等。默认情况下,匿名用户可以下载/var/ftp/目录下的所有文件,但是不能上传文件。vsftpd.conf 文件中有“write_enable=yes”设置语句存在的情况下,可增加匿名用户的写权限。
27:anon_upload_enable=yes //允许匿名用户上传文件 31:anon_mkdir_write_enable=yes //允许匿名用户创建目录 |
【例1】配置一台简单的ftp服务器,要求只允许匿名用户登录,匿名用户可以在/var/ftp/pub目录中新建目录、上传和下载文件。
- 配置vsftpd.conf 主配置文件,使其包括下列参数:
12:anonymous_enable=YES //允许匿名用户访问 15:local_enable= NO //禁止本地用户登录 18:write_enable= YES 27:anon_upload_enable=YES //允许匿名用户上传文件 31:anon_mkdir_write_enable=YES //允许匿名用户可以创建目录 41:connect_from_port_20=YES 109:listen=YES //独立的vsftpd 服务器 118:tcp_wrappers= YES |
- 修改/var/ftp/pub 目录的权限,允许其他用户写入文件
chmod 777 /var/ftp/pub
- 重新启动vsftpd 服务器
service vsftpd restart
- 按照上次课的方法设置网络,使虚拟机中的linux操作系统和实体机的windows操作系统可以相互通信(可以相互ping通)
- 测试,匿名登录ftp服务器
【方法一】测试本地ftp服务器(服务器IP:127.0.0.1,确保ftp服务器已经打开)
ftp 127.0.0.1 #使用匿名用户登录,用户名为anonymous,密码为空
pwd #查看当前目录
ls #查看目录中的内容
cd pub #切换到pub子目录
put /home/rjxy/x x #把本地/home/rjxy目录下的文件x上传到ftp的pub目录中,并命名为x(必须要命名,否则无法上传)
【方法二】测试远程ftp服务器(在实体机的Winxp或Win7系统中测试连接ftp服务器,假设服务器IP为192.168.1.100)
- 确保在Winxp或Win7中能ping通ftp服务器
- ftp 192.168.1.100 #在Winxp或Win7的命令提示符中输入该命令,连接ftp服务器
若出现未知错误号的提示,表示linux的iptables服务没有清空,需要先清空iptables,然后保存iptables即可。
【清空iptalbes】iptables –F
【保存iptables】service iptables save
- ftp 192.168.1.100 #再次连接ftp服务器,并用匿名用户anonymous登录
- 限定本地用户
vsftpd 服务器提供多种方法限制某些本地用户登录服务器。具体包括以下三种方法。
- 直接编辑/etc/vsftpd/ftpuser 文件,将禁止登录的用户名写入到ftpuser 文件。
- 直接编辑/etc/vsftpd/user_list 文件,将禁止登录的用户名写入到user_list 文件。同时vsftpd.conf文件应设置“userlist_enable=YES”和“userlist_deny=YES”语句,则user_list 文件中指定的用户不能访问FTP 服务器。
- 直接编辑/etc/vsftpd/user_list文件,将允许登录的用户名写入到user_list 文件。同时vsftpd.conf文件应设置“userlist_enable=YES”和“userlist_deny=NO”语句,则只允许user_list 文件中指定的用户访问FTP 服务器。如果某用户同时出现在user_list 和ftpuser 文件中,那么该用户将不被允许登录。这是因为vsftpd 总是先执行user_list 文件,再执行ftpuser 文件。
【例2】验证vsftpd.conf文件中userlist_enable和userlist_deny参数的值与user_list中用户登录状态的对应关系。(在本地测试,即测试127.0.0.1)
- 添加新用户test并设置密码
useradd test
passwd test
- 修改/etc/vsftpd/user_list,将用户test添加到该文件中
- 由于【例1】中修改了local_enable,所以要将该参数恢复为local_enable=YES
- 设置userlist_enable=YES(默认值),此时配置文件中没有userlist_deny参数,相当于其默认值为YES
vi /etc/vsftpd/vsftpd.conf
service vsftpd restart #重启vsftpd服务——修改配置文件后,必须重启服务,使配置文件生效
ftp 127.0.0.1 #test用户不能登录
- 设置userlist_enable=YES,添加userlist_deny=NO
vi /etc/vsftpd/vsftpd.conf
service vsftpd restart #重启vsftpd服务
ftp 127.0.0.1 #test用户可以登录——即user_list中的用户可以登录,不在user_list中的用户不能登录
- 设置userlist_enable=NO,userlist_deny=YES
vi /etc/vsftpd/vsftpd.conf
service vsftpd restart #重启vsftpd服务
ftp 127.0.0.1 #所有用户都可以登录,不论是否在user_list中
- 设置userlist_enable=NO,userlist_deny=NO
vi /etc/vsftpd/vsftpd.conf
service vsftpd restart #重启vsftpd服务
ftp 127.0.0.1 #所有用户都可以登录,不论是否在user_list中
【总结】userlist_enable和userlist_deny参数的值与user_list中用户登录状态的对应关系
userlist_enable=YES |
userlist_deny=YES |
user_list中的用户不能登录,其他用户可以登录 |
userlist_deny=NO |
user_list中的用户可以登录,其他用户不能登录 |
|
userlist_enable=NO |
userlist_deny=YES |
所有用户都可以登录 |
userlist_deny=NO |
- 允许root用户登录
- 将/etc/vsftpd/ftpuser和/etc/vsftpd/user_list文件中的root前面加“#”注释掉
- 测试用root用户连接ftp服务器,如果出现错误提示“500 OOPS:cannot change directory:/root”,说明selinux防火墙没有关闭,将selinux防火墙关闭即可。
- 将selinux防火墙关闭后,再次测试root用户登录
- 禁止切换到其他目录
在vsftpd服务器的默认设置里,本地用户可以切换到其主目录以外的其他目录进行浏览,并在权限允许的范围内进行上传和下载资料。这样的默认设置是不安全的,用户可以通过设置chroot相关参数,禁止用户切换到主目录以外的目录(注意:这里的主目录指需要通过local_root=/var/ftp设置的站点根目录,当用户不允许切换到其他目录时,有登录后ftp站点的根目录“/”是该ftp帐户的主目录,即local_root所设置的文件系统中/var/ftp目录。)。
- 设置所有的本地用户的主目录。需要在vsftpd.conf文件中添加“local_root=/var/ftp”配置语句。
- 根据下面的表格编辑vsftpd.conf,添加以下语句,指定只有/etc/vsftpd/chroot_list文件中的用户才不能切换到主目录以外的目录。
95:chroot_list_enable=XXX 96:chroot_local_user=XXX 98:chroot_list_file =/etc/vsftpd/chroot_list |
【总结】chroot_list_enable 和chroot_local_user参数的值与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相同,要求每个用户占一行。
【例3】配置一台ftp服务器,要求禁止test用户切换到其他目录,其他本地用户可以切换到其他目录,并在本地测试该服务器。
- 由于【例2】中修改了userlist_enable和userlist_deny,需要先把这两项恢复成默认设置,即userlist_enable=YES,userlist_deny=YES
- 由于【例2】中把test用户添加到了user_list文件中,需要先把该文件中的test删除
- vi /etc/vsftpd/vsftpd.conf #启用chroot_list_enable=YES和chroot_list_file=/etc/vsftpd/chroot_list
- touch /etc/vsftpd/chroot_list #创建chroot_list文件
- vi /etc/vsftpd/chroot_list #修改chroot_list文件,添加用户test
- service vsftpd restart
- ftp 127.0.0.1 #测试本地ftp服务器
- ftp服务器的启动与停止
- 启动
service vsftpd start
- 关闭
service vsftpd stop
- 重启
service vsftpd restart
- ftp客户端的使用
【常用命令】
open:打开ftp服务器
pwd:显示远程目录
ls:显示远程目录的内容
!cd:查看本地当前目录(!cd是winxp的命令,如果本地是linux,则用!pwd命令)
!dir:查看本地目录的内容(!dir是winxp的命令,如果本地是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”(注意,需要先在fedora中/home/rjxy目录下创建文件“a”)
!dir #查看当前目录有没有文件“aaa.txt”
- put c:\1.txt 2 #把本地c:\1.txt文件上传到ftp服务器当前目录,并改名为“2”(注意,需要现在c:\创建文件1.txt)
ls #查看ftp服务器当前目录是否有文件“2”
- bye #退出ftp服务器