linux ftp配置及实操

时间:2023-03-09 04:08:59
linux ftp配置及实操

一、基础知识:

1、ftp:file transfer protocal 及文件传输协,工作与应用层。

2、ftp协议的实现:

  服务器端实现软件:vsftpd,pureftpd,filezilla server

  客户端实现软件:ftp,lftp

3、数据传输格式:

  ASCII:ASCII格式传输

  binary:二进制文件传输格式

4、ftp传输连接类型:ftp客户端与服务器端通过命令建立连接后,并不适用命令连接通道传输数据,而是新建一个数据连接传输数据

  命令连接:传输指令

  数据连接:传输数据

5、ftp工作模式:主动模式和被动模式两种。

  主动模式:port模式,服务器监听于某一固定端口。服务器端主动向客户端发起连接请求。

  被动模式:PASV模式,服务器监端口不固定,客户端向服务器端发起连接请求。

  为什么要有两种工作模式?

    因为,客户端出于安全因素考虑,一般会禁用大于1024的端口,但是服务器并不知道客户端哪些端口处于禁用状态,所以主动模式难以生效。因此最好使用被动模式。

6、ftp用户类型

  匿名用户:所有的农名用户,一般映射为本地魔衣固定的系统用户(一般为用户ftp)。家目录为/var/ftp

  本地用户:又称为系统用户,UID一般0~999。存在于/etc/passwd文件中的所有用户

  虚拟用户:使用开了中间层(一般为PAM),如使用mysql数据库存储用户名和密码

    PAM:plugable authentication modules 插入式认证模块。

二、vsftpdf的安装

1、关闭防火墙:service iptables stop

2、关闭selinux:setenforce 0

3、 先用rpm -q vsftpd命令检查是否已经安装,若ftp没有安装,使用yum  -y  install vsftpd 安装

4、设置开机自启 :chkconfig  vsftpd on  。

5、启动vsftpd: service vsftpd  <start |stop|status|restart>

三、vsftpd配置

1、备份配置文件:cp  /etc/vsftpd/vsftpd.conf  /etc/vsftpd/vsftpd.conf.bak

1、写权限全局配置项:

write_enable=YES               ###是否对登录用户开启写权限。属全局性设置。默认NO。  

2、匿名用户配置

anonymous_enable=YES           ###设置是否允许匿名用户登录FTP服务器。默认为YES。所有匿名用户都会映射至某一固定系统用户,此用户一般问ftp,家目录是/var/ftp。
ftp_username=ftp ###定义匿名用户的账户名称,默认值为ftp。
no_anon_password=YES ###匿名用户登录时是否询问口令。设置为YES,则不询问。默认NO。
anon_world_readable_only=YES ###匿名用户是否允许下载可阅读的文档,默认为YES。
anon_upload_enable=YES ###是否允许匿名用户上传文件。前提是write_enable=YES时,该配置项才有效。而且匿名用户对相应的目录必须有写权限。默认为NO。
anon_mkdir_write_enable=YES ###是否允许匿名用户创建目录。前提是write_enable=YES时有效。且匿名用户对上层目录有写入的权限。默认为NO。
anon_other_write_enable=NO ###除去上传和建立目录的权限,其它写权限如删除和更名权限,依赖于次配置。默认值为NO。

2.1、修改匿名用户上传文件属主

# 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
###是否允许匿名用户上传文件,匿名用户上传文件默认属主为root。允许匿名用户上传文件除了  ###write_enable=YES外还需配置匿名用户对家目录(默认为/var/ftp)有写权限。  ####示例,我们将智图表格.txt文件上传到默认匿名用户家目录/var/ftp/下,可以看到文件属主为root

linux ftp配置及实操

chown_username=test    ####指定匿名用户上传文件的属主。此处设置为test
###示例,匿名登录FTP然后我们将智图.xls表格上传.可以看到上传后的文件属主就是我们指定的test

linux ftp配置及实操

此处有个问题:当匿名用户对默认家目录/var/ftp有写权限,而且
chown_uploads=YES,或
chown_username=test 同时使用时会限制匿名用户登录。本次示例是通过先启动服务,匿名登录服务器后再赋予写权限后上传成功的。本人没有研究明白问题所在,希望高人指点。

3、访问控制

(1)基于IP
tcp_wrappers=YES:用来设置vsftpd服务器是否与tcp wrapper相结合,进行主机的访问控制。设置为YES时,vsftpd服务器会检查/etc/hosts.allow和/etc /hosts.deny中的配置,通过两个我带你见来判断是否允许客户端访问该FTP服务器。类似于简易的防火墙。

示例:只允许192.168.121.1~192.168.121.254的用户访问ftp服务器,则可编辑/etc/hosts.allow文件中并添加以下内容:
vsftpd:192.168.121.0/255.255.255.0 :allow
all:all:deny 

(2)基于用户
  ①记录在/etc/vsftpd/ftpusers中的用户不允许登录ftp,文件中默认有一些系统用户不允许登录如root。  

[root@localhost vsftpd]# more ftpusers
# Users that are not allowed to login via ftp
root
bin
daemon
adm
lp
sync
shutdown
halt
mail
news
uucp
operator
games
nobody

  ②指令控制 

  userlist_enable=YES  :控制是否开启由userlist_file=/PATH控制的ftp访问控制文件(默认为/etc/vsftpd/user_list)。

  userlist_file=/etc/vsftpd/user_list   :文件访问控制文件路径

  userlist_deny=YES:代表userlist_file=/PATH指定文件为黑名单,即文件记录所有用户都不允许登录。默认为YES,即黑名单。

  userlist_deny=NO:代表userlist_file=/PATH指定文件为白名单,即只有文件记录用才能登录ftp。

root@localhost vsftpd]# more user_list
# vsftpd userlist
# If userlist_deny=NO, only allow users in this file
# If userlist_deny=YES (default), never allow users in this file, and
# do not even prompt for a password.
# Note that the default vsftpd pam config also checks /etc/vsftpd/ftpusers
# for users that are denied.
root
bin
daemon
adm
lp
sync
shutdown
halt
mail
news
uucp
operator
games
nobody

  

  

4、本地用户配置

注意,其他用户不能对/etc/vsftpd/下的三个文件有执行权限,否则不能登录FTP

local_enable=YES               ###是否允许非匿名用户,如本地用户(/etc/passwd中的用户)登录FTP服务器。所有非匿名用户的生效都依赖于此配置。默认为NO。
local_mask=022        ###本地用户上传文件的权限掩码

注意在/etc/vsftpd/ftpusers 中记录的本地用户不允许登录ftp。此配置文件默认包含以下用户。当然本地用户能否登录还与其他配置有关如userlist_enable。

  userlist_enable=YES  :控制是否开启由userlist_file=/PATH控制的ftp访问控制文件(默认为/etc/vsftpd/user_list).

  userlist_deny=YES:代表userlist_file=/PATH指定文件为黑名单,即文件记录所有用户都不允许登录。默认为YES,即黑名单。

  userlist_deny=NO:代表userlist_file=/PATH指定文件为白名单,即只有文件记录用才能登录ftp。

  

示例:要想让root用户能登录系统需要以下配置

  local_enable=YES

  编辑ftpusers,将root用户删除或者注释掉

  userlist_enable=YES 时,若userlist_deny=YES。要编辑userlist_file指向的文件,在黑名单中删除或注释掉root

             ,若userlist_deny=NO。要编辑userlist_file指向的文件,在白名单中添加root 

5、欢迎信息配置

①用户登录成功后欢迎消息设定

# You may fully customise the login banner string:
#ftpd_banner=Welcome to blah FTP service. ###可以自己定制登录横幅字符串,即自己定制一个欢迎登录成功用户的信息
ftpd_banner=Warning:this is my page.
banner_file=/PATH/TO/FILE    ###若欢迎信息较多可以将其写入到某以文件中。

linux ftp配置及实操


②有时候我们会在用户切换至某一目录时,设置目录消息,用来提醒用户,不要轻易做删除操作等信息。此时就可以使用目录消息设定了。
# Activate directory messages - messages given to remote users when they
# go into a certain directory.
dirmessage_enable=YES
####开启时,用户切换至指定目录后,vsftpd会查看目标目录下的.message(没有时要新建)文件,并将其内容显示给用户。,当然也可使用message_file命令指定文件
,将文件内容显示给用户。此处我们设置.message文件内容为this is a test information.
message_file=/PATH/TO/FILE

linux ftp配置及实操


6、禁锢用户于自己的家目录。例如test用户登录ftp后默认在其指定的家目录(本人配置的是/home/test),但是默认test用户是可以切换到其他目录的。这样很不安全。

# 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
###是否禁锢所有本地用户于自己的家目录中。设置为YES是代表禁锢所有本地用户。
#chroot_list_enable=YES
####有时候我们不想禁锢所有用户,只是禁锢其中的某些用户,此时可以使用此配置项。设置为YES时,开启一个(chroot_list_file)指向的文件。文件中用户不允许cd到本地系统其他目录。  
# (default follows) 
#chroot_list_file=/etc/vsftpd/chroot_list ####默认文件为/etc/vsftpd/chroot_list

示例:chroot_local_user与chroot_list_enable都为YES时,会有什么情况?

我们准备两个用户test和wxx

  ①配置
  chroot_local_user=YES
  chroot_list_enable=YES
  chroot_list_file=/etc/vsftpd/chroot_list
  ②在chroot_list文件中添加用户test
  ③启动ftp服务,结果如下图。即,test用户使用pwd显示的在家目录/home/test,可以cd到其他目录;wxx用户显示在/下,实际是在/home/test,无法cd到其他目录。

linux ftp配置及实操

④得出结论是都为YES时,只有在chroot_list中的目录才能cd到其他目录,此时chroot_list其实是一个白名单,即允许哪些用户切换目录。具体有以下几种情况


1)当chroot_list_enable=YES,chroot_local_user=YES时,在/etc/vsftpd/chroot_list文件中列出的用户,可以cd到其他目录;未在文件中列出的用户,不能cd到其他目录。
2)当chroot_list_enable=YES,chroot_local_user=NO时,在/etc/vsftpd/chroot_list文件中列出的用户,不能cd到其他目录;未在文件中列出的用户,可以cd到其他目录。
3)当chroot_list_enable=NO,chroot_local_user=YES时,所有用户均不能cd到其他目录。
4)当chroot_list_enable=NO,chroot_local_user=NO时,所有用户均可cd换到其他目录。
5)当用户不允许切换到上级目录时,登录后FTP站点的使用pwd命令显示在/下,其实还是在家目录下。

7、日志文件

# The target log file can be vsftpd_log_file or xferlog_file.
# This depends on setting xferlog_std_format parameter
xferlog_enable=YES ###是否启用上传或下载日志记录
# 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
###控制是使用vsftpd_log_file 日志文件,还是使用xferlog_file日志文件
NO代表使用vsftpd_log_file;YES代表使用xferlog_file。
# 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/xferlog
vsftpd_log_file=/var/log/vsftpd.log

示例:两种文件格式

linux ftp配置及实操 

  

8、FTP监听端口

# 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 ####YES代表ftp工作于standalone模式。
listen_port=21 ###ftp命令连接监听端口,默认为21
listen_address=*.*.*.* ###设置FTP在哪个IP上监听用户的连接请求。一般注释掉代表监听于本机所有IP,如127.0.0.1

9、FTP并发连接数

max_clients=0 :设置vsftpd允许的最大并发连接数,默认为0,代表不受限制。若设置为200时,则同时允许有200个连接,超出的将拒绝客户端连接请求。只有在standalone模式下有效

max_per_ip=0:设置每个IP地址可以FTP服务器同时建立连接的最大数目。默认为0,代表不受限制。建议设置一个较小值,防止同一个用户建立太多的连接。只有在以standalone模式运行时才有效。

10、会话超时时长

idle_session_timeout:空闲连接超时时长,服务于客户端建立了解后,若在指定时间内在没有互相发送任何指令则自动断开连接。

connect_timeout=60:port模式下

data_connection_timeout=300:数据传输超时时长。

11、PASV模式下端口配置

pasv_enable=YES:  若设置为YES,则启用PASV工作模式;若设置为NO,启用PORT模式。默认为YES,即使用PASV模式。

pasv_max_port=0:PASV模式下,数据连接端口最大值,默认值为0,表示任意端口。

pasv_mim_port=0:PASV模式下,数据连接端口最小值 ,默认值为0,表示任意端口。       
12、传输速率 

anon_max_rate=0:设置匿名用户最大传输速度,单位为b/s。0为默认值代表不受速度限制。
local_max_rate=0 : 设置本地用户最大传输速度。默认为0。

 

示例:一个最简单的FTP配置示例

要求:1、不允许匿名用户登录,只允许本地用户中的指定用户登录。

   2、该用户有读写权限。 

    3、禁锢用户与自己家目录

   4、工作于被动模式

   5、本地用户名为zxy家目录是/tmp/zxy

第一步配置文件相关

①保持/etc/vsftpd/vsftpd.conf文件其他内容默认,更改一下配置

  anonymous_enable=NO

②添加以下指令

  pasv_enable=YES

  pasv_min_port=10000

  pasv_max_port=11000

  userlist_deny=NO

  chroot_local_user=YES

第二步添加用户指定家目录为/tmp/zxy 

  useradd -m /tmp/zxy zxy

  passwd zxy

第三步编辑/etc/vsftpd/user_list

  删除所有已存在用户,添加zxy用户

第四步重启服务