鸟哥的服务器《十二》ftp服务器

1. FTP 服务的连接模式

主动模式FTP
FTP 客户端随机开启一个大于 1024 的端口 N (1025) ,并和服务器的 21 号端口建立连接,然后开放 N+1(1026) 号端口进行监听,同时向服务器发出 PORT 1026 命令(PORT 命令包括客户端用什么端口接收数据)。服务器端在传送数据的时候,通过自己的 TCP 20 端口发送数据,因此 FTP 必须和客户端建立一个新的连接用于数据传输

客户端-->服务器:源1025(N),目的21,PORT 1026(N+1)
服务器-->客户端:源21,目的1025(N)
服务器-->客户端:源20,目的1026(N+1)
客户端-->服务器:源1026(N+1),目的20

被动模式
FTP 客户端随机打开一个大于 1024 的端口N(1025)向服务器的 21 号端口发起连接,同时会开启 N+1 号端口(1026),然后向服务器发送 PASV 命令,通知服务器处于被动模式。服务器收到命令后,开放一个大于 1024 的端口P(1521) 进行监听,然后用 PORT P 命令通知客户端,自己的数据端口是 1521 。客户端收到命令后,通过 1026 号端口连接服务器的端口 1521.然后在两个端口之间进行数据传输

客户端-->服务器:源1025(N),目的21,PASV
服务器-->客户端:源21,目的1025(N),PORT 1521
客户端-->服务器:源1026(N+1),目的1521
服务器-->客户端:源1521,目的1026(N+1)

主动模式的 FTP 是服务器主动连接客户端的数据端口,被动模式的 FTP 是服务器被动等待客户端连接自己的数据端口。多数防火墙都不允许接受外部发起的连接,所以 FTP 的主动模式通过防火墙通常会受到限制。FTP 的被动模式通常用于防火墙后的 FTP 客户访问外界 FTP 服务器。因此,如果有防火墙,最好是采用被动模式,但是如果对安全的需求很高,还是建议采用主动模式较好。

2. 几种流行的 FTP 服务器软件

Wu-ftpd
Proftpd
vsFTPd
PureFTPd
Serv-U

3. 安装 vsFTPd 服务

```
# 查看是否安装
[root@CentOS ~]# rpm -q vsftpd
vsftpd-2.2.2-6.el6.x86_64

# 服务的启动与关闭
[root@CentOS ~]# service vsftpd start
Starting vsftpd for vsftpd:                                [  OK  ]
或者
[root@CentOS ~]# /etc/init.d/vsftpd start
Starting vsftpd for vsftpd:                                [  OK  ]

# 重新启动 vsFTPd 服务 
[root@CentOS ~]# service vsftpd restart
Shutting down vsftpd:                                      [  OK  ]
Starting vsftpd for vsftpd:                                [  OK  ]
或者
[root@CentOS ~]# /etc/init.d/vsftpd restart
Shutting down vsftpd:                                      [  OK  ]
Starting vsftpd for vsftpd:                                [  OK  ]
或者(只适合vsFTPd是运行状态的情况)
[root@CentOS ~]# /etc/rc.d/init.d/vsftpd condrestart
Shutting down vsftpd:                                      [  OK  ]
Starting vsftpd for vsftpd:                                [  OK  ]

# 停止vsFTPd 服务
[root@CentOS ~]# service vsftpd stop
Shutting down vsftpd:                                      [  OK  ]
或者
[root@CentOS ~]# /etc/init.d/vsftpd stop
Shutting down vsftpd:                                      [  OK  ]

# 自动启动 vsFTPd 服务 
[root@CentOS ~]# ntsysv #图形化设置窗口

```

4. vsFTPd 的相关配置文件

该服务的配置文件有多个,包括主配置文件 /etc/vsftpd/vsftpd.conf ,以及加强 vsFTPd 服务器用户认证的 /etc/pam.d/vsftpd 文件等。

  • /etc/pam.d/vsftpd 用来加强用户认证
  • /etc/vsftpd.ftpusers 所有位于此文件的用户都不能访问 vsFTPd 服务
  • /etc/csftpd.user_list 用户是否有权限访问 vsFTPd 服务
  • /var/ftp 提供文件的集散地,包括一个 pub 子目录

5. 配置匿名用户登录环境

在 vsFTPd 的配置文件 vsftpd.conf 中 默认有一下语句 anonymous_enable=YES 表明 vsFTPd 服务时允许匿名访问的

[root@CentOS ~]# vim /etc/vsftpd/vsftpd.conf 
# 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
#
# Activate directory messages - messages given to remote users when they
# go into a certain directory.
dirmessage_enable=YES
#
# Activate logging of uploads/downloads.
xferlog_enable=YES
#
# Make sure PORT transfer connections originate from port 20 (ftp-data).
connect_from_port_20=YES

6. 相关配置参数

  • 设置监听地址

    配置文件中默认只有是否监听的参数,没有关于监听地址的配置参数。

    listen_address=ip address

    独立模式(standalone)下有效。对于多地址主机,不设置此参数,即将监听所有 IP 地址,默认值为无

  • 控制端口

    独立模式(standalone)下有效。默认值为 21

    listen_port=port_value

  • FTP 模式与数据端口

    主动模式有 FTP 服务器指定数据传输所使用的的端口,默认值为 20;被动模式由客户端决定数据传输的端口。在 vsftpd.conf 配置文件中,也可以针对主动模式和被动模式对 vsFTPd 服务器进行配置

    主动模式参数相关说明
    port_enable=YES/NO如果在数据连接时取消主动模式时设此项为no,默认值为yes
    connect_from_port_20=YES/NO控制以主动模式进行数据传输时是否使用 20 端口(FTP-DATA)。YES使用,NO不使用,默认为NO。
    ftp_data_port=port number设定 FTP 数据传输端口(FTP-DATA)值,默认值为20.此参数用于主动模式
    port_promiscuous=YES/NO默认值为NO。如果为YES,取消主动安全检查,该检查确保外出的数据只能连接到客户端上
    被动模式参数相关说明
    pasv_enable=ES/NO设定在被动模式下,建立数据传输使用 port 范围的下界和上界。0表示任意,默认值为0.
    pasv_promiscuous=YES/NO此选项被激活时,将关闭被动模式的安全检查,该检查确保数据连接和控制链接是否来自同一个 IP
    pasv_address= IP address此选项为一个数字 IP 地址,作为被动命令的响应,即地址是从呼入的连接套接字中获取的
  • ASCII模式

    默认情况下,vsFTPd 是禁止使用 ASCII 传输模式的

    ascii_download_enable=YES/NO 控制是否使用 ASCII 模式下载文件,默认NO
    ascii_upload_enable=YES/NO 控制是否使用 ASCII 模式上传文件,默认NO

  • 超时选项

    放置客户端无限制时间地连接在 FTP 服务器上

    idle_session_timeout 空闲会话超时断线,默认值300s
    data_connection_timeout 定义数据在传输过程中被阻塞的最长时间,默认值300s
    accept_timeout 接受建立连接的超时设定 ,默认60s
    connetc_timeout 响应主动模式的数据连接的超时设定 默认60s

  • 负载控制

    设置负载控制参数相关说明
    max_clients=numberical value此参数在vsFTPd 使用独立模式下有效。定义了 FTP 服务器最大的并发连接数。默认为0,表示不限制
    max_per_ip=numberical value此参数在vsFTPd 使用独立模式下有效。定义了每个 IP 地址最大的并发连接数。默认为0,表示不限制
    anon_max_rate=value设定匿名用户的最大数据传输速度 value ,默认值无
    local_max_rate=value设定本地用户的最大传输速度 value ,默认值无。此选项对所有的用户都生效,还可以在用户个人配置文件中使用此选项,以指定特定用户可获得的最大传输速度。
  • 用户设置

    匿名用户配置参数相关说明
    anonymous_enable控制是否允许匿名用户登录 ,默认值为 yes
    no_anon_password控制匿名用户登入时是否需要密码,默认NO
    ftp_username指定匿名用户与本地账号相对应,该用户的家目录即为匿名用户访问 FTP 服务器时的家目录。默认值为ftp
    banned_email_file当匿名用户使用 banned_email_file 文件中所列出的 用 email 进行登录时将被拒绝,这对于阻击某些 Dos 攻击有效。默认文件 /etc/vsftpd.banned_emails
    anon_root设定匿名用户的根目录,即匿名用户登入后,被定位到此目录下。默认 /var/ftp
    anon_upload_enable控制是否允许匿名用户上传文件
    anon_mkdir_write_enable控制是否允许匿名用户创建新目录
    anon_world_readable_only控制是否允许匿名用户下载可阅读文档
    anon_other_write_enable控制匿名用户是否拥有除了上传和新建目录之外的其它权限
    chown_uploads是否修改匿名用户上传文件的所有权
    chown_username指定拥有匿名用户上传文件所有权的用户
    本地用户配置参数相关说明
    local_enable是否允许本地用户登录
    chroot_local_user当设置为yes时,本地用户只能访问到家目录,不能切换到家目录之外
    chroot_list_enable当设置为yes时,表示本地用户也有例外,可以切换到家目录之外
    chmod_enable当设置yes时,以本地用户登录的客户端可以通过 SITE CHMOD 指令来修改文件权限
    local_umask设置文件创建 的掩码,默认值022
    locao_root指定本地用户登录 vsFTPd 服务器时切换到的目录,没有设置默认值
    虚拟用户配置参数相关说明
    guest_enable当设置为yes时,所有非匿名用户都被映射为一个特定的本地用户。该用户通过 guest_username 指令指定,默认值为 no
    guest_enable设置虚拟用户映射到本地用户,默认值为 ftp
  • 用户登录控制

    登录控制选项参数相关说明
    banner_file客户端登录 vsFTPd 服务器后,服务器显示在客户端的信息被保存在 banner_file 指定的文本文件中
    cmds_allowd设置客户端登录 vsFTPd 服务器后客户端可以执行的指令集合。
    ftpd_banner设置客户端登录 vsFTPd 服务器后客户端显示的欢迎或者其他相关信息
    userlist_enable此项被激活后, vsFTPd 将读取 userlist_file 参数所指定的文件中的用户列表,vsFTPd查到用户名在列表,vsFTPd就直接禁止该以后
    userlist_deny决定是禁止还是由 userlist_file 指定文件中的用户登录 FTP 范玮琪,此选项在 userlist_fenable 选项启动后才生效。设置为no,只允许文件中的用户登录 FTP 服务器 ,设置为yes,禁止文件中的用户登录,同时也不向这些用户发出输入口令的提示
    cp_wrappers在 vsFTPd 中使用 TCP_Wrappers 远程访问控制机制,默认值yes
  • 目录访问控制

    目录访问控制选项参数相关说明
    hide_ids隐藏文件的所有者和组信息,匿名用户看到的文件所有者和组全部变成 FTP
    message_file用于指定目录切换时显示hide信息所在的文件,默认值.mwssage
    force_dot_ fiels设置是否显示”.”开头的文件,默认不显示
    dirmessage_enable设置当前用户切换到一个目录时,是否显示目录切换信息,设置yes,显示 message_file 指定文件中的信息
    dirlist_enable设置是否允许用户列目录,默认值为 yes,允许列目录
  • 文件操作控制

    vsFTPd控制上传和下载的参数相关说明
    download_enable设置是否允许下载
    chown_username设置匿名用户上传的文件的拥有者,默认值 root
    chown_uploads当设置为 yes 时,所有匿名用户上传的文件,其拥有这被设置为 chown_username 指定指定的用户
    write_enable当设置为 yes 时,FTP 客户端登录后允许使用 DELE(上传文件)、RNFR(重命名)和STOR(断点续传) 指令
  • 新增文件权限设置

    新增文件权限设置vsFTPd可以记录服务器的工作状态,包括客户端的上传下载操作等
    log_ftp_protocol是否记录所有的 FTP 命令信息。默认 no
    dual_log_enable如果启用则生成两个相似的日志文件,分别为 /var/log/xferlog 和 /var/log/vsftpd.log。前者是Wu-ftpd 类型的传输日志,可以用于标志攻击分析,后者是vsFTPd类型的日志。默认值no
    syslog_enable设置为yes时将本来记录在 /var/log/vsftpd.log 的信息传给syslogd daemon,由syslod 的配置文件决定存储位置。
  • 日志设置

    日志设置
    xferlog_std_format启用后,传输日志文件将以标准 xferlog 的格式书写,如同 Wu-ftpd 一样,此格式日志文件默认为 /var/log/xferlog,也可以通过 xferlog_file选项来设定
    xferlod_enagble启用则此选项将维护一个日志文件,用于详细记录上传和下载。

7. FTP 服务器的访问

  • 通过命令行方式访问
[root@CentOS ~]# lftp 192.168.1.132
lftp 192.168.1.132:~> lcd
lcd ok, local cwd=/root
lftp 192.168.1.132:~> 
  • 使用浏览器访问

ftp://192.168.100.120

  • 使用 windows 命令行窗口
C:\Users\John>ftp 192.168.1.120
连接到 192.168.1.120220 (vsFTPd 2.2.2)
用户(192.168.1.120:(none)): anonymous
331 Please specify the password.
密码: # 密码anonymous
230 Login successful.
ftp> ls
200 PORT command successful. Consider using PASV.
150 Here comes the directory listing.
pub
226 Directory send OK.
ftp: 收到 5 字节,用时 0.005000.00千字节/秒。
ftp>

8. vsFTPd 启动的模式

# 利用 CentOS 提供的 scripts 来提供 vsFTPd (stand alone)
[root@CentOS ~]# /etc/init.d/vsftpd start
Starting vsftpd for vsftpd:                                [  OK  ]
[root@CentOS ~]# netstat -tulnp | grep 21
tcp        0      0 0.0.0.0:21                  0.0.0.0:*                   LISTEN      32461/vsftpd

# 自行设置 super daemon 来启动(有必要再进行,不用实作)
[root@CentOS ~]# vim /etc/vsftpd/vsftpd.conf 
listen=NO  #109行
[root@CentOS ~]# yum install xinetd
[root@CentOS ~]# vim /etc/xinetd.d/vsftpd
service ftp
        socket_type     = stream
        wait            = no
        user            = root
        server          = /usr/sbin/vsftpd
        log_on_success  += DURATION USERID
        log_on_failure  += USERID
        nice            = 10
        disable         = no

[root@CentOS ~]# /etc/init.d/vsftpd stop
[root@CentOS ~]# /etc/init.d/vsftpd restart
# 切记两者不可同时启动,否则发生错误,可以用 [root@CentOS ~]# chkconfig --list 检查一下这二者启动方式

9. CentOS 的vsFTPd 默认值

[root@CentOS ~]# cat /etc/vsftpd/vsftpd.conf 

# 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

# Activate directory messages - messages given to remote users when they go into a certain directory.
dirmessage_enable=YES

# Activate logging of uploads/downloads.
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

# You may override where the log file goes if you like. The default is shown below.
xferlog_file=/var/log/vsftpd.log

# If you want, you can have your log file in standard ftpd xferlog format. Note that the default log file location is /var/log/xferlog in this case.
xferlog_std_format=YES

# You may change the default value for timing out an idle session.
idle_session_timeout=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

# 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

# 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

# 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
userlist_enable=YES
tcp_wrappers=YES

因为 vsFTPd 使用 GMT 时间,所以在客户端使用 ftp 软件连接到 FTP 服务器时,会发现每个文件都慢了8小时,使用 use_localtime-YES

[root@CentOS ~]# vim /etc/vsftpd/vsftpd.conf
use_localtime=YES #最后一行加入
[root@CentOS ~]# /etc/init.d/vsftpd restart
[root@CentOS ~]# chkconfig vsftpd on

10. 针对实体账号的设定

希望使用本地时间取代 GMT 时间
用户登录时显示一些欢迎信息
系统账号不可登录本机(亦即 UID 小于 500 的账号)
一般实体用户可以上传、下载、建立目录及修改文件等操作
用户建立文件、目录的 umask 希望设置为 022
其它主机设置值保留默认值即可

# 建立主配置文件 vsftpd.conf ,这个配置文件已经包含主要设置值
[root@CentOS ~]# vim /etc/vsftpd/vsftpd.conf 
anonymous_enable=NO #取消匿名登录
local_enable=YES #实体用户可写入,umask为022
write_enable=YES
local_umask=022
userlist_enable=YES
userlist_deny=YES
userlist_file=/etc/vsftpd/user_list #这个文件必须存在,默认有此文件

use_localtime=YES
dirmessage_enable=YES
xferlog_enable
connect_from_port_20=YES=YES
xferlog_std_format=YES
listen=YES
pam_service_name=vsftpd
tcp_wrappers=YES
banner_file=/etc/vsftpd/welcome.txt #这个文件必须存在,手动建立
[root@CentOS ~]# /etc/init.d/xinetd restart
[root@CentOS ~]# /etc/init.d/vsftpd restart
# 建立欢迎信息
[root@CentOS ~]# vim /etc/vsftpd/welcome.txt
欢迎光临本小站,本站提供 FTP 的相关服务
主要的服务是针对实体用户提供的
若有任何问题, 请与本小站联系
# 一般实体用户可以上传、下载、建立目录及修改文件等操作    
# /etc/vsftpd/ftpusers:就是 /etc/vsftpd/vsftpd.conf这个文件所影响的
# /etc/vsftpd/user_list:由 vsftpd.conf 的user_list 所设置
# 这两个文件内容一样,并且这两个文件要存在,参考 /etc/passwd 将 UID 小于500的账号名称同时写到这两个文件,一行一个账号
[root@CentOS ~]# vim /etc/vsftpd/user_list 
root
bin
daemon
adm
lp
sync
shutdown
halt
mail
news
uucp
operator
games
nobody
[root@CentOS ~]# vim /etc/vsftpd/ftpusers 
root
bin
daemon
adm
lp
sync
shutdown
halt
mail
news
uucp
operator
games
nobody
# 测试结果
root用户受限制
匿名用户受限制
# 实体账号的设置(SELinux)
[root@CentOS ~]# getsebool -a | grep ftp
allow_ftpd_anon_write --> off
allow_ftpd_full_access --> off
allow_ftpd_use_cifs --> off
allow_ftpd_use_nfs --> off
ftp_home_dir --> off
ftpd_connect_db --> off
httpd_enable_ftp_server --> off
sftpd_anon_write --> off
sftpd_enable_homedirs --> off
sftpd_full_access --> off
sftpd_write_ssh_home --> off
tftp_anon_write --> off

# 对用户进行chroot
# 建议默认让实体用户全部被chroot,而允许不必chroot的账号才需要额外的设置
# 现在假设我系统里面仅有 vbird 与 dmtsai 两个账号不要被chroot,其他如 student、smb1 等账号统统默认是 chroot ,包括未来添加账号也是默认 chroot
[root@CentOS ~]# vim /etc/vsftpd/vsftpd.conf
chroot_local_user=YES
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list
# 建立不被 chroot 的用户列表,及时没有任何账号,文件也要存在
[root@CentOS ~]# vim /etc/vsftpd/chroot_list
vbird
dmstai
[root@CentOS ~]# /etc/init.d/vsftpd restart

# 限制实体用户的总下载流量
[root@CentOS ~]# vim /etc/vsftpd/vsftpd.conf 
local_max_rate=1000000 #单位 bytes/second
[root@CentOS ~]# /etc/init.d/vsftpd restart

# 限制最大同时上线人数与同一IP的FTP连接数
[root@CentOS ~]# vim /etc/vsftpd/vsftpd.conf
max_clients=10
max_per_ip=1
[root@CentOS ~]# /etc/init.d/vsftpd restart

# 建立严格的可使用 FTP 的账号列表
# 想只让某些人可是使用 FTP,也就是添加的用户木偶人不可使用 FTP 这个服务
[root@CentOS ~]# vim /etc/vsftpd/vsftpd.conf
userlist_enable=YES
userlist_deny=NO
userlist_file=/etc/vsftpd/user_list
[root@CentOS ~]# /etc/init.d/vsftpd restart
# 此时写入 /etc/vsftpd/user_list 变成可以使用 FTP 的账号了
# 开放 root 使用 FTP 传输文件
/etc/vsftpd/user_list 和 /etc/vsftpd/ftpusers 
 中注释掉 root 那一行

11. 仅有匿名登录的相关设置

使用本地时间而非 GMT 时间
提供欢迎学习,说明可提供下载的信息
仅开放 anonymous 的登录,且不需要输入密码
文件传输的限速为1M/s
数据连接的过程(不是命令通道)只要超过60秒没有响应,就强制Client断线
只要 anonymous 超过十分钟没有操作,就予以断线
最大同时上线人数限制为50人,且同一IP来源最大连接数为5人

# 默认的 FTP 匿名用户的根目录所在:ftp账号的用户主目录
[root@CentOS ~]# mkdir /var/ftp/linux
[root@CentOS ~]# mkdir /var/ftp/gnu
[root@CentOS ~]# vim /etc/vsftpd/vsftpd.conf 
anonymous_enable=YES
no_anon_password=YES
anon_max_rate=1000000
data_connection_timeout=60
idle_session_timeout=60
max_clients=50
max_per_ip=5

local_enable=NO

use_localtime=YES
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
listen=YES
pam_service_name=vsftpd
tcp_wrappers=YES
banner_file=/etc/vsftpd/anon_welcome.txt

[root@CentOS ~]# vim /etc/vsftpd/anon_welcome.txt
欢迎光临本小站所提供的 FTP 服务
主要目录:
linux 提供 Linux 操作系统相关软件
gnu   提供 GNU 的自由软件
uploads 提供匿名的上传数据

# 测试
[root@CentOS ~]# ftp localhost
Connected to localhost (127.0.0.1).
220-欢迎光临本小站所提供的 FTP 服务
220-主要目录:
220-linux 提供 Linux 操作系统相关软件
220-gnu   提供 GNU 的自由软件
220-uploads 提供匿名的上传数据
220 
Name (localhost:root): anonymous
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> bye
221 Goodbye.
# 让匿名用户可以上传/下载自己的资料(权限开放最大)
[root@CentOS ~]# vim /etc/vsftpd/vsftpd.conf 
write_enamble=YES
anon_other_write_enable=YES
anon_mkdir_write_enable=YES
anon_upload_enable=YES
# 让匿名用户上传数据到 /var/ftp/uploads
[root@CentOS ~]# mkdir /var/ftp/uploads
[root@CentOS ~]# chown ftp /var/ftp/uploads/
[root@CentOS ~]# setsebool -P allow_ftpd_anon_write=1
[root@CentOS ~]# setsebool -P allow_full_access=1
# 让匿名用户仅具有上传权限,不可下载匿名用户上传的东西
write_enable=YES
anon_mkdir_write_enable=YES
anon_upload_enable=YES
chown_uploads=YES
chown_username=daemon # 权限改为daemon
[root@CentOS ~]# /etc/init.d/vsftpd restart
# 被动式连接端口的限制

pasv_min_port=65400
pasv_max_port=65410
[root@CentOS ~]# vim /etc/vsftpd/vsftpd.conf
[root@CentOS ~]# /etc/init.d/vsftpd restart

12. 防火墙的设置

加入 iptables 的 ip_nat_ftp、ip_conntrack_ftp 两个模块
开放 port 21 给因特网使用
开放前一小节提到的 port 65400-65410 端口给 internat 连接使用

[root@CentOS ~]# vim /etc/sysconfig/iptables-config 
IPTABLES_MODULES="ip_nat_ftp  ip_conntrack_ftp"
[root@CentOS ~]# iptables -A INPUT -p tcp -i eth0 --dport 1024:65534 -j ACCEPT
[root@CentOS ~]# iptables -A INPUT -p tcp -i eth0 --dport 65400:65410 --sport 1024:65534 -j ACCEPT

13. 常见问题与解决之道

无法连接成功:查看iptables, /etc/hosts.devy, /etc/xinetd.d/vsftpd
已经连上但显示某文件未打开:vsftpd.conf 中设置的文件名是否不存在
已经连上但是给无法使用某账号:vsftpd.conf 中是否使用 PAM模块,检查 /etc/csftpd/userlist_file, /etc/csftpd/ftpusers
客户端无法上传:忘记加write_enable=YES,权限设置,匿名用户设置写权限创建文件夹权限上传权限, E-mail-address阻挡机制, ASCII码传送, 查看/var/log/message是否是SELinux阻挡
无法解决:/var/log/vsftpd.log, /var/log/messages,需要配置vsftpd.conf:dual_log_enable=YES, vaftpd_log_file=/var/log/vsftpd.log, /etc/init.d/vsftpd restate

14. 让 vsFTPd 增加 SSL 的加密功能

# 检查 vsFTPd 有无支持 SSL 模块
[root@CentOS ~]# ldd $(which vsftpd) | grep ssl
    libssl.so.10 => /usr/lib64/libssl.so.10 (0x00007f790a575000)
# 建立专门给vsFTPd使用的证书数据
[root@CentOS certs]# cd /etc/pki/tls/certs
[root@CentOS certs]# make vsftpd.pem
[root@CentOS certs]# cp -a vsftpd.pem /etc/vsftpd/
[root@CentOS certs]# ll /etc/vsftpd/vsftpd.pem 
-rw-------. 1 root root 2913 Apr 16 15:01 /etc/vsftpd/vsftpd.pem

修改配置文件
提供实体账号登录,实体账号可上传数据,且 umask 为022
实体账号默认 chroot 的情况,且全部实体账号可用带宽为 1M/s
实体账号的登录与数据传输均需通过 SSL 加密功能传送
提供匿名登录,匿名用户仅能下载,不能上传,且使用明文传输(不通过SSL)

[root@CentOS certs]# vim /etc/vsftpd/vsftpd.conf
anonymous_enable=YES
no_anon_password=YES
anon_max_rate=1000000
data_connection_timeout=60
idle_session_timeout=600

local_enable=YES
write_enable=YES
local_umask=022
chroot_local_user=YES
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list
local_max_rate=1000000

ssl_enable=YES
allow_anon_ssl=NO
force_local_data_ssl=YES
force_local_logons_ssl=YES
ssl_tlsv1=YES
ssl_sslv2=NO
ssl_sslv3=NO
rsa_cert_file=/etc/vsftpd/vsftpd.pem

max_clients=50
max_per_ip=5
use_localtime=YES
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
listen=YES
pam_service_name=vsftpd
tcp_wrappers=YES
banner_file=/etc/vsftpd/anon_welcome.txt
dual_log_enable=YES
vsftpd_log_file=/var/log/vsftpd.log
pasv_min_port=65400
pasv_max_port=65410

[root@CentOS certs]# /etc/init.d/vsftpd restart

14. 客户端常用命令

命令相关说明
help显示帮助信息
append上传文件
ascii将文件传输模式设置为 ASCII 方式
binary将文件传输模式设置为二进制模式
cd更改远程文件目录
delete删除远程文件
dir显示远程指定的远程目录路径下的文件和子目录列表
get从 FTP 服务器下载指定的远程文件到本地计算机
lcd更改本地计算机的工作目录
ls显示远程目录路径下的文件和子目录列表
mdelete删除远程计算机的指定文件
mdir显示远程目录列表
get从服务器下载
mkdir远程新建目录
mls显示远程目录
mput将本地文件上传到远程计算机
open与 FTP服务器建立连接
put将本地文件复制到远程计算机
rename重命名远程文件
rmdir删除远程目录
user指定远程计算机的用户
bell切换响铃
bye结束
close结束
debug切换调试状态
disconnect断开但保留ftp提示
glob是否使用通配符
hash每下载2048字节打印一个#
literal向服务器发送协商参数
prompt用mput和mget 下载或上传多个文件时,是否提示
pwd显示远程当前工作目录
quit结束
quota向服务器发送协商参数
recv从 FTP 服务器下载指定的远程文件到本地计算机
remotehelp显示远程命令帮助
send将本地文件复制到远程计算机
status显示当前工作状态
trace运行 ftp 命令时是否显示每个数据包的路由
type设置或显示当前文件传输模式
verbose是否显示传输双方详细的交互信息
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值