Linux 配置FTP服务器(vsftp)

文章目录

  • 0. VSFTP 简介
  • 1. 安装准备
  • 2. 匿名用户验证(只能下载)
  • 3. 本地用户验证
  • 4. 虚拟用户验证
  • 5. 配置文件详解
  • 6 建立ftp账户
    • 6.1 匿名登录(默认)
      • 6.1.1. 关闭FTP匿名用户
      • 6.1.2. 修改权限
    • 6.2 系统用户登录
    • 6.3 虚拟用户登陆

0. VSFTP 简介


FTP 是 File Transfer Protocol(文件传输协议)的英文简称,用于 Internet 上的文件的双向传输。使用 FTP 来传输时,是具有一定程度的危险性, 因为数据在因特网上面是完全没有受到保护的明文传输方式!

VSFTP是一个基于GPL发布的类Unix系统上使用的FTP服务器软件,它的全称是Very Secure FTP, 从名称定义上基本可以看出,这是为了解决 ftp 传输安全性问题的。

  1. VSFTP 特点
    vsftp 程序的运行者一般是普通用户,降低了相对应进程的权限,提高了安全性。
    任何需要执行较高权限的指令都需要配置许可。
    ftp 所需要使用的绝大多数命令都被整合到了 vsftp 中,基本不需要系统额外提供命令。
    拥有 chroot 功能,可以改变用户的根目录,限制用户只能在自己的家目录。

  2. VSFTP 连接类型
    控制连接(持续连接) → TCP 21(命令信道) → 用户收发FTP命令
    数据连接(按需连接) → TCP 20(数据信道) → 用于上传下载数据

  3. VSFTP 工作模式

    • 主动模式
      客户端向服务器的 ftp 端口(默认是 21)发送连接请求,服务器接受连接,建立一条命令链路;
      当需要传送数据时,客户端在命令链路上用 port 命令告诉服务器:”我打开了 xxxx 端口,你过来连接我”;
      于是服务器从 20 端口向客户端的 xxxx 端口发送连接请求,建立一条数据链路来传送数据。

    • 被动模式
      客户端向服务器的 ftp 端口(默认是 21)发送连接请求,服务器接受连接,建立一条命令链路;
      当需要传送数据时,服务器在命令链路上用 pasv 命令告诉客户端:”我打开了 xxxx 端口,你过来连接我”;
      于是客户端向服务器的 xxxx 端口发送连接请求,建立一条数据链路来传送数据。

    • 优缺点
      主动模式很容易受到防火墙的限制,因为大多数客户端都是在 NAT 环境中上网的,因此服务器无法向客户端的 xxx 端口发起连接;
      被动模式则不会受到防火墙的限制,因为这就是一个普通的 NAT 操作,这是完全允许的,并且被动模式的安全性相对来说更高一些。

  4. VSFTP 传输模式

    • ASCII模式:进行文本传输时,自动适应目标操作系统的结束符,如回车符等
    • Binary模式:不对数据进行任何处理,适合进行可执行文件、压缩文件、图片等,Linux的红帽发行版中VSFTP默认采用的是Binary模式,这样能保证绝大多数文件传输后能正常使用 。
    • 切换方式:在ftp>提示符下输入ascii即转换到ACSII方式,输入bin,即转换到Binary方式。
  5. VSFTP 相关软件名

    服务端软件名:vsftpd
    客户端软件名:ftp
    服务名:vsftpd
    端口号:20、21、指定范围内随机端口

    # vsftp配置文件
    /etc/vsftpd/vsftpd.conf
    
    # PAM认证文件
    /etc/pam.d/vsftpd
    
    # 匿名用户默认目录
    /var/ftp
    
    # 匿名用户的下载目录
    /var/ftp/pub
    
    # 不能访问 ftp server 的用户列表
    /etc/vsftpd/ftpusers
    
    # 允许访问 ftp server 的用户列表
    /etc/vsftpd/user_list
    
    # ftp 的上传下载日志
    /var/log/xferlog
    
  6. VSFTP 登陆方式:在 vsftpd 服务器中支持匿名用户本地用户,和虚拟用户3类用户账号,用途及区别如下:

    1. 匿名用户验证:是名为anonymous或ftp的用户,匿名FTP用户登录后将FTP服务器中的/var/ftp作为FTP根目录。
    2. 本地用户验证: 是 Linux 系统用户账号,使用本地用户账号登录FTP服务器后,登录目录为本地用户的宿主目录。
    3. 虚拟用户验证:为了保证FTP服务器的安全性,由vsftpd服务器提供的非系统用户账号。虚拟用户FTP登录后将把指定的目录作为FTP根目录。虚拟用户与本地用户具有类似的功能,由于虚拟用户相对安全,因此正逐步替代本地用户账号的使用。

1. 安装准备


# 安装 vsftpd
yum install -y vsftpd

# 检查|启动|停止|重启
service vsftpd status
service vsftpd start
service vsftpd stop
service vsftpd restart

# 设置开机自启动
systemctl enable vsftpd.service

# 让防火墙开启 FTP 服务和 21 端口的使用
firewall-cmd --add-service=ftp --permanent
firewall-cmd --reload

#备份配置文件
cp /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf.bak

2. 匿名用户验证(只能下载)


用户账号名称:ftp或anonymous
用户账号密码:无密码
工作目录:/var/ftp
默认权限:默认可下载不可上传,上传权限由两部分组成(主配置文件和文件系统,配置文件中配置上传权限,对该目录具有写权限。)

# 修改配置文件
vim /etc/vsftpd/vsftpd.conf

文件

# 是否允许匿名登录FTP服务器。
anonymous_enable=YES
local_enable=YES
write_enable=YES
local_umask=022

# 是否允许匿名用户上传文件,须将上面的write_enable设置为YES允许。
anon_upload_enable=YES

# 是否允许匿名用户创建新文件夹。
anon_mkdir_write_enable=YES
anon_other_write_enable=YES

# 是否激活目录欢迎信息功能
dirmessage_enable=YES

# 如果启用此选项,系统将会维护记录服务器上传和下载情况的日志文件。
xferlog_enable=YES

# 从20号端口连接
connect_from_port_20=YES

# 如果启用此选项,传输日志文件将以标准xferlog的格式书写;
xferlog_std_format=YES

# 如果设置为YES,则vsftpd将以独立模式运行,由vsftpd自己监听和处理IPV4连接请求。
listen=YES

# 设置PAM外挂模块提供的认证服务所使用的配置文件名;
pam_service_name=vsftpd

# 表明服务器使用tcp_wrappers作为主机访问控制方式;
tcp_wrappers=NO

# 启用 pasv 模式
pasv_enable=YES
# pasv 端口起始号
pasv_min_port=12000
# pasv 端口结束号
pasv_max_port=12199
# 修改权限
chown -R ftp /var/ftp/pub/

# 重启服务
service vsftpd restart

# 登陆
ftp://192.168.210.201/

3. 本地用户验证

用户账号名称:本地用户(/etc/passwd)
用户账号密码:用户密码(/etc/shadow)
工作目录:登录用户的宿主目录
权限:最大权限(drwx------)

4. 虚拟用户验证

创建虚拟用户用来代替本地用户,减少本地用户曝光率
使用本地用户作为虚拟用户的映射用户,为虚拟用户提供工作目录和权限控制
能够设置严格的权限

5. 配置文件详解


# 是否允许匿名登录FTP服务器。
anonymous_enable=NO


# 是否允许本地用户(即linux系统中的用户帐号)登录FTP服务器,
# 默认设置为YES允许,本地用户登录后会进入用户主目录;
# 而匿名用户登录后进入匿名用户的下载目录/var/ftp;
# 若只允许匿名用户访问,前面加上#,可阻止本地用户访问FTP服务器。
local_enable=YES

# 是否允许本地用户对FTP服务器文件具有写权限,默认设置为YES允许。
write_enable=YES

# 设置本地用户的文件掩码为缺省022,
# 也可根据个人喜好将其设置为其他值。
local_umask=022

# 是否允许匿名用户上传文件,须将上面的write_enable设置为YES允许。
#anon_upload_enable=YES

# 是否允许匿名用户创建新文件夹。
#anon_mkdir_write_enable=YES

# 是否激活目录欢迎信息功能,
# 当用户用CMD模式首次访问服务器上某个目录时,FTP服务器将显示欢迎信息;
# 默认情况下,欢迎信息是通过该目录下的.message文件获得的,
# 此文件保存自定义的欢迎信息,由用户自己建立。
dirmessage_enable=YES

# 如果启用此选项,系统将会维护记录服务器上传和下载情况的日志文件;
# 默认情况该日志文件为/var/log/vsftpd.log,
# 也可以通过下面的xferlog_file选项对其进行设定。
xferlog_enable=YES

# 设定FTP服务器将启用FTP数据端口的连接请求,ftp-data数据传输,21为连接控制端口。
connect_from_port_20=YES

# 设定是否允许改变上传文件的属主,与下面一个设定项配合使用;
# 注意,不推荐使用root用户上传文件。
#chown_uploads=YES

# 设置想要改变的上传文件的属主,如果需要,则输入一个系统用户名;
# 例如可以把上传的文件都改成root属主。whoever:任何人。
#chown_username=whoever

# 设定系统维护记录FTP服务器上传和下载情况的日志文件,
# /var/log/vsftpd.log是默认的,也可以另设其它
#xferlog_file=/var/log/vsftpd.log

# 如果启用此选项,传输日志文件将以标准xferlog的格式书写;
# 该格式的日志文件默认为/var/log/xferlog,
# 也可以通过xferlog_file选项对其进行设定,默认值为NO
xferlog_std_format=YES

# 如果添加并启用此选项,将生成两个相似的日志文件;
# 默认在/var/log/xferlog和/var/log/vsftpd.log目录下;
# 前者是wu_ftpd类型的传输日志,可以利用标准日志工具对其进行分析,后者是vsftpd类型的日志。
#dual_log_enable

# 如果添加并启用此选项,则原本应该输出到/var/log/vsftpd.log中的日志,将输出到系统日志中。
#syslog_enable

# 设置数据传输中断间隔时间,此语句表示空闲的用户会话中断时间为600秒;
# 即当数据传输结束后,用户连接FTP服务器的时间不应超过600秒,可以根据实际情况对该值进行修改。
idle_session_timeout=600

# 设置数据连接超时时间,该语句表示数据连接超时时间为120秒,可根据实际情况对其个修改。
data_connection_timeout=120

# 运行vsftpd需要的非特权系统用户,缺省是nobody。
#nopriv_user=ftpsecure

# 如果FTPclient会下达“async ABOR”这个指令时,这个设定才需要启用;
# 而一般此设定并不安全,所以通常将其取消。
#async_abor_enable=YES

# 大多数FTP服务器都选择用ASCII方式传输数据,
# 将#去掉就能实现用ASCII方式上传文件。
#ascii_upload_enable=YES

# 将#去掉就能实现用ASCII方式下载文件
#ascii_download_enable=YES

# 将#去掉可设置登录FTP服务器时显示的欢迎信息,
# 可以修改=后的欢迎信息内容。
# 另外如在需要设置更改目录欢迎信息的目录下创建名为.message的文件,
# 并写入欢迎信息保存后,在进入到此目录会显示自定义欢迎信息。
#ftpd_banner=Welcome to blah FTP service. 

# 可将某些特殊的email address抵挡住。
# 如果以anonymous登录服务器时,会要求输入密码,也就是您的email address;
# 如果很讨厌某些email address,就可以使用此设定来取消他的登录权限,但必须与下面的设置项配合。
#deny_email_enable=YES

# 当上面的deny_email_enable=YES时,可以利用这个设定项来规定那个email address不可登录vsftpd服务器。
# 此文件需用户自己创建,一行一个email address即可。
#banned_email_file=/etc/vsftpd/banned_emails

# 是否将所有用户限制在主目录,YES 为启用,NO 禁用。
# 为 YES 时,用户被锁定在自己的home目录中;
# 为 NO 时,用户登录FTP服务器后具有访问自己目录以外的其他文件的权限。
# vsftpd 将寻找 chroot_list 文件作为用户名单,此文件需用户建立。
chroot_local_user=YES

# 如果用户被限定在了其主目录下,则该用户的主目录不能再具有写权限。
# 下面这条命令将允许主目录继续保持写权限。
allow_writeable_chroot=YES

# 是否启动限制用户例外的名单,YES 为启用,NO 禁用。
chroot_list_enable=NO

# 此文件需自己建立,每行一个用户,
# 被列入此文件的用户,在登录后将不能切换到自己目录以外的其他目录,
# 由FTP服务器自动地chrooted到用户自己的home目录下;
# 使得chroot_list文件中的用户不能随意转到其他用户的FTPhome目录下,
# 从而有利于FTP服务器的安全管理和隐私保护。
# chroot_list_file=/etc/vsftpd/chroot_list

# 举例:
# 所有用户限制在主目录下,chroot_list 中的用户不受限制:
# [chroot_local_user=YES] & [chroot_list_enable=YES]
# 所有用户限制在主目录下,不启用 chroot_list:
# [chroot_local_user=YES] & [chroot_list_enable=NO]
# 所有用户不限制在主目录下,chroot_list 中的用户受限制:
# [chroot_local_user=NO] & [chroot_list_enable=YES]

# 指定用户登录后的ftp主目录。
local_root=/usr/share/nginx/www/

# 是否允许递归查询,大型站点的FTP服务器启用此项可以方便远程用户查询。
ls_recurse_enable=YES

# 如果设置为YES,则vsftpd将以独立模式运行,由vsftpd自己监听和处理IPV4连接请求。
listen=YES

# 设定是否支持IPV6
#listen_ipv6=YES

# 设置PAM外挂模块提供的认证服务所使用的配置文件名;
# 即/etc/pam.d/vsftpd文件;
# 此文件中file=/etc/vsftpd/ftpusers字段,
# 说明了PAM模块能抵挡的帐号内容来自文件/etc/vsftpd/ftpusers中。
pam_service_name=vsftpd

# 若此项设为YES,ftpusers 和 user_list 文件中的用户都允许登录FTP服务器;
# 若此项设为NO,ftpusers 中的用户禁止登录,user_list 中的用户允许登录;
userlist_enable=YES

# 仅当 userlist_enable=YES 时,userlist_deny 设置才有效。
# 若此项为YES,则 user_list 文件中的用户将不允许登录FTP服务器,
# 甚至连输入密码提示信息都没有,直接被FTP服务器拒绝。
#userlist_deny=YES

# 举例:
# ftpusers 中的用户禁止登录,user_list 中的用户无法登录(甚至连输入密码提示信息都没有,直接被FTP服务器拒绝)
# [userlist_enable=YES] & [userlist_deny=YES]
# ftpusers 中的用户禁止登录,user_list 中的用户可以登录
# [userlist_enable=YES] & [userlist_deny=NO]

# 表明服务器使用tcp_wrappers作为主机访问控制方式;
# tcp_wrappers可以实现linux系统中网络服务的基于主机地址的访问控制;
# 在/etc目录中的hosts.allow和hosts.deny两个文件用于设置tcp_wrappers的访问控制;
# 前者设置允许访问记录,后者设置拒绝访问记录。
# 例如想限制某些主机对FTP服务器192.168.57.2的匿名访问,
# 编缉/etc/hosts.allow文件,
# 如在下面增加两行命令:vsftpd:192.168.57.1:DENY 和vsftpd:192.168.57.9:DENY,
# 表明限制IP为192.168.57.1/192.168.57.9主机访问IP为192.168.57.2的FTP服务器,
# 此时FTP服务器虽可以PING通,但无法连接。
tcp_wrappers=YES

# 启用 pasv 模式
pasv_enable=YES
pasv_min_port=12000
pasv_max_port=12199

6 建立ftp账户


# 新建一个名为 ftper 的本地帐号,禁止登陆 shell
useradd -s /sbin/nologin ftper

# 为建好的 ftper 帐号设置密码
passwd ftper

# 因为账号禁止登录shell,所以还要修改pam文件
vim /etc/pam.d/vsftpd

auth required pam_nologin.so

# 重启vsftpd
systemctl restart vsftpd.service

6.1 匿名登录(默认)

vsftpd默认以匿名用户访问

6.1.1. 关闭FTP匿名用户

# 修改配置文件
vim /etc/vsftpd/vsftpd.conf

anonymous_enable=YES
anonymous_enable=NO

# 重启服务
service vsftpd restart

6.1.2. 修改权限

匿名用户只有查看权限,无法创建、删除、修改,默认访问的FTP服务器端路径为:

/var/ftp/pub

如果允许匿名用户能够上传、下载、删除文件,需要修改配置文件

vim /etc/vsftpd/vsftpd.conf

#允许匿名用户上传文件;
anon_upload_enable=YES
#允许匿名用户创建目录
anon_mkdir_write_enable=YES
#允许匿名用户其他写入权限
anon_other_write_enable=YES

匿名用户完整配置文件代码如下:

anonymous_enable=YES
local_enable=YES
write_enable=YES
local_umask=022
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
listen=NO
listen_ipv6=YES
pam_service_name=vsftpd
userlist_enable=YES
tcp_wrappers=NO
# 启用 pasv 模式
pasv_enable=YES
pasv_min_port=60000
pasv_max_port=60100

由于默认vsftpd匿名用户有两种:anonymous、ftp,如果需要上传文件、删除及修改等权限,需要ftp用户对/var/ftp/pub目录有写入权限,使用如下chown和chmod任意一种即可,设置命令如下:

# 修改权限
chown -R ftp /var/ftp/pub/

# 重启服务
service vsftpd restart

6.2 系统用户登录

使用系统用户去登录ftp服务器。实现vsftpd系统用户登陆,只需在Linux系统中创建多个用户即可,创建用户使用useradd,同时给用户设置密码,即可通过用户和密码登录FTP,进行文件上传、下载、删除等操作。

# 添加用户
useradd ggftp

# 设置密码
passwd ggftp

# 修改配置文件
vim /etc/vsftpd/vsftpd.conf

anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
listen=NO
listen_ipv6=YES
pam_service_name=vsftpd
userlist_enable=YES
tcp_wrappers=NO

6.3 虚拟用户登陆

你可能感兴趣的:(Linux使用)