Press "Enter" to skip to content

个人网站服务器FTP的安装与配置

背景

网站从typecho转为wordpress后,为了实现wordprss版本和插件自动更新,需在服务器上部署ftp服务。

系统环境

系统:Ubuntu 18.04.1
服务商:腾讯云
实例配置:1核 2GB 1Mbps

安装步骤

  1. 安装vsftpd

    sudo apt-get install vsftpd

    检查版本

    ubuntu@VM-0-4-ubuntu:~$ vsftpd -v
    vsftpd: version 3.0.3

    启动vsftpd,这里先采用默认配置

    ubuntu@VM-0-4-ubuntu:~$ sudo systemctl start vsftpd
    ubuntu@VM-0-4-ubuntu:~$ sudo systemctl status vsftpd
    ● vsftpd.service - vsftpd FTP server
       Loaded: loaded (/lib/systemd/system/vsftpd.service; enabled; vendor preset: enabled)
       Active: active (running) since Fri 2021-11-12 11:36:31 CST; 3h 7min ago
      Process: 21831 ExecStartPre=/bin/mkdir -p /var/run/vsftpd/empty (code=exited, status=0/SUCCESS)
     Main PID: 21836 (vsftpd)
        Tasks: 1 (limit: 2123)
       CGroup: /system.slice/vsftpd.service
               └─21836 /usr/sbin/vsftpd /etc/vsftpd.conf
    
    Nov 12 11:36:31 VM-0-4-ubuntu systemd[1]: Starting vsftpd FTP server...
    Nov 12 11:36:31 VM-0-4-ubuntu systemd[1]: Started vsftpd FTP server.
  2. 编写配置文件
    在ubuntu系统中,vsftpd的配置文件在/etc/vsftpd.conf中,先备份原文件,然后进行配置

    ubuntu@VM-0-4-ubuntu:~$ sudo cp /etc/vsftpd.conf /etc/vsftpd.conf.bak

    配置文件内容(我用到的配置)

    listen=NO   # 监听ipv4端口
    listen_ipv6=YES # 监听ipv6端口,其与ipv4不能同时开启
    anonymous_enable=NO # 关闭匿名登陆
    local_enable=YES # 允许本地用户(服务器的用户)登陆
    dirmessage_enable=YES # 激活目录欢迎信息功能
    use_localtime=YES # 矫正时间为系统本地时间
    xferlog_enable=YES # 让系统自动维护上传和下载的日志文件,默认日志文件为/var/log/vsftpd.log ,也可以通过xferlog_file来指定
    connect_from_port_20=NO # 关闭通过端口20来进行数据传输
    secure_chroot_dir=/var/run/vsftpd/empty # 必须有此参数,指定一个空目录,当vsftpd不需要访问文件时,就会将使用者限制在此目录
    pam_service_name=vsftpd # 设置pam模块提供认证服务时所使用的配置文件名,即/etc/pam.d/vsftpd文件
    rsa_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
    rsa_private_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
    ssl_enable=NO
    write_enable=YES # 开启本地用户对服务器文件的写权限
    userlist_enable=YES # 开启userlist文件中用户的筛选
    userlist_deny=NO # 若是YES,则userlist文件中的用户禁止登陆,若是NO,则文件中的用户允许登陆
    userlist_file=/etc/vsftpd/allowed_users # 指定userlist文件
    chroot_local_user=YES # 将本地用户限制在主目录中
    allow_writeable_chroot=YES # 当开启了chroot_local_user=YES,用户若对其主目录有写权限,就无法登陆,ftp会报错,加上此配置,就可允许写权限的存在
    tcp_wrappers=YES # 是否使用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通,但无法连接
    listen_port=21 # 监听端口21 ,连接端口
    pasv_enable=YES # 开启被动模式
    pasv_min_port=6000 # 被动模式数据传输端口最小值
    pasv_max_port=7000 # 被动模式数据传输端口最大值
    pasv_address=10.0.0.0 # 这里写服务器的公网地址
  3. 创建登陆ftp所需要的用户
     useradd -d /var/www/html -s /sbin/nologin xxx

    /var/www/html为站点目录,设置/sbin/nologin是为了禁止xxx用户能登陆shell
    更改/var/www/html站点目录的属主为xxx

    sudo chown -R xxx /var/www/html

    在userlist_file文件中加入xxx用户

    sudo vim /etc/vsftpd/allowed_users
  4. 编辑/etc/pam.d/vsftpd ,将auth required pam_shells.so注释掉

    "/etc/pam.d/vsftpd"
    
    # Standard behaviour for ftpd(8).
    auth    required        pam_listfile.so item=user sense=deny file=/etc/ftpusers onerr=succeed
    
    # Note: vsftpd handles anonymous logins on its own. Do not enable pam_ftp.so.
    
    # Standard pam includes
    @include common-account
    @include common-session
    @include common-auth
    #auth   required        pam_shells.so

    需要注释的原因:若不注释,则会要求登入的用户必须能登陆shell,而我们创建的用户是/sbin/nologin

  5. 接下来是开放端口,根据配置文件,开启TCP的21端口和6000-7000端口
    sudo iptables -A INPUT -p tcp --doport 6000:7000 -j ACCEPT

    再去腾讯云控制台,在安全组规则里添加tcp的6000-7000的端口

  6. 重启服务,测试

遇到的坑

  1. 没开启21端口,导致只能本地连接,无法通过ip访问
  2. 没有注释/etc/pam.d/vsftpd 里的auth required pam_shells.so字段,导致ftp用户无法登入
  3. 未开启被动模式pasv,导致服务器无法通过20端口与客户端进行数据传输,现象是用户能登入,但ls看不到任何目录
    ftp> ls
    200 PORT command successful. Consider using PASV.
    425 Failed to establish connection.

    ftp的主动模式:客户端和服务端通过21端口进行连接(控制连接),连接成功后,服务端使用20端口主动连接客户端的20端口,建立数据连接。服务端主动连接客户端时,很可能会被客户端的防火墙拦截,即会出现以上报错
    ftp的被动模式:客户端和服务端通过21端口进行连接(控制连接),连接成功后,服务端会开启某个范围内的随机端口,用以监听客户端的数据连接请求。

2 Comments

  1. 萧瑟 萧瑟 2021年11月16日

    1M 小水管速度实在感人,但是上传速度还不错。 FTP现在用的都比较少了,推荐你搭建一个可道云,直接在线编辑和上传都特别方便。

    • ao ao 2021年12月29日

      莫的money呀

萧瑟进行回复 取消回复

您的电子邮箱地址不会被公开。