• 设为首页
  • 收藏本站
  • 积分充值
  • VIP赞助
  • 手机版
  • 微博
  • 微信
    微信公众号 添加方式:
    1:搜索微信号(888888
    2:扫描左侧二维码
  • 快捷导航
    福建二哥 门户 查看主题

    Linux系统搭建FTP服务器完整步骤

    发布者: 嘉6148 | 发布时间: 2025-8-15 22:58| 查看数: 56| 评论数: 0|帖子模式

    FTP协议:文件传输协议(File Transfer Protocol)

    • 协议定义了一个在远程计算机系统和本地计算机系统之间传输文件的一个标准
    • FTP运行在OSI模型的应用层,并利用传输协议TCP在不同的主机之间提供可靠的数据传输
    • FTP 在文件传输中还支持断点续传功能,可以大幅度减少CPU网络带宽的开销
    FTP模型

    • 用户接口:提供一个用户接口并使用客户端协议解释器的服务
    • 客户端协议解释器:向远程服务器发送命令 并建立客户数据传输过程
    • 服务端协议解释器:响应客户协议机发出的命令并驱动服务端数据传输过程
    • 客户端数据传输协议:负责完成和服务器数据传输过程及客户端本地文件系统的通信
    • 服务端数据传输协议:负责完成和客户数据过程及服务器端文件系统的通信
    控制连接(端口号21)

    • 主要用来传送在实际通信过程中需要执行的FTP命令以及命令的响应
    • 只需要很小的网络带宽
    • FTP服务端监听21端口号来等待控制连接建立
    • 建立控制连接后,还需要验证客户身份,决定是否建立数据连接
    • 当需要目录列表,传输文件时,才建立数据连接,并且每次客户端都是用不同的端口号来建立数据连接。数据传输完毕,就中断这条临时的数据连接
    • 在FTP连接期间,控制连接始终保持通常的连接状态。在数据连接存在期间,控制连接必须存在;一旦控制连接断开,数据连接会自动关闭。
    数据连接(端口号20)

    • FTP服务端监听20端口来等待数据连接
    • 数据连接依赖于控制连接
    • 建立方式(主动被动都是相对服务器而言)
    主动模式

    • 通过三次握手,建立控制连接;客户端的源端口是高位随机端口,目标端口是21端口
    • 控制连接建立后,客户端进行身份验证,协商数据连接采用主动模式;随后客户端会向FTP服务器发送Port报文,表明自己监听的IP+端口,并等待FTP服务器(20端口)向自己监听的IP+端口发起数据连接请求。
    • 服务端发起数据连接请求,建立数据连接
    被动模式

    • 通过三次握手,建立控制连接;客户端的源端口是高位随机端口,目标端口是21端口;
    • 控制连接建立后,客户端进行身份验证,协商数据连接采用被动模式;随后客户端会向服务器发送PASV报文,表示我们用被动模式
    • 服务端收到PASV报文,于是向客户端发送Port报文,表明自己监听的IP+端口
    • 客户端发起数据连接请求,建立数据连接

    VSFTPD服务介绍


    • 服务包:vsftpd
    • 服务类型:由Systemd启动的守护进程
    • 配置单元: /usr/lib/systemd/system/vsftpd.service
    • 守护进程: /usr/sbin/vsftpd
    • 端口: 21(ftp) , 20(ftp‐data)
    • 主配置文件: /etc/vsftpd/vsftpd.conf
    • 用户访问控制配置文件: /etc/vsftpd/ftpusers /etc/vsftpd/user_list
    • 日志文件: /etc/logrotate.d/vsftpd
    • 配置文件参数
    参数作用listen=NO是否以独立运行的方式监听服务listen_address=ip地址设置要监听的IP地址listen_port=21设置FTP服务的监听端口download_enable=YES是否允许下载文件userlist_enable=YES设置用户列表为"允许"userlist_deny=YES设置用户列表为"禁止"max_clients=0最大客户端连接数,0为不限制max_per_ip=0同一IP地址的最大连接数,0为不限制anonymous_enable=YES是否允许匿名用户访问anon_upload_enable=YES是否允许匿名用户上传文件anon_umask匿名用户上传文件的umaskanon_root=/var/ftp匿名用户的ftp根目录anon_mkdir_write_enable=YES是否允许匿名用户创建目录anon_other_write_enable=YES是否开放匿名用户的其他写入权限(重命名、删除等)anon_max_rate=0匿名用户的最大传输速率,0为不限制local_enable=yes是否允许本地用户登录local_umask=022本地用户上传文件的umask值local_root=/vat/ftp本地用户的ftp根目录chroot_local_user=YES是否将用户权限禁锢在ftp目录,以确保安全local_max_rate=0本地用户的最大传输速率,0为不限制
    基础配置

    安装vsftp
    1. [root@localhoust ~]#yum -y install vsftpd
    复制代码
    准备分发的文件
    1. [root@localhoust ~]#touch /var/ftp/abd.txt
    复制代码
    启动服务
    1. [root@localhost ~]#systemctl start vsftpd
    2. [root@localhost ~]#systemctl enable vsftpd
    复制代码
    关闭防火墙
    1. [root@localhost ~]#systemctl stop firewalld
    2. [root@localhost ~]#setenforce 0
    复制代码
    客户端工具


    Linux中


    1.使用ftp工具
    1. [root@localhost ~]# yum install ftp -y
    2. [root@localhost ~]# ftp <IP地址>
    3. Name (192.168.175.10:root):anonymous
    4. password:直接回车
    复制代码
    ftp工具一定要输入用户名和密码,匿名用户登陆用户名写anonymous,密码直接回车,登陆成功或者失败都会给出提示

    2.使用lftp工具
    1. [root@localhost ~]# yum install lftp -y
    2. [root@localhost ~]# lftp <IP地址>
    复制代码
    lftp工具不需要输入用户名和密码直接登陆,不会直接给出登陆成功或者失败的提示,需要输入ls工具才能知道是否连接成功,优点在于连接更加方便

    Windows中


    1.在浏览器中访问

    可以在浏览器、运行窗口或者资源管理器中输入 ftp://IP地址/ ,这样访问的是ftp的根位置,如果需要访问相关目录可以输入 ftp://IP地址/目录/文件名

    2.在控制管理器中访问

    在cmd窗口中,输入命令 ftp <IP地址> 即可访问
    需要注意的是直接访问ftp服务器的IP地址时访问的根位置目录是 /var/ftp,如果需要访问pub里的test可以访问 ftp://192.168.80.129/pub/test 。

    案例


    案例1,匿名用户访问(默认开启)

    修改配置文件
    1. [root@localhost ~]# vim /etc/vsftpd/vsftpd.conf
    2. anonymous_enable=YES
    3. anon_umask=022
    4. anon_upload_enable=YES
    5. anon_mkdir_write_enable=YES
    6. anon_other_write_enable=YES
    7. local_enable=YES
    8. write_enable=YES
    9. local_umask=022
    10. dirmessage_enable=YES
    11. xferlog_enable=YES
    12. connect_from_port_20=YES
    13. xferlog_std_format=YES
    14. listen=NO
    15. listen_ipv6=YES
    16. pam_service_name=vsftpd
    17. userlist_enable=YES
    18. tcp_wrappers=YES
    19. [root@localhost ~]# systemctl restart vsftpd #重启配置
    复制代码
    新版本的vsftp针对用户安全性进行了升级,普通用户无法在/var/ftp下新建文件,如果直接添加目录的w权限会触发安全判断问题,因为/var/ftp目录下的文件只能是默认的755权限,普通用户没有w权限,而且/var/ftp目录的属主必须是root,如果修改所属主或者权限则会触发完全问题。欲使普通用户可以在ftp中上传文件,就在/var/ftp下新建一个用于普通用户上传文件的目录,比如/var/ftp/pub,将/var/ftp/pub目录的属主和属组改成ftp,并且添加w权限
    1. chown ftp.ftp /var/ftp/pub
    2. chmod 777 /var/ftp/pub
    复制代码
    现在就可以在里面写文件了

    案例2,本地用户访问

    这些用户就是Linux下的用户,使用本地用户登陆,登陆成功时位置在该用户的家目录。如:用户han登陆时,输入han在Linux下的密码,登陆成功后位置在/home,han可以在该目录下创建或者删除文件
    修改配置文件
    1. [root@localhost ~]# vi /etc/vsftpd/vsftpd.conf
    2. anonymous_enable=NO #不允许匿名用户访问
    3. local_enable=YES
    4. write_enable=YES
    5. local_umask=022
    6. dirmessage_enable=YES
    7. xferlog_enable=YES
    8. connect_from_port_20=YES
    9. xferlog_std_format=YES
    10. listen=NO
    11. listen_ipv6=YES
    12. pam_service_name=vsftpd
    13. userlist_enable=YES
    14. tcp_wrappers=YES
    15. [root@localhost ~]# systemctl restart vsftpd #重启配置
    16. [root@localhost ~]# systemctl enable vsftpd
    复制代码
    本地用户登陆时,密码使用的是该用户在Linux下登陆时的密码,而不是ftp的密码
    注意:出现在/etc/vsftpd/ftpusers /etc/vsftpd/user_list这两个文件中的内容将会被定义为黑名单

    案例3,虚拟用户访问

    只用于登陆ftp的用户,不是Linux下的用户。

    • 创建用于进行FTP认证的用户数据库文件,其中奇数行为用户名,偶数行为密码。
    1. [root@localhost ~]# cd /etc/vsftpd/
    2. [root@localhost vsftpd]# vim vuser.list #创建文件,稍后虚拟用户信息从这个文件读取
    3. eagle #用户名
    4. centos #密码
    5. cisco #用户名
    6. centos #密码
    7. huawei #用户名
    8. centos #密码
    复制代码

    • 使用db_load命令用哈希(hash)算法将原始的明文信息文件转换成数据库文件。
    1. [root@localhost vsftpd]# db_load -T -t hash -f vuser.list vuser.db
    复制代码
    由于文件vuser.list中含有密码等敏感信息,所以使用加密算法加密。转换完后新的文件vuser.db就是用户数据库,里面是加密后的信息。
    查看vuser.db的文件类型:
    1. [root@localhost vsftpd]# file vuser.db
    2. vuser.db: Berkeley DB (Hash, version 9, native byte-order)
    复制代码

    • 降低数据库文件的权限(避免其他人看到数据库文件的内容)。加强数据库vuser.db的安全性,防止破解
    1. [root@localhost vsftpd]# chmod 600 vuser.db
    复制代码

    • 把原始的明文信息文件删除。
    1. [root@localhost vsftpd]# rm -f vuser.list
    复制代码

    • 创建一个本地用户,用来做虚拟用户在本地的代理,为了安全起见,禁止这个本地用户登录。
    1. [root@localhost vsftpd]# useradd -d /var/ftproot -s /sbin/nologin virtual
    2. #-d 指定用户的家目录为/var/ftproot -s 指定为不能登陆的用户
    3. [root@localhost vsftpd]# ls -ld /var/ftproot/
    4. drwx------. 2 virtual virtual 59 8月 10 23:04 /var/ftproot/
    5. [root@localhost vsftpd]# chmod -Rf 755 /var/ftproot/
    复制代码
    新建一个用于虚拟用户认证的PAM文件vsftpd.vu,利用pam模块(linux内核的一个认证模块)做一个认证
    1. [root@localhost vsftpd]# vi /etc/pam.d/vsftpd.vu
    2. auth required pam_userdb.so db=/etc/vsftpd/vuser
    3. account required pam_userdb.so db=/etc/vsftpd/vuser
    复制代码

    • 配置文件
    1. [root@localhost vsftpd]# cat /etc/vsftpd/vsftpd.conf
    2. anonymous_enable=NO
    3. local_enable=YES
    4. guest_enable=YES
    5. guest_username=virtual #名为virtual的用户做代理
    6. allow_writeable_chroot=YES
    7. write_enable=YES
    8. local_umask=022
    9. dirmessage_enable=YES
    10. xferlog_enable=YES
    11. connect_from_port_20=YES
    12. xferlog_std_format=YES
    13. listen=NO
    14. listen_ipv6=YES
    15. pam_service_name=vsftpd.vu #记得修改这里为我们自己的认证文件
    16. userlist_enable=YES
    17. tcp_wrappers=YES
    18. [root@localhost vsftpd]# systemctl restart vsftpd
    复制代码
    这时用户创建完毕,可以登陆,但是不能写文件,需要给权限

    • 如果想要针对不同的用户设置不同的权限
    1. [root@localhost vsftpd]# mkdir /etc/vsftpd/vusers_dir/ #创建一个目录用于存放各个虚拟用户的配置文件
    2. [root@localhost vsftpd]# cd /etc/vsftpd/vusers_dir/
    3. [root@localhost vusers_dir]# touch huawei #创建huawei的配置文件,如果不给任何权限,则默认为主配置文件
    4. [root@localhost vusers_dir]# vim cisco #创建cisco的配置文件,并修改配置文件
    5. anon_upload_enable=YES
    6. anon_mkdir_write_enable=YES
    7. anon_other_write_enable=YES
    8. #与配置匿名用户权限一样
    9. [root@localhost vusers_dir]# vi /etc/vsftpd/vsftpd.conf
    10. anonymous_enable=NO
    11. local_enable=YES
    12. guest_enable=YES
    13. guest_username=virtual
    14. allow_writeable_chroot=YES
    15. write_enable=YES
    16. local_umask=022
    17. dirmessage_enable=YES
    18. xferlog_enable=YES
    19. connect_from_port_20=YES
    20. xferlog_std_format=YES
    21. listen=NO
    22. listen_ipv6=YES
    23. pam_service_name=vsftpd.vu
    24. userlist_enable=YES
    25. tcp_wrappers=YES
    26. user_config_dir=/etc/vsftpd/vusers_dir #在主配置文件中加上这一行,告诉主配置文件我们这里还有配置
    27. [root@localhost vusers_dir]# systemctl restart vsftpd
    28. 配置完后,huawei没权限,cisco有权限
    复制代码
    总结

    到此这篇关于Linux系统搭建FTP服务器的文章就介绍到这了,更多相关Linux搭建FTP服务器内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

    来源:互联网
    免责声明:如果侵犯了您的权益,请联系站长(1277306191@qq.com),我们会及时删除侵权内容,谢谢合作!

    最新评论

    浏览过的版块

    QQ Archiver 手机版 小黑屋 福建二哥 ( 闽ICP备2022004717号|闽公网安备35052402000345号 )

    Powered by Discuz! X3.5 © 2001-2023

    快速回复 返回顶部 返回列表