开头
文件传输协议(File Transfer Protocol,FTP)是用于在网络上进行文件传输的一套标准协议,它工作在 OSI 模型的第七层, TCP 模型的第四层, 即应用层, 使用 TCP 传输而不是 UDP, 客户在和服务器建立连接前要经过一个“三次握手”的过程, 保证客户与服务器之间的连接是可靠的, 而且是面向连接, 为数据传输提供可靠保证。
具体想了解这是啥?详细解说请看:https://www.linuxprobe.com/chapter-11.html
发展
准备的东西:
1、一台能正常上网的centos7虚拟机或服务器
2、关闭防火墙和selinux
2、跟着敲...
本篇文章仅记录本地用户登陆设置及虚拟用户登陆设置,并且最终成功实现本地和虚拟共存登陆。匿名登陆就把anonymous改成yes即可。
高潮
本地用户登陆配置
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就是要显示的主目录,ftp是ftp组,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服务。
答:命令行访问。
利用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
撰写评论