Linux环境下安装配置vsftpd服务(三种认证模式)
正文
一、FTP简介
文件传输协议(英文:File Transfer Protocol,缩写:FTP)是用于在网络上进行文件传输的一套标准协议。它工作于网络传输协议的应用层,使用客户/服务器模式,主要是用来在服务器与客户端之间进行数据传输。FTP 其实是以 TCP 封包的模式进行服务器与客户端计算机之间的联机,当联机建立后,使用者可以在客户端端连上 FTP 服务器来进行文件的下载与上传,此外,也可以对 FTP 服务器上面的文档进行管理等。
FTP传输模式
文件传输协议(File Transfer Protocol,FTP),基于该协议FTP客户端与服务端可以实现共享文件、上传文件、下载文件。
FTP基于C/S模式,FTP客户端与服务器端有两种传输模式,分别是FTP主动模式、FTP被动模式(默认的工作模式)。主被动模式均是以FTP服务器端为参照。
FTP主动模式:客户端从一个任意的端口N(N>1024)连接到FTP服务器的port 21命令端口,客户端开始监听端口N+1,并发送FTP命令“port N+1”到FTP服务器,FTP服务器以数据端口(20)连接到客户端指定的数据端口(N+1)。
FTP被动模式:客户端从一个任意的端口N(N>1024)连接到FTP服务器的port 21命令端口,客户端开始监听端口N+1,客户端提交 PASV命令,服务器会开启一个任意的端口(P >1024),并发送PORT P命令给客户端。客户端发起从本地端口N+1到服务器的端口P的连接用来传送数据。
在企业实际环境中,如果FTP客户端与FTP服务端均开放防火墙,FTP需以主动模式工作,这样只需要在FTP服务器端防火墙规则中,开放20、21端口即可。
环境准备。
属性 | FTP服务端 | FTP客户端 |
节点 | wencheng-1 | windows10 |
系统 | CentOS Linux release 7.5.1804 (Minimal) | windows10 企业版 |
内核 | 3.10.0-862.el7.x86_64 | windows10 企业版2019 x64 |
IP地址 | 172.16.70.185 | 172.16.70.50 |
SELinux | setenforce 0 | disabled |
FTP服务端操作步骤
- 1.服务端安装vsftpd服务。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | [root@wencheng-1 ~] # yum install -y vsftpd [root@wencheng-1 ~] # rpm -qa | grep vsftpd vsftpd-3.0.2-28.el7.x86_64 [root@wencheng-1 ~] # rpm -ql vsftpd /etc/pam .d /vsftpd # vsftpd 使用PAM模块时的配置文件,主要做认证功能 /etc/vsftpd/ftpusers # 用户登录黑名单,拒绝ftpusers列表内的用户登录vsftpd,一行一个账号 /etc/vsftpd/user_list # 默认为用户登录黑名单,拒绝user_list列表内的用户登录vsftpd,一行一个账号,这个 配置是否能够生效与 vsftpd.conf 内的参数 userlist_enable, userlist_deny 有关 /etc/vsftpd/vsftpd .conf # vsftpd 服务器的主配置文件,配置格式使用 [参数=设定值] 来设定,注意,等号两边不能有空白 /etc/vsftpd/vsftpd_conf_migrate .sh # 迁移脚本 /usr/sbin/vsftpd # vsftpd命令执行脚本文件 /var/ftp # 匿名用户访问根目录 [root@wencheng-1 ~] # systemctl start vsftpd [root@wencheng-1 ~] # ps -ef | grep vsftpd root 10988 1 0 16:20 ? 00:00:00 /usr/sbin/vsftpd /etc/vsftpd/vsftpd .conf root 10990 1583 0 16:21 pts /1 00:00:00 grep --color=auto vsftpd [root@wencheng-1 ~] # ps -ef | grep vsftpd root 10988 1 0 16:20 ? 00:00:00 /usr/sbin/vsftpd /etc/vsftpd/vsftpd .conf root 10992 1583 0 16:21 pts /1 00:00:00 grep --color=auto vsftpd [root@wencheng-1 ~] # systemctl enable vsftpd Created symlink from /etc/systemd/system/multi-user .target.wants /vsftpd .service to /usr/lib/systemd/system/vsftpd .service. |
注意:从现在开始,凡是涉及到服务的配置,就要考虑防火墙和SELinux的因素,很多教程和书籍上都是直接关闭防火墙和selinux,虽然这样在学习阶段可以避免干扰,但是这样非常不安全。另外凡是配置了服务,都要加入开机启动中,让其每次重启自动生效。
- 2.服务端修改配置文件/etc/vsftpd/vsftpd.conf
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | [root@wencheng-1 ~] # mv /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf_bak [root@wencheng-1 ~] # grep -Ev "^$|#" /etc/vsftpd/vsftpd.conf_bak > /etc/vsftpd/vsftpd.conf [root@wencheng-1 ~] # cat /etc/vsftpd/vsftpd.conf # 默认配置文件详解 # 默认匿名用户配置 anonymous_enable=YES # 开启匿名用户访问; # 默认本地用户配置 local_enable=YES # 启用本地系统用户访问; local_umask=022 # 本地用户创建文件及目录默认权限掩码; # 默认全局配置 write_enable=YES # 本地系统用户写入权限; dirmessage_enable=YES # 打印目录显示信息,通常用于用户第一次访问目录时,信息提示; xferlog_enable=YES # 启用上传/下载日志记录; connect_from_port_20=YES # FTP使用20端口进行数据传输; xferlog_std_format=YES # 日志文件将根据xferlog的标准格式写入; listen=NO # Vsftpd不以独立的服务启动,通过Xinetd服务管理,建议改成YES; listen_ipv6=YES # 启用IPV6监听; pam_service_name=vsftpd # 登录FTP服务器,依据/etc/pam.d/vsftpd中内容进行认证; userlist_enable=YES # Vsftpd.user_list和ftpusers配置文件里用户禁止访问FTP; tcp_wrappers=YES # 设置vsftpd与tcp wrapper结合进行主机的访问控制,Vsftpd服务器检查/etc/hosts.allow 和/etc/hosts.deny中的设置, 来决定请求连接的主机,是否允许访问该FTP服务器。 |
- 3.vsftpd三种认证模式
vsftpd作为更加安全的文件传输的服务程序,允许用户以三种认证模式登录到FTP服务器上:匿名开放模式、本地用户模式、虚拟用户模式。实际生产环境中虚拟用户模式用的较多。
首先要在防火墙添加ftp,20,21端口。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | # firewalld 添加ftp,20,21端口 [root@wencheng-1 ~] # firewall-cmd --zone=public --add-service=ftp --permanent success [root@wencheng-1 ~] # firewall-cmd --zone=public --add-port=20/tcp --permanent success [root@wencheng-1 ~] # firewall-cmd --zone=public --add-port=21/tcp --permanent success [root@wencheng-1 ~] # firewall-cmd --zone=public --list-ports # 查看firewalld开放的端口 20 /tcp 21 /tcp [root@wencheng-1 ~] # firewall-cmd --get-services | grep -o 'ftp' # 查看firewalld开放的协议 ftp [root@wencheng-1 ~] # systemctl restart firewalld |
- 3.1 匿名开放模式:任何人都可以无需密码验证而直接登录到FTP服务器,是一种最不安全的认证模式。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 | [root@wencheng-1 ~] # vim /etc/vsftpd/vsftpd.conf # 全局配置 write_enable=YES # 本地系统用户写入权限; local_umask=022 # 本地用户创建文件及目录默认权限掩码; dirmessage_enable=YES # 打印目录显示信息,通常用于用户第一次访问目录时,信息提示; xferlog_enable=YES # 启用上传/下载日志记录; connect_from_port_20=YES # FTP使用20端口进行数据传输; xferlog_std_format=YES # 日志文件将根据xferlog的标准格式写入; listen=NO # Vsftpd不以独立的服务启动,通过Xinetd服务管理,建议改成YES; listen_ipv6=YES # 启用IPV6监听; pam_service_name=vsftpd # 登录FTP服务器,依据/etc/pam.d/vsftpd中内容进行认证; userlist_enable=YES # Vsftpd.user_list和ftpusers配置文件里用户禁止访问FTP; tcp_wrappers=YES # 设置vsftpd与tcp wrapper结合进行主机的访问控制,Vsftpd服务器检查/etc/hosts.allow 和/etc/hosts.deny中的设置, 来决定请求连接的主机,是否允许访问该FTP服务器。 # 本地用户配置 local_enable=YES # 启用本地系统用户访问; local_umask=022 # 本地用户创建文件及目录默认权限掩码; local_root= /data/ftpdata # 修改本地用户登录时访问的目录路径 # 匿名用户访问配置(最大权限) anonymous_enable=YES # 开启匿名用户访问; anon_umask=022 # 匿名用户上传文件的umask值 anon_upload_enable=YES # 允许匿名用户上传文件 anon_mkdir_write_enable=YES # 允许匿名用户创建目录 anon_other_write_enable=YES # 允许匿名用户修改目录名称或删除目录 anon_root= /data/ftpdata # 修改匿名用户登录时访问的目录路径 注:工作中,匿名用户只是只读访问,写的权限也没有的。 [root@wencheng-1 ~] # ls -l /data/ftpdata drwxr-xr-x. 2 root root 18 Mar 25 16:26 ftppub [root@wencheng-1 ~] # ls -ld /data/ftpdata drwxr-xr-x. 3 root root 17 Mar 25 14:53 /data/ftpdata # 修改目录权限 [root@wencheng-1 ~] # chmod o+w /data/ftpdata/ftppub # 修改目录属主 [root@wencheng-1 ~] # chown ftp /data/ftpdata/ftppub/ -R [root@wencheng-1 ~] # ls -ld /data/ftpdata/ftppub/ drwxr-xrwx. 2 ftp root 18 Mar 25 16:26 /data/ftpdata/ftppub [root@wencheng-1 ~] # systemctl restart vsftpd |
3.1.1 匿名访问测试。
Win10测试访问ftp路径。
并能执行上传/下载/删除操作。
FTP服务端查看。
- 3.2 本地用户模式:是通过Linux系统本地的账户密码信息进行认证的模式。如果被黑客破解了账户信息,就可以畅通无阻地登录FTP服务器,从而完全控制整台服务器。
a.将anonymous_enable=YES改为NO,即关闭了匿名模式,此时就不能在使用匿名模式登陆了。
b.另外前面新加的与匿名配置参数可以保留,也可以直接删除,只要总开关anonymous_enable关闭了就禁用了匿名登录。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | [root@wencheng-1 ~] # vim /etc/vsftpd/vsftpd.conf # 全局配置 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=YES # 本地用户配置 local_enable=YES local_umask=022 local_root= /data/ftpdata # 匿名用户设置 anonymous_enable=NO # 仅修改此项为NO anon_umask=022 anon_upload_enable=YES anon_mkdir_write_enable=YES anon_other_write_enable=YES anon_root= /data/ftpdata [root@wencheng-1 ~] # systemctl restart vsftpd |
3.2.1 此时已需要账号密码登录。
3.2.2 添加一个ftp用户并创建密码,用来登录ftp服务器。
1 2 3 4 5 6 7 8 9 10 | [root@wencheng-1 ~] # useradd ftpuser -s /sbin/nologin [root@wencheng-1 ~] # passwd ftpuser Changing password for user ftpuser. New password: BAD PASSWORD: The password is shorter than 8 characters Retype new password: passwd : all authentication tokens updated successfully. [root@wencheng-1 ~] # grep ftpuser /etc/passwd ftpuser:x:1000:1000:: /home/ftpuser : /sbin/nologin |
3.2.3 再次尝试访问ftppub目录。
- 3.3 虚拟用户模式:需要为FTP服务单独 建立用户数据库文件,虚拟出用来进行口令验证的账户信息,而这些账户信息在 服务器系统中实际上是不存在的,仅供 FTP 服务程序进行认证使用。这样,即使 黑客破解了账户信息也无法登录服务器,从而有效降低了破坏范围和影响。是三种模式中最安全的一种认证模式。
Vsftpd虚拟用户企业案例配置步骤如下:
a.安装Vsftpd虚拟用户需用到的软件及认证模块:
1 | [root@wencheng-1 ~] # yum install pam* libdb-utils libdb* --skip-broken -y |
b.创建包含用户信息的文件vuser.list(文件名字任意取),文件中奇数行表示账号名,偶数行表示密码。
1 2 3 4 5 | [root@wencheng-1 ~] # vim /etc/vsftpd/vuser.list vuser1 123456 vuser2 123456 |
c.生成Vsftpd虚拟用户数据库认证文件,设置权限700。
1 2 | [root@wencheng-1 ~] # db_load -T -t hash -f /etc/vsftpd/vuser.list /etc/vsftpd/vsftpd_login.db [root@wencheng-1 ~] # chmod 700 /etc/vsftpd/vsftpd_login.db |
d.配置PAM认证文件,/etc/pam.d/vsftpd行首加入如下两行。
1 2 3 4 | [root@wencheng-1 ~] # cp /etc/pam.d/vsftpd /etc/pam.d/vsftpd_bak [root@wencheng-1 ~] # vim /etc/pam.d/vsftpd auth required pam_userdb.so db= /etc/vsftpd/vsftpd_login account required pam_userdb.so db= /etc/vsftpd/vsftpd_login |
e.所有Vsftpd虚拟用户需要映射到一个系统用户,该系统用户不需要密码,也不需要登录,主要用于虚拟用户映射使用。
1 2 3 4 | [root@wencheng-1 ~] # useradd -d /data/ftpdir -s /sbin/nologin ftpvuser # /data/ftpdir 为虚拟用户默认访问目录 [root@wencheng-1 ~] # chmod -Rf /data/ftpdir/ [root@wencheng-1 ~] # ls -ld /data/ftpdir/ drwxr-xr-x. 2 ftpvuser ftpvuser 76 Mar 29 23:51 /data/ftpdir/ |
f.创建虚拟用户各自的配置文件
假设我们要区别对待vuser1和vuser2,只允许vuser1查看文件,而允许vuser2上传、创建、修改、查看、删除文件。这种需求在企业真实环境中是常见的。
1 2 3 4 5 6 7 | [root@wencheng-1 ~] # mkdir -p /etc/vsftpd/vsftpd_users_conf [root@wencheng-1 ~] # cd /etc/vsftpd/vsftpd_users_conf [root@wencheng-1 vsftpd_users_conf] # touch vuser1 [root@wencheng-1 vsftpd_users_conf] # vim vuser2 anon_upload_enable=YES anon_mkdir_write_enable=YES anon_other_write_enable=YES |
g.修改配置文件/etc/vsftpd/vsftpd.conf。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | [root@wencheng-1 ~] # vim /etc/vsftpd/vsftpd.conf # 全局配置 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=YES # 本地用户配置 local_enable=YES local_umask=022 #local_root=/data/ftpdata # 虚拟用户设置 anonymous_enable=NO # 禁止匿名开放模式 guest_enable=YES # 开启虚拟用户模式 guest_username=ftpvuser # 映射虚拟用户至系统用户ftpvuser allow_writeable_chroot=YES # 允许对禁锢的FTP根目录执行写入操作,而且不拒绝用户的登录请求 user_config_dir= /etc/vsftpd/vsftpd_users_conf # 设置虚拟用户配置文件所在的目录 [root@wencheng-1 ~] # systemctl restart vsftpd |
测试通过Windows10客户端资源管理器访问登录。
1 2 3 4 5 | [root@wencheng-1 ~] # echo 11 > /data/ftpdir/Vfire1 [root@wencheng-1 ~] # echo 22 > /data/ftpdir/Vfire2 [root@wencheng-1 ~] # echo 33 > /data/ftpdir/Vfire3 [root@wencheng-1 ~] # ls /data/ftpdir/ Vfire1 Vfire2 Vfire3 |
客户端操作步骤
测试账号:vuser1;密码:123456
无法执行删除操作。
测试账号:vuser2;密码:123456
删除成功。
至此,已实现vsftpd服务的三种认证模式。
出处:https://www.cnblogs.com/zhangwencheng
版权:本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出 原文链接
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)