1241天 Edwiin

还好有你,再见如初。

CentOS7.6 环境中YUM搭建Vsftpd_文件传输协议-FTP服务

发布于 10天前 / 48 次围观 / 0 条评论 / Linux / Edwiin

开头

文件传输协议(File Transfer Protocol,FTP)是用于在网络上进行文件传输的一套标准协议,它工作在 OSI 模型的第七层, TCP 模型的第四层, 即应用层, 使用 TCP 传输而不是 UDP, 客户在和服务器建立连接前要经过一个“三次握手”的过程, 保证客户与服务器之间的连接是可靠的, 而且是面向连接, 为数据传输提供可靠保证。

具体想了解这是啥?详细解说请看:https://www.linuxprobe.com/chapter-11.html

发展

准备的东西:

1、一台能正常上网的centos7虚拟机服务器

2、关闭防火墙和selinux

2、跟着敲...

本篇文章仅记录本地用户登陆设置及虚拟用户登陆设置,并且最终成功实现本地和虚拟共存登陆。匿名登陆就把anonymous改成yes即可。

高潮

本地用户登陆配置

yum安装vsftpd:

yum -y install vsftpd

安装好了就设置一下开机启动什么的,下面是这方面的代码

systemctl enable vsftpd.service //设置开机启动
systemctl start vsftpd.service //启动
systemctl stop vsftpd.service //停止
systemctl status vsftpd.service //查看状态

建议先备份一下vsftpd的配置文件:

cp /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf_bak

修改vsftpd配置文件,打开配置文件之后可以使用命令【:set number】显示行号:

vi /etc/vsftpd/vsftpd.conf

修改如下内容:

anonymous_enable=NO //不允许匿名访问 12行
local_enable=YES //允许使用本地帐户进行FTP用户登录验证 16行

使用户不能离开主目录:当chroot_list_enable=YES,chroot_local_user=YES时,在/etc/vsftpd.chroot_list文件中列出的用户,可以切换到其他目录;未在文件中列出的用户,不能切换到其他目录。

单独贴出来这一段,依然还是在vsftpd.conf里修改: 101行

chroot_local_user=YES
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list
allow_writeable_chroot=YES

配置文件里面没有的就需要自己手动添加,比如上面一句allow_writeable_chroot,这一句不添加之后运行服务就会有报错:500 OOPS: vsftpd: refusing to run with writable root inside chroot()。

通过搭配能实现以下几种效果:
  ①当chroot_list_enable=YES,chroot_local_user=YES时,在/etc/vsftpd.chroot_list文件中列出的用户,可以切换到其他目录;未在文件中列出的用户,不能切换到其他目录。

 ②当chroot_list_enable=YES,chroot_local_user=NO时,
在/etc/vsftpd.chroot_list文件中列出的用户,不能切换到其他目录;未在文件中列出的用户,可以切换到其他目录。

 ③当chroot_list_enable=NO,
chroot_local_user=YES时,所有的用户均不能切换到其他目录。

 ④当chroot_list_enable=NO,
chroot_local_user=NO时,所有的用户均可以切换到其他目录。

还可以设定支持ASCII模式的上传和下载功能:

ascii_upload_enable=YES
ascii_download_enable=YES

最后 :wq 保存conf的修改;现在需要新建一个文件:

vi /etc/vsftpd/chroot_list

新建进去直接:wq保存退出就行。

启动/重启vsftpd服务

service vsftpd start //启动服务
service vsftpd restart  //重启服务

新建一个FTP的用户:

useradd -d /var/ftp/www -g ftp -s /sbin/nologin ftpuser

这里的/var/ftp/www就是要显示的主目录,ftpftp组,ftpuser是新建的用户名。这句话串起来读就是:在ftp用户组中新建一个名字为ftpuser、登陆之后的地址为/var/ftp/www的目录下、只能用于登陆ftp服务的用户。ftpuser是自定的用户名哈。

sbin/nologin 会禁止使用SSH登陆只允许FTP登陆,如果强行使用SSH登陆的话将会返回拒绝信息“This account is currently not available”你可以自定义返回的信息,在 /etc/nologin.txt
修改刚刚建立的用户密码:

passwd ftpuser

然后我这里使用了8UFTP软件进行了登陆测试,输入ip地址、用户名、密码,默认端口21,登陆之后,Centos7情况下会给我返回错误信息:530 Login incorrect.

接下来需要进入pam.d文件夹编辑vsftpd文件:

vi /etc/pam.d/vsftpd

将下面这一条命令注释掉,就是前面加一个【#】号:

#auth required pam_shells.so

修改完成后保存退出,重启一下vsftpd服务,service vsftpd restart

然后再使用FTP软件连接就可以啦~上传下载删除都是没有问题的。

虚拟用户登陆配置

添加下列内容到vsftpd.conf末尾

use_localtime=YES //#ftp时间和系统同步,如果启动有错误,请注销
listen_port=21 //设置 FTP 服务的监听端口
idle_session_timeout=300 //#超时设置
guest_enable=YES //设定启用虚拟用户功能。
guest_username=vsftpd //指定虚拟用户的宿主用户
user_config_dir=/etc/vsftpd/vconf //设定虚拟用户个人Vsftp配置文件存放路径。
data_connection_timeout=1 //空闲1秒后服务器断开
virtual_use_local_privs=YES //当该参数激活(YES)时,虚拟用户使用与本地用户相同的权限。
pasv_min_port=40000 //设置被动模式的端口范围
pasv_max_port=40010 //设置被动模式的端口范围
accept_timeout=5 //保持5秒
connect_timeout=1 //1秒后重新连接

建立用户文件:

vi /etc/vsftpd/virtusers

写入以下内容,第一行为用户名,第二行为密码。不能使用root作为用户名:

yaoyuanlong
damingbai

生成用户数据文件:

db_load -T -t hash -f /etc/vsftpd/virtusers /etc/vsftpd/virtusers.db

设定PAM验证文件,并指定对虚拟用户数据库文件进行读取:

chmod 600 /etc/vsftpd/virtusers.db 

修改 /etc/pam.d/vsftpd 文件,修改前先备份:

cp /etc/pam.d/vsftpd /etc/pam.d/vsftpd.bak
vi /etc/pam.d/vsftpd

先将配置文件中原有的 auth 及 account 的所有配置行均注释掉,然后在文件头加上以下内容:

auth sufficient /lib64/security/pam_userdb.so db=/etc/vsftpd/virtusers 
account sufficient /lib64/security/pam_userdb.so db=/etc/vsftpd/virtusers

下面贴上我的代码,成功解决了本地用户和共享用户的共存关系

#%PAM-1.0
auth sufficient /lib64/security/pam_userdb.so db=/etc/vsftpd/virtusers
account sufficient /lib64/security/pam_userdb.so db=/etc/vsftpd/virtusers
session    optional     pam_keyinit.so    force revoke
auth       required     pam_listfile.so item=user sense=deny file=/etc/vsftpd/ftpusers onerr=succeed
#auth       required    pam_shells.so
auth       include      password-auth
account    include      password-auth
session    required     pam_loginuid.so
session    include      password-auth

注:如果系统为32位,上面改为lib

新建系统用户vsftpd,用户目录为/home/vsftpd:

#用户登录终端设为/bin/false(即:使之不能登录系统)
useradd vsftpd -d /home/vsftpd -s /bin/false
chown -R vsftpd:vsftpd /home/vsftpd

建立虚拟用户个人配置文件:

mkdir /etc/vsftpd/vconf
cd /etc/vsftpd/vconf

#这里建立虚拟用户yaoyuanlong配置文件
touch yaoyuanlong

#编辑yaoyuanlong用户配置文件,内容如下,其他用户类似
vi yaoyuanlong

local_root=/home/vsftpd/yaoyuanlong/
write_enable=YES
anon_world_readable_only=NO
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES

#建立yaoyuanlong用户根目录
mkdir -p /home/vsftpd/yaoyuanlong/

最后,重启服务

systemctl restart vsftpd.service

结局

1、怎么设置欢迎语?

答:vi /etc/vsftpd/vsftpd.conf之后,找到ftpd_banner=,等号后面的内容就是欢迎语了,设置完成重启vsftpd服务

2、怎么连接ftp服务器?

答:命令行访问。

利用cmd命令打开命令行,输入ftp命令进入ftp命令,open 主机[端口号],就可以输入用户名和密码进行登录了了,遇到不知道输入什么命令可以直接输入?询问。这里介绍如下几个命令:open:与ftp服务器相连接; send(put):上传文件;get:下载文件; mget:下载多个文件; cd:切换目录; dir:查看当前目录下的文件; del:删除文件;bye:中断与服务器的连接。

浏览器访问。

使用命令ftp://username:password@hostname:port 如:ftp:admin:admin@127.0.0.1:1990能够直接显示连到FTP服务器指定文件夹目录下。如果你记不住也可以直接输入ftp://127.0.0.1:1990/,会弹出输入账户和密码的弹框,输入后也能正确连到FTP服务器。将会弹出提示框,需要输入用户名密码。

资源管理器访问。

打开我的电脑,在文件路径中,输入ftp://网址;弹出打开ftp文件夹,将会弹出提示框,需要输入用户名密码。可以像操作本地文件一样进行复制粘贴托拉拽等等操作,比较方便。

通过客户端工具访问

有很多客户端软件能够轻松帮我们连接FTP服务器实现文件的上传下载

在桌面上新建快捷方式

方便需要时不时连接FTP的用户,右键单击选择新建快捷方式,直接访问快捷方式地址:%SystemRoot%/explorer.exe ftp://用户名:密码@服务器网址;这里我使用的是D:\software\firefox\firefox.exe ftp:admin:admin@127.0.0.1:1990。

3、虚拟用户没有上传权限?

答:给目录权限即可:

chmod -R 777 /home/vsftpd/yaoyuanlong

4、本地用户和虚拟用户无法同时登陆呢?提示530错误?

答:文中已经提到,主要是pam文件的修改,和新增加的两条代码,需要放到文件头上,如下是我的配置文件:

#%PAM-1.0
auth sufficient /lib64/security/pam_userdb.so db=/etc/vsftpd/virtusers
account sufficient /lib64/security/pam_userdb.so db=/etc/vsftpd/virtusers
session    optional     pam_keyinit.so    force revoke
auth       required     pam_listfile.so item=user sense=deny file=/etc/vsftpd/ftpusers onerr=succeed
#auth       required    pam_shells.so
auth       include      password-auth
account    include      password-auth
session    required     pam_loginuid.so
session    include      password-auth

本文需要屏蔽pam_shells.so才可以正常登陆本地用户,以下是我成功连接,并且上传下载重命名测试成功:

5、测试连接的时候太慢了,别人都是一连接就秒通,怎么办?

答:vi /etc/vsftpd/vsftpd.conf之后,添加一句如下代码

reverse_lookup_enable=NO

保存退出,重启vsftpd服务即可。

6、我电脑太卡了,又没钱买服务器来搭建,但是我又想学怎么办呢?

答:既然这么想学习,那就去腾讯云开发者实验室,在线体验本实验:https://cloud.tencent.com/developer/labs/lab/10002