8.4.1 FTP概述
FTP协议定义了一个在远程计算机系统和本地计算机系统之间传输文件的一个标准。FTP位于OSI参考模型的应用层,并利用TCP协议在不同主机间提供可靠的数据传输服务
8.4.2 实例—设置FTP服务器
FTP服务器的主配置文件是vsftpd.conf,位于/etc/vsftpd目录下,对FTP服务器的配置其实就是对vsftpd.conf文件的修改。
另外,还有两个辅助配置文件:/etc/vsftpd/ftpusers和/etc/vsftpd/user_list。
/etc/vsftpd/ftpusers中指定了哪些用户不能访问FTP服务器。
/etc/vsftpd/user_list中指定的用户在userlist_enable=YES且userlist_deny=YES时不能访问FTP服务器。当userlist_enable=YES且userlist_deny=NO仅允许/etc/vsftpd/user_list中指定的用户访问FTP服务器。
实例8-15 认识FTP服务器的默认配置。
默认主配置文件/etc/vsftpd/vsftpd.conf中的主要语句及其说明见表8-16。
表8-16 默认主配置文件vsftpd.conf及其说明配置语句
功能
anonymous_enable=YES
允许匿名登录
local_enable=YES
允许本地用户登录
write_enable=YES
开放本地用户写的权限
local_umask=022
设置本地用户的文件生成掩码
dirmessage_enable=YES
当切换到目录时,显示该目录下的.message隐含文件
xferlog_enable=YES
激活上传与下载日志
connect_from_port_20=YES
开启FTP数据端口的连接请求
xferlog_std_format=YES
使用标准的ftpd xferlog格式
pam_service_name=vsftpd
设置PAM认证服务的配置文件名
userlist_enable=YES
激活vsftpd检查userlist_file指定的用户是否可以访问vsftpd服务器
listen=YES
使vsftpd服务器处于独立启动模式
tcp_wrappers=YES
使用tcp_wrappers作为主机访问控制方式
第1步:编辑/var/named/chroot/var/named/test.edu.cn.db文件按照8.2节介绍的方法,编辑test.edu.cn.db文件。在test.edu.cn域中添加一主机,域名为ftp.test.edu.cn。添加的A记录如下所示。保存该文件。
ftp IN A 222.11.22.11
第2步:启动服务器执行命令# service named start启动DNS服务器。
执行命令# service vsftpd start启动FTP服务器。
第3步:匿名访问FTP服务器使用FTP客户端连接本地FTP服务器,使用匿名FTP帐号(ftp)登录,如下所示。
[root@localhost vsftpd]# ftp ftp.test.edu.cn
Connected to ftp.test.edu.cn.
220 (vsFTPd 2.0.5)
530 Please login with USER and PASS.
530 Please login with USER and PASS.
KERBEROS_V4 rejected as an authentication type
Name (ftp.test.edu.cn:root),ftp //使用匿名FTP帐号(ftp)登录
331 Please specify the password.
Password,//密码为空
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> dir //执行dir命令,查看/vat/ftp目录下的内容
227 Entering Passive Mode (222,11,22,11,226,112)
150 Here comes the directory listing.
drwxr-xr-x 2 0 0 4096 May 24 04:07 pub
226 Directory send OK.
ftp> cd pub //进入/vat/ftp/pub目录
250 Directory successfully changed.
ftp> dir
227 Entering Passive Mode (222,11,22,11,183,77)
150 Here comes the directory listing.
-rw-r--r-- 1 0 0 5 May 24 04:07 file1.txt
226 Directory send OK.
ftp> get file1.txt //下载/vat/ftp/pub/file1.txt文件到/etc/vsftpd目录
local,file1.txt remote,file1.txt
227 Entering Passive Mode (222,11,22,11,190,206)
150 Opening BINARY mode data connection for file1.txt (5 bytes).
226 File send OK.
5 bytes received in 0.00014 seconds (36 Kbytes/s)
ftp> mkdir dir1 //创建目录失败,因为没有该权限
550 Permission denied.
ftp> quit //退出
221 Goodbye.
[root@localhost vsftpd]#
实例8-16 使匿名用户能够上传文件第1步:修改/etc/vsftpd/vsftpd.conf文件如下所示,有两个配置选项前面有“#”号,将其删除。
#anon_upload_enable=YES
anon_upload_enable=YES //允许匿名用户上传文件
#
# Uncomment this if you want the anonymous FTP user to be able to create
# new directories.
#anon_mkdir_write_enable=YES
anon_mkdir_write_enable=YES //开启匿名用户的写和创建目录的权限
第2步:创建上传目录如下所示,在/var/ftp目录下创建上传目录upload,并且修改该目录的权限,使其他用户可写。
[root@localhost ~]# mkdir /var/ftp/upload
[root@localhost ~]# chmod o+w /var/ftp/upload/
第3步:重启FTP服务器执行命令# service vsftpd restart重启FTP服务器。
第4步:设置SELinux
进行如图8-39所示的设置。

图8-39 设置SELinux
第5步:修改目录upload的SELinux属性执行的命令如下所示。
[root@localhost ~]# ls -lZ /var/ftp/
drwxr-xr-x root root system_u:object_r:public_content_t pub
drwxr-xrwx root root root:object_r:public_content_t upload
[root@localhost ~]# chcon -R -t public_content_rw_t /var/ftp/upload/ //修改目录upload的SELinux属性
[root@localhost ~]#
第6步:重启FTP服务器执行命令# service vsftpd restart重启FTP服务器。
第7步:匿名访问FTP服务器使用FTP客户端连接本地FTP服务器,使用匿名FTP帐号(ftp)登录,如下所示。
[root@localhost ~]# ftp ftp.test.edu.cn
Connected to ftp.test.edu.cn.
220 (vsFTPd 2.0.5)
530 Please login with USER and PASS.
530 Please login with USER and PASS.
KERBEROS_V4 rejected as an authentication type
Name (ftp.test.edu.cn:root),ftp //使用匿名FTP帐号(ftp)登录
331 Please specify the password.
Password,//密码为空
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> dir //执行dir命令,查看/vat/ftp目录下的内容
227 Entering Passive Mode (222,11,22,11,214,211)
150 Here comes the directory listing.
drwxr-xr-x 2 0 0 4096 May 24 04:07 pub
drwxr-xrwx 2 0 0 4096 May 24 07:37 upload
226 Directory send OK.
ftp> cd upload //进入/vat/ftp/upload目录
250 Directory successfully changed.
ftp> !pwd //执行Shell命令,显示当前路径
/root
ftp> !dir //执行Shell命令,显示当前目录的内容
anaconda-ks.cfg Desktop install.log.syslog sh_script txtfile
CentOS-Base.repo install.log scsrun.log temp yum-3.0.5-1.el5.centos.5.noarch.rpm
ftp> put install.log //将本地文件install.log上传到FTP服务器
local,install.log remote,install.log
227 Entering Passive Mode (222,11,22,11,173,250)
150 Ok to send data.
226 File receive OK.
36994 bytes sent in 0.013 seconds (2.8e+03 Kbytes/s)
ftp> dir //上传成功
227 Entering Passive Mode (222,11,22,11,211,1)
150 Here comes the directory listing.
-rw------- 1 14 50 36994 May 24 07:48 install.log
226 Directory send OK.
ftp> mkdir dir1 //创建目录成功
257 "/upload/dir1" created
ftp> quit //退出
221 Goodbye.
FTP信息代码及其含义见附录2表2-1。
FTP使用的内部命令及其功能见附录2表2-2。
实例8-17 配置基于本地用户的访问控制配置基于本地用户的访问控制,可以通过修改vsftpd.conf文件来实现。该文件中要有以下三条语句:
userlist_enable=YES
userlist_deny=NO
userlist_file=/etc/vsftpd/user_list
他们的功能是,使得/etc/vsftpd/user_list文件中指定的本地用户,可以访问FTP服务器,而其他本地用户不能访问FTP服务器。若将userlist_deny进行如此赋值:userlist_deny=YES,则使得/etc/vsftpd/user_list文件中指定的本地用户,不能访问FTP服务器,而其他本地用户可以访问FTP服务器。