文件服务器之一:ftp服务器的搭建及配置详解(一)

服务器 struggling 1561次浏览 1个评论

FTP (File transfer protocol) 是相当古老的传输协议之一,他最主要的功能是在服务器与客户端之间进行档案的传输。 这个古老的协议使用的是明码传输方式,且过去有相当多的安全危机历史。为了更安全的使用 FTP 协议,我们主要介绍较为安全但功能较少的 vsftpd 这个软件。其服务器端的程序还有:proftpd(功能较丰富),pureftpd,filezilla等。
ftp服务器的连接端口在tcp/21端口

<code>
[root@localhost ~]# cat  /etc/services  |grep  ftp
ftp-data        20/tcp
ftp-data        20/udp
# 21 is registered to ftp, but also used by fsp
ftp             21/tcp
ftp             21/udp          fsp fspd
</code>

其有两种连接形式:

1.命令连接:一直在线,控制连接,21/tcp

2.数据连接:按需打开,

主动模式(服务器):20/tcp。

被动模式:端口随机,大于5000的端口,使用防火墙的连接追踪功能。

主动模式和被动模式的不同简单概述为: 主动模式传送数据时是“服务器”连接到“客户端”的端口;被动模式传送数据是“客户端”连接到“服务器”的端口。

主动模式需要客户端必须开放端口给服务器,很多客户端都是在防火墙内,开放端口给FTP服务器访问比较困难。

被动模式只需要服务器端开放端口给客户端连接就行了。

ftp服务的数据存储也有两种形式:文本形式和二进制形式。

ftp上传及下载支持三种用户,但在执行过程中系统都会转换。
匿名用户 –>系统用户:anonymous_enable
系统用户–> local_enable
虚拟用户–>系统用户

ftp通常主动模式和被动模式都启用,但是具体工作在哪种模式下取决于客户端,一般客户端请求使用的是被动模式,服务器端以一个大于1024的随机端口进行响应。

<code>

下面开始安装,以centos6.x为例:

[root@localhost vsftpd]# yum install vsftpd      
[root@localhost vsftpd]# rpm -ql  vsftpd                     #查看其生成的目录
/etc/logrotate.d/vsftpd
/etc/pam.d/vsftpd                           
/etc/rc.d/init.d/vsftpd                 #服务脚本
/etc/vsftpd                                  #配置文件目录
/etc/vsftpd/ftpusers         
/etc/vsftpd/user_list
/etc/vsftpd/vsftpd.conf
/etc/vsftpd/vsftpd_conf_migrate.sh
/usr/sbin/vsftpd                          #主程序
。。。。。
。。。。。
/var/ftp                                        #家目录
/var/ftp/pub
[root@localhost ~]# getenforce 
Enforcing
[root@localhost ~]# setenforce 0                     #关闭selinux
[root@localhost ~]# getenforce                      
Permissive
[root@localhost vsftpd]# service vsftpd start
Starting vsftpd for vsftpd:                                [  OK  ]
[root@localhost vsftpd]# chkconfig vsftpd on
[root@localhost vsftpd]# ftp  192.168.0.129
Connected to 192.168.0.129 (192.168.0.129).
220 (vsFTPd 2.2.2)
Name (192.168.0.129:root): ftp                   #使用系统用户登录
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls
227 Entering Passive Mode (192,168,0,129,165,18).
150 Here comes the directory listing.
drwxr-xr-x    2 0        0            4096 Apr 12 06:09 pub
drwxrwxr-x    3 0        0            4096 Apr 12 05:28 test
226 Directory send OK.
ftp> cd test
250 Directory successfully changed.
ftp> ls
227 Entering Passive Mode (192,168,0,129,92,212).
150 Here comes the directory listing.
-rw-------    1 14       50            805 Apr 12 05:28 fstab
-rw-------    1 14       50            884 Apr 12 05:14 inittab
drwx------    2 14       50           4096 Apr 12 05:13 test1
226 Directory send OK.
ftp> quit
221 Goodbye.

下面详细解释下其配置文件/etc/vsftpd/vsftpd.conf
# Example config file /etc/vsftpd/vsftpd.conf
#
# The default compiled in settings are fairly paranoid. This sample file
# loosens things up a bit, to make the ftp daemon more usable.
# Please see vsftpd.conf.5 for all compiled in defaults.
#
# READ THIS: This example file is NOT an exhaustive list of vsftpd options.
# Please read the vsftpd.conf.5 manual page to get a full idea of vsftpd's
# capabilities.
#
# Allow anonymous FTP? (Beware - allowed by default if you comment this out).
anonymous_enable=YES    
#允许匿名登录
#
# Uncomment this to allow local users to log in.
local_enable=YES
#
# Uncomment this to enable any form of FTP write command.
write_enable=YES
#
# Default umask for local users is 077. You may wish to change this to 022,
# if your users expect that (022 is used by most other ftpd's)
local_umask=022
#设置上传文件权限
#
# Uncomment this to allow the anonymous FTP user to upload files. This only
# has an effect if the above global write enable is activated. Also, you will
# obviously need to create a directory writable by the FTP user.
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_other_write_enable=YES
#是否允许匿名用户删除文件
#
# Activate directory messages - messages given to remote users when they
# go into a certain directory.
dirmessage_enable=YES
#用户进入目录是否显示欢迎信息
# The target log file can be vsftpd_log_file or xferlog_file.
# This depends on setting xferlog_std_format parameter
xferlog_enable=YES
#是否打开日志文件
# Make sure PORT transfer connections originate from port 20 (ftp-data).
connect_from_port_20=YES
#
# If you want, you can arrange for uploaded anonymous files to be owned by
# a different user. Note! Using "root" for uploaded files is not
# recommended!
#chown_uploads=YES   用户上传文件后是否允许修改文件的属组属主
#chown_username=whoever
#
# The name of log file when xferlog_enable=YES and xferlog_std_format=YES
# WARNING - changing this filename affects /etc/logrotate.d/vsftpd.log
xferlog_file=/var/log/vsftp.log
#启用日志文件
# Switches between logging into vsftpd_log_file and xferlog_file files.
# NO writes to vsftpd_log_file, YES to xferlog_file
xferlog_std_format=YES
#
# You may change the default value for timing out an idle session.
idle_session_timeout=600
#会话超过600秒就会断开连接
# You may change the default value for timing out a data connection.
#data_connection_timeout=120
#
# It is recommended that you define on your system a unique user which the
# ftp server can use as a totally isolated and unprivileged user.
#nopriv_user=ftpsecure
#
# Enable this and the server will recognise asynchronous ABOR requests. Not
# recommended for security (the code is non-trivial). Not enabling it,
# however, may confuse older FTP clients.
#async_abor_enable=YES
#
# By default the server will pretend to allow ASCII mode but in fact ignore
# the request. Turn on the below options to have the server actually do ASCII
# mangling on files when in ASCII mode.
# Beware that on some FTP servers, ASCII support allows a denial of service
# attack (DoS) via the command "SIZE /big/file" in ASCII mode. vsftpd
# predicted this attack and has always been safe, reporting the size of the
# raw file.
# ASCII mangling is a horrible feature of the protocol.
#ascii_upload_enable=YES
#ascii_download_enable=YES
#启用文本模式上传及下载,打开后默认使用文本模式
# You may fully customise the login banner string:
#ftpd_banner=Welcome to blah FTP service.
#
# You may specify a file of disallowed anonymous e-mail addresses. Apparently
# useful for combatting certain DoS attacks.
#deny_email_enable=YES
# (default follows)
#banned_email_file=/etc/vsftpd/banned_emails
#
# You may specify an explicit list of local users to chroot() to their home
# directory. If chroot_local_user is YES, then this list becomes a list of
# users to NOT chroot().
#chroot_local_user=YES
#使用此项会禁锢每一个用户
#chroot_list_enable=YES
#
# (default follows)
#chroot_list_file=/etc/vsftpd/chroot_list
#此选项与一起chroot_local_user=YES使用,启用禁锢用户模式,使其不能进入其他目录,只能在用户的家目录中操作,但必须将用户加入到chroot中 
# You may activate the "-R" option to the builtin ls. This is disabled by
# default to avoid remote users being able to cause excessive I/O on large
# sites. However, some broken FTP clients such as "ncftp" and "mirror" assume
# the presence of the "-R" option, so there is a strong case for enabling it.
#ls_recurse_enable=YES
#
# When "listen" directive is enabled, vsftpd runs in standalone mode and
# listens on IPv4 sockets. This directive cannot be used in conjunction
# with the listen_ipv6 directive.
listen=YES
#是否工作为独立守护进程,要定义为瞬时则需在/etc/vsftp/下定义一个脚本
# This directive enables listening on IPv6 sockets. To listen on IPv4 and IPv6
# sockets, you must run two copies of vsftpd with two configuration files.
# Make sure, that one of the listen options is commented !!
#listen_ipv6=YES

pam_service_name=vsftpd
#使用pam认证 的,在ftpusers中的所有用户都不允许直接登录,文件传输的协议是明文的,防止被抓包(tcpdump)
userlist_enable=YES
#拒绝此列表中的用户使用ftp,注:开启userlist_enable=yes匿名帐号不能登陆
#userlist_deny=NO
#仅允许此列表中的用户登录ftp
tcp_wrappers=YES
max_clients=2  
# 一个用户最多登录数
max_per_ip=10  
# 用户最多请求次数
banner_file=/path/file
#这个项目可以指定某个纯文本档作为使用者登入 vsftpd 服务器时所显示的欢迎字眼。同时,也能够放置一些让使用者知道本 FTP 服务器的目录架构!
guest_enable=YES (NO)
#若这个值设定为 YES 时,那么任何实体账号,均会被假设成为 guest 喔 (所以预设是不开放的)! 至于访客在 vsftpd 当中,预设会取得 ftp 这个使用者的相关权限。但可以透过 guest_username 来修改。
guest_username=ftp
#在 guest_enable=YES 时才会生效,指定访客的身份而已。
local_max_rate=1000000
实体用户的传输速度限制,单位为 bytes/second, 0 为不限制。

</code>
<code>
ftp简单用法:
ftp> <==最终登入的结果看起来是这样!  
ftp> help <==提供需要的指令说明,可以常参考!   
ftp> dir <==显示远程服务器的目录内容 (文件名列表)   
ftp> cd /pub <==变换目录到 /pub 当中   
ftp> get filename <==下载单一档案,档名为 filename   
ftp> mget filename* <==下载多个档案,可使用通配符 *   
ftp> put filename <==上传 filename 这个档案到服务器上   
ftp> delete file <==删除主机上的 file 这个档案  
ftp> mkdir dir <==建立 dir 这个目录  
ftp> lcd /home <==切换『本地端主机』的工作目录   
ftp> passive <==启动或关闭 passive 模式   
ftp> binary <==数据传输模式设定为 binary 格式   
ftp> bye <==结束 ftp 软件的使用


ftp还有其安全的通信方式:
	ftps:ftp+ssl/tls
	sftp:opensssh,subsystem,sftp(ssh)

</code>

这些在下一节介绍:文件服务器之一:ftp服务器的搭建及配置详解(二)



DevOps-田飞雨 》》转载请注明源地址
喜欢 (0)or分享 (0)
发表我的评论
取消评论
*

表情 贴图 加粗 链接 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
(1)个小伙伴在吐槽
  1. 好文章,内容观念明确.禁止此消息:nolinkok@163.com
    荷兰网2015-06-26 18:39 回复