【rpm软件包管理】
rpm -q vsftpd #查看是否安装vsftpd软件包(也可用rpm -qa |grep vsftpd查看)
① 查看光驱挂载情况,进入光驱挂载目录 mount -s
② 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
rpm -q ftp #查看是否安装ftp软件包
① 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 #查看是否安装成功,显示文件名则表示安装成功
该文件为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。要保证匿名用户能上传文件到该目录,还需要确认匿名用户对该目录具有相应的读写权限。
一般情况下,用户必须经过身份验证才能登录vsftpd服务器,然后访问和传输FTP服务器上的资源。vsftpd服务器的用户主要可以分为两类:本地用户和匿名用户。
本地用户是vsftpd服务器上拥有账户的用户。本地用户输入自己的用户名和密码可以登录vsftpd服务器,并且直接进入该用户的主目录。
匿名用户是vsftpd 服务器上没有账号的用户。如果vsftpd服务器提供匿名访问功能,那么就可以输入匿名用户名(ftp或者anonymous),然后输入相应的密码(ftp的密码是ftp,anonymous的密码为空)进行登录。当匿名用户登录系统后,进入匿名FTP服务目录/var/ftp。
/etc/vsftpd/ftpusers用于记录不能访问vsftpd服务器的用户列表。此文件在格式上采用每个用户一行的形式,它包含的用户通常是Linux系统的超级用户和系统用户。
/etc/vsftpd/user_list文件中也保留用户列表,但该文件中的用户能否访问vsftpd服务器还取决于vsftpd.conf文件中的userlist_enable和userlist_deny参数。
【注意】先备份配置文件再修改!
cp /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf.bak
① 允许匿名用户登录:将vsftpd.conf文件中的anonymous_enable的值设置为YES;
② 禁止匿名用户登录:将vsftpd.conf文件中的anonymous_enable的值设置为NO;
① 允许本地用户登录:将vsftpd.conf文件中的local_enable的值设置为YES;
② 禁止本地用户登录:将vsftpd.conf文件中的local_enable的值设置为NO;
默认情况下,匿名用户可以下载/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 主配置文件,使其包括下列参数:
⑤ 修改/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,密码为空
b) pwd #查看当前目录
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服务器
b) ftp 192.168.1.100 #在Windows的命令提示符中输入该命令,连接ftp服务器
若直接出现ftp提示符,未出现任何提示,表示没有连接到ftp服务器,因为linux的防火墙没有把ftp放行
需要在“系统”→“管理”→“防火墙”→“可信任的服务”中把“FTP”勾选上。
c) ftp 192.168.1.100 #再次连接ftp服务器,并用匿名用户anonymous登录
d) cd pub #切换到pub子目录
e) put c:\1.txt y #把本地c盘的1.txt文件上传到到ftp的pub目录中,并命名为y(必须要命名,否则无法上传)
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
15:local_enable= YES //允许本地用户登录
④ service vsftpd restart #重启vsftpd服务
ftp 127.0.0.1 #测试testfu用户不能登录,结果如图1所示
图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中的用户不能登录外,其他用户都可以登录
【总结】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 |
user_list文件无效 |
userlist_deny=NO |
原理: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防火墙关闭即可。
③ 将selinux防火墙关闭后,再次测试root用户登录
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配置文件中添加以下语句,并根据下面的表格编辑,指定相关用户允许/禁止切换到主目录以外的目录。
【总结】chroot_local_user和chroot_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服务器
service vsftpd restart
① chkconfig --list vsftpd //查看vsftpd服务的自动激活状态
② chkconfig --level 345 vsftpd on //在3级、4级和5级三个运行级别自动激活vsftpd服务
③ chkconfig --list vsftpd //再次查看vsftpd服务的自动激活状态
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服务器