Centos7.4搭建FTP服务器
【Centos7.4搭建FTP服务器】
搭建环境:Centos7.4版本、生产服务器、计划默认端口5000、被动模式端口5001-5005
一、关闭防火墙
1 systemctl status firewalld.service #查看防火墙状态 2 systemctl stop firewalld.service #停止防火墙服务 3 systemctl disable firewalld.service #关闭防火墙开启自启动 4 vi /etc/selinux/config #把文件中的SELINUX=enforcing 改为SELINUX=disabled
二、安装vsftpd
1 [root@vms100 ~]# yum install -y vsftpd
已安装:
vsftpd.x86_64 0:3.0.2-29.el7_9
启动服务,并加入开机自动启动:
[root@vms100 ~]# systemctl enable vsftpd.service --now
三、编辑配置
[root@vms100 ~]# vim /etc/vsftpd/vsftpd.conf
1 anonymous_enable=NO #是否开启匿名用户,匿名都不安全,不要开 2 local_enable=YES #允许本机账号登录FTP 3 write_enable=YES #允许账号都有写操作 4 local_umask=022 #意思是指:文件目录权限:777-022=755,文件权限:666-022=644,这有点反人类了,并且没有人跟我说是减去的。注意理解! 5 dirmessage_enable=YES #进入某个目录的时候,是否在客户端提示一下 6 xferlog_enable=YES #日志记录 7 connect_from_port_20=YES #开放port模式的20端口的连接 8 xferlog_std_format=YES #日志成为std格式 9 chroot_local_user=YES #限制用户只能在自己的目录活动 10 chroot_list_file=/etc/vsftpd/chroot_list 11 ls_recurse_enable=NO #是否允许使用ls -R等命令 12 listen=YES #监听ipv4端口,开了这个就说明vsftpd可以独立运行,不用依赖其他服务 13 pam_service_name=vsftpd #pam模块的名称,放置在 /etc/pam.d/vsftpd ,认证用 14 userlist_enable=YES #使用允许登录的名单 15 userlist_deny=NO #限制允许登录的名单,前提是userlist_enable=YES,其实这里有点怪~! 16 allow_writeable_chroot=YES #允许限制在自己的目录活动的用户 拥有写权限 17 tcp_wrappers=YES #Tcp wrappers : Transmission Control Protocol (TCP) Wrappers 为由 inetd 生成的服务提供了增强的安全性。 18 pasv_min_port=6001 #被动模式起始端口,0为随机分配 19 pasv_max_port=6005 #被动模式结束端口,0为随机分配 20 user_config_dir=/etc/vsftpd/userconfig #主目录配置,修改后到这个目录中在修改用户配置
1 干净的配置文件: 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 chroot_local_user=YES 11 chroot_list_file=/etc/vsftpd/chroot_list 12 ls_recurse_enable=NO 13 listen=YES 14 pam_service_name=vsftpd 15 userlist_enable=YES 16 userlist_deny=NO 17 allow_writeable_chroot=YES 18 tcp_wrappers=YES 19 pasv_min_port=6001 20 pasv_max_port=6005 21 user_config_dir=/etc/vsftpd/userconfig
修改完之后需要重启FTP服务刷新配置:
1 [root@vms100 vsftpd]# systemctl start vsftpd.service
四、新建用户并设置密码
1、新建用户:yuanftp
为ftp用户统一创建一个不能登录系统的shell,这一行的命令只运行一次即可,后面新建用户就不需要执行了;
1 [root@vms100 ~]# echo /usr/bin/nologin>>/etc/shells
[root@vms100 ~]# cat /etc/shells
/bin/sh
/bin/bash
/sbin/nologin
/usr/bin/sh
/usr/bin/bash
/usr/sbin/nologin
/usr/bin/nologin
创建用户:
1 [root@vms100 ~]# useradd -d /home/ftp_data/y1ftp -m -s /usr/bin/nologin y1ftp #y1ftp 是用户名及文件
- 指定用户主目录
/home/ftp_data/y1ftp -m
- 指定用户的shell:
-s /usr/bin/nologin
2、设置用户y1ftp的密码
1 [root@vms100 ~]# passwd y1ftp
五、允许新建用户登录FTP
[root@vms100 ~]# vim /etc/vsftpd/user_list
root
bin
daemon
adm
lp
sync
shutdown
halt
mail
news
uucp
operator
games
nobody
y1ftp
六、自定义用户主目录
如果你在上面没有指定用户的目录,建议继续往下看。
在这里我们准备把用户主目集中放到/home/data/ftp下集中管理。之前我们在/etc/vsftpd/vsftpd.conf配置文件中写了这么一行:user_config_dir=/etc/vsftpd/userconfig ,那么这一行的作用是什么呢?就是定义用户的主目录。userconfig默认是没有的,必须新建。然后我们可以把,给每个用户定义的主目录配置文件放到这个目录里面下。就可以实现自定义主目录
1、新建主目录配置
[root@vms100 ~]# cd /etc/vsftpd
[root@vms100 vsftpd]# mkdir userconfig
[root@vms100 vsftpd]# vim /etc/vsftpd/userconfig/y1ftp
#写一个配置文件:名称为fpt用户名称一致,在文件中写入下面:
local_root=/home/ftp_data/y1ftp
2、给用户新建主目录并授权
1 [root@vms100 ~]# mkdir -p /home/ftp_data/y1ftp 2 [root@vms100 ~]# chmod -R 777 /home/ftp_data/y1ftp
七、防火墙配置
1 firewall-cmd --version #查看防火墙版本3 firewall-cmd --zone=public --add-port=5000-5005/tcp --permanent #开启6000-6005 tcp端口5 firewall-cmd --reload #刷新,重新载入7 firewall-cmd --zone=public --query-port=5000-5005/tcp #检测端口是否开启
vsftpd.conf配置文件的详细解析:
1 anonymous_enable=NO #是否开启匿名用户,匿名都不安全,不要开 2 local_enable=YES #允许本机账号登录FTP 3 write_enable=YES #允许账号都有写操作 4 local_umask=022 #意思是指:文件目录权限:777-022=755,文件权限:666-022=644,这有点反人类了,并且没有人跟我说是减去的。注意理解! 5 #anon_upload_enable=YES #匿名用户是否有上传文件的功能,不要开 6 #anon_mkdir_write_enable=YES #匿名用户是否有创建文件夹的功能,不要开 7 dirmessage_enable=YES #进入某个目录的时候,是否在客户端提示一下 8 xferlog_enable=YES #日志记录 9 connect_from_port_20=YES #开放port模式的20端口的连接 10 #chown_uploads=YES #允许没人认领的文件上传的时候,更改掉所属用chown_uploads=YES的前提下,所属的用户 11 #xferlog_file=/var/log/xferlog #日志存放的地方 12 xferlog_std_format=YES #日志成为std格式 13 #idle_session_timeout=600 #用户无操作服务器会主动断开连接,单位秒 14 #data_connection_timeout=120 #数据连接超时 15 #nopriv_user=ftpsecure #以 ftpsecure 作为此一服务执行者的权限。因为ftpsecure 的权限相当的低,因此即使被入侵,入侵者仅能取得nobody 的权限喔! 16 #async_abor_enable=YES #异步停用,由客户发起 17 #ascii_upload_enable=YES #使用ascii格式上传文件 18 #ascii_download_enable=YES #使用ascii格式下载文件 19 #ftpd_banner=Welcome to blah FTP service #欢迎词 20 #deny_email_enable=YES #以anonymous用户登录时候,是否禁止掉名单中的emaill密码。 21 #banned_email_file=/etc/vsftpd/banned_emails #以anonymous用户登录时候,所禁止emaill密码名单。 22 chroot_local_user=YES #限制用户只能在自己的目录活动 23 #chroot_list_enable=YES #例外名单,如果是YES的话,这个有点怪,不懂别乱开,上面的选项会跟这个名单反调(会被上面的选项影响)。 24 #chroot_list_file=/etc/vsftpd/chroot_list 25 ls_recurse_enable=NO #是否允许使用ls -R等命令 26 listen=YES #监听ipv4端口,开了这个就说明vsftpd可以独立运行,不用依赖其他服务。 27 #listen_ipv6=YES #监听ipv6端口,还没普及呢! 28 pam_service_name=vsftpd #pam模块的名称,放置在 /etc/pam.d/vsftpd ,认证用 29 userlist_enable=YES #使用允许登录的名单 30 userlist_deny=NO #限制允许登录的名单,前提是userlist_enable=YES,其实这里有点怪~! 31 allow_writeable_chroot=YES #允许限制在自己的目录活动的用户 拥有写权限 32 tcp_wrappers=YES #Tcp wrappers : Transmission Control Protocol (TCP) Wrappers 为由 inetd 生成的服务提供了增强的安全性。 33 user_config_dir=/etc/vsftpd/userconfig #主目录配置,修改后到这个目录中在修改用户配置 34 35 pasv_min_port=6000 (0为随机分配) 36 pasv_max_port=6010(这两项定义了可以同时执行下载链接的数量。) 37 #被动模式端口范围:注意:linux客户端默认使用被动模式,windows 客户端默认使用主动模式。在ftp客户端中执行"passive"来切换数据通道的模式。也可以使用"ftp -A ip"直接使用主动模式。主动模式、被动模式是有客户端来指定的。
创建FTP用户脚本:
1 #bin/bash 2 3 read -p 请输入要新建的用户名: xinuser 4 5 #判断是否为空或名称重复 6 7 id $xinuser &>/dev/null 8 if [ $? -ne 0 ] 9 then 10 useradd -d /home/ftp_data/$xinuser -m -s /usr/bin/nologin $xinuser 11 echo $xinsuer >> /etc/vsftpd/user_list 12 echo "用户$xinuser成功创建" 13 passwd $xinuser 14 else 15 echo "用户$xinuser已存在或者输入用户名错误,程序已终止" 16 exit 17 fi
文章知识点:来源于兔子王cool
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了