目录
1、FTP服务概述
2、在服务端安装vsftpd程序
3、基于匿名用户验证访问的 FTP 服务
4、测试匿名 FTP服务
5、基于用户验证访问的FTP服务
6、基于用户验证访问的FTP服务的测试
7、FTP的其他服务
8、基于虚拟用户验证访问的FTP服务
9、基于虚拟用户验证访问FTP服务的测试
写在开头,作者是小白,刚开始学习linux这一块的知识,所以文章可能写的有些乱和繁杂,希望读者能够理解,因为是初学者,所以文中有些观点可能并不正确,希望有大佬能够指出,拜谢!!
1、FTP服务概述
FTP连接及连接模式
控制连接:TCP 21(端口号),用于发送FTP命令信息
数据连接:TCP 20(端口号),用于上传,下载数据
数据连接的建立类型
主动模式:服务端从20端口主动向客户端发起连接
被动模式:服务端在指定范围内某个端口被动等待客户端连接
从运维角度来看,被动模式比较合适
####FTP 传输模式####
1、主动模式:
服务器主动发起数据连接。首先客户端向服务器的21端口建立FTP管理连接
客户端以PORT命令告诉服务器“我打开了某个端口”你来连我。
这个时候服务器以源端口20(用于发送数据的端口) 向客户端“我打开了某个端口”(随机端口号)请求并建立连接。
2、被动模式:场景:客户端有防火墙。
客户机主动发起数据连接。首先客户端向服务器的21端口建立FTP管理连接
客户端有防火墙,这个时候服务器连接客户机是连不起来的,因为客户端有
防火墙,需要被动模式,
服务端以PASV命令告诉客户端“我打开了某个端口”你来连我。
于是客户端以随机端口号向服务端“我打开了某个端口”进行建立数据连接
文本模式:又称为ASCII模式,一般用于存文本的传输。
二进制模式:这种模式不会转换文件中文本的字符序号
在二者之间,二进制模式比文本模式更有效率,大多数FTP客户端工具可以根据文件类型自动选择文件传输模式,无需指定
###FTP 用户的类型###
1、匿名用户
2、本地用户(放在/etc/vsftpd/user_list中的用户)
3、虚拟用户
###Vsftpd 软件包##
1、官方站点:/
2、主程序:/usr/sbin/vsftpd
3、服务名:vsftpd
4、用户控制列表文件
/etc/vsftpd/ftpusers /etc/vsftpd/user_list
5、主配置文件
/etc/vsftpd/vsftpd.conf
###常见的 FTP 客户端程序###
1、ftp 命令
2、CuteFTP
3、FlashFXP
4、LeapFTP
5、Filezilla
6、gftp
8、kuftp
###常见的 FTP 服务器程序###
1、IIS
2、Serv-U
3、wu-ftpd
4、Proftpd
5、vsftpd(Very Secure FTP Daemon)
2、在服务端安装vsftpd程序
关闭防火墙
[root@localhost ~]# systemctl stop firewalld ##当前关闭防火墙,临时的
[root@localhost ~]# systemctl disable firewalld ##开机不启用防火墙 永久关闭的
关闭核心防护(和写数据有关系的)
[root@localhost ~]# setenforce 0 ##当前关闭核心防护,临时的
[root@localhost ~]# vi /etc/selinux/config ##开机不启核心防护 永久关闭的
SELINUX=disabled
[root@localhost ~]# init 6 ##重启虚拟机
[root@zhengkun ~]# rpm -qa | grep vsftpd ##查看是否安装了vsftpd
【注意】服务端安装的是vsftpd,只有安装vsftpd才会有ftp目录和pub目录以及匿名用户ftp等。
##如果没有安装
[root@localhost ~]# mount /dev/cdrom /mnt ####挂载光盘 ##rpm安装 [root@localhost ~]# rpm -ivh /mnt/Packages/vsftpd-3.0.2-22.el7.x86_64.rpm ####安装FTP软件包
用rpm安装,还需要永久挂载光盘。否则重启虚拟机挂载的光盘就没了。
或者使用yum安装(需要先配置yum源,配置本地源或者线网源) [root@localhost ~]# yum -y install vsftpd ####安装FTP软件包
####基于匿名访问 FTP 服务---####
1、准备匿名 FTP 访问的目录
FTP的根目录是不允许匿名用户或者其他用户有写入权限(否则有500报错的) 为了后续测试方便,可以在/var/ftp目下创建一个测试文件(压缩包)
[root@localhost ~]# tar zcf /var/ftp/vsftpdconf.tar.gz /etc/vsftpd
[root@localhost ~]# ll /var/ftp
总用量 4
drwxr-xr-x 2 root root 6 8月 3 pub
-rw-r--r-- 1 root root 2795 9月 29 18:24 vsftpdconf.tar.gz
3、基于匿名用户验证访问的 FTP 服务
[root@localhost ~]# cp /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf.bak
###备份一下vsftpd.conf文件,并将备份的文件改名为vsftd.conf.bak。
[root@localhost ftp]# grep -vE "^#|^$" /etc/vsftpd/vsftpd.conf ####过滤相关配置文件
anonymous_enable=YES
local_enable=YES
write_enable=YES
local_umask=022
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
########根据上述配置,编辑匿名配置脚本 #########
[root@localhost ~]# vi /etc/vsftpd/vsftpd.conf ####编辑匿名登录配置文件
anonymous_enable=YES ####允许匿名访问
local_enable=NO ####若不需要启动本地用户,可以设置NO
write_enable=YES####开放服务器的写入权限
anon_umask=022 ####设置匿名用户上传数据的权限掩码
anon_upload_enable=YES ####允许匿名用户上传文件
anon_mkdir_write_enable=YES####允许匿名用户创建目录
anon_other_write_enable=YES####允许匿名用户覆盖删除等管理操作
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
listen=YES
listen_ipv6=NO
pam_service_name=vsftpd
userlist_enable=NO ####因未启用本地用户,可将用户列表功能禁用
tcp_wrappers=YES
方便大家复制
匿名访问共享文件的vsftpd.conf的配置
anonymous_enable=YES local_enable=NO write_enable=YES anon_umask=022 anon_upload_enable=YES anon_mkdir_write_enable=YES anon_other_write_enable=YES dirmessage_enable=YES xferlog_enable=YES connect_from_port_20=YES xferlog_std_format=YES listen=YES listen_ipv6=NO
pam_service_name=vsftpd userlist_enable=NO tcp_wrappers=YES
[root@localhost ~]# systemctl start vsftpd#####启动vsftpd服务 [root@localhost ~]# netstat -anpt | grep "vsftpd" #####查看vsftpd服务是否启动 有21端口表示开启 ,如果提示没有netstat命令,表示没有安装net-tools,用yum安装,安装一下my-tools: yum -y istall net-tools
tcp 0 0 0.0.0.0:21 0.0.0.0:* LISTEN 59598/vsftp
4、测试匿名 FTP服务
第一种测试方法:
Window主机在我的电脑浏览器地址栏中输入ftp://20.0.0.54/ 就可以进行匿名访问。
不能直接在ftp目录下进行传文件 下文件 删文件操作。因为ftp目录不允许匿名用户修改。即使修改ftp目录的访问权限也需要用户登录。
所以只能在pub中进行操作。所以要更改pub的权限为757,重启一下vsftpd服务,再用ftp://20.0.0.54/pub就可以在在里面进行传文件 下文件 删文件操作。
第二种测试方法:
另起一台虚拟机作为客端【注意】客户端安装的是ftp程序,安装ftp才能用ftp命令。
[root@localhost ~]# yum -y install ftp ###yum安装 ftp软件 也可以用rpm安装 [root@localhost ~]# ftp 20.0.0.54 ###ftp客户端连接 20.0.0.54,这个ip地址根据你的服务端的ip地址来定
提示successful表示登陆成功
使用ftp作为Name(用户名)登录,ftp服务中的ftp用户就表示匿名用户,相当于samba服务中的nobody用户,所以这也是一种匿名用户登录方式。匿名用户登录不需要输入Password直接回车就行。
【插个知识点】
{
虚拟机的账号信息存放在/etc/passwd目录下,可以用下行命令查看账号信息
less /etc/passwd ###表示查看账号信息
查看用户详细信息时,最后面是/sbin/nologin,像上图这样的,表示该账号是程序账号。
}
###客户端从服务端下载文件###
ftp> lcd /opt ####将本地目录切换到/opt目录
ftp> get vsftpdconf.tar.gz ####下载vsftpdconf.tar.gz到/opt
ftp> quit####退出
ll /opt####查看opt目录是否下载成功
###客户端向服务端上传文件###
ftp> cd pub ####将ftp目录切换到pub目录
ftp> ls ####ls查看一下pub目录的内容
ftp> lcd /root ####将本地目录切换到/root目录
ftp> put initial-setup-ks.cfg ####上传initial-setup-ks.cfg【注:这里我上传的是文件,如果上传文件夹会报错not a plain file:有知道怎么解决的大神希望可以帮忙评论一下】
ftp> ls ####从新查看pub目录的内容,查看是否上传成功
输入quit,退出ftp命令行
###直接用wget下载文件
wget ftp://20.0.0.54/vsftpdconf.tar.gz 【注】此时你的工作目录在哪,文件就会下载在哪。
5、基于用户验证访问的FTP服务
[root@localhost opt]# useradd laya###新建账户laya [root@localhost opt]# passwd laya###设置账户密码
[root@localhost opt]# useradd vanko###新建账户laya [root@localhost opt]# passwd vanko###设置账户密码
[root@localhost opt]# useradd hunter###新建账户laya [root@localhost opt]# passwd hunter###设置账户密码
[root@l###修改vsftpd.conf配置文件###ocalhost ~]# vi /etc/vsftpd/vsftpd.conf anonymous_enable=YES local_enable=YES write_enable=YES local_umask=077 chroot_local_user=YES allow_writeable_chroot=YES anon_umask=022 anon_upload_enable=YES anon_mkdir_write_enable=YES anon_other_write_enable=YES dirmessage_enable=YES xferlog_enable=YES connect_from_port_20=YES xferlog_std_format=YES listen=YES listen_ipv6=NO
pam_service_name=vsftpd userlist_enable=NO tcp_wrappers=YES
#####重启vsftpd服务#### [root@localhost ~]# systemctl restart vsftpd
####在客户端重新登录ftp,登录到20.0.0.54#####
[root@zhengkun var]# ftp 20.0.0.54
这里的密码就是刚才创建账号时的密码。
6、基于用户验证访问的FTP服务的测试
[root@localhost opt]# ls >uptest.txt ####在/opt目录下做一个测试文件 [root@localhost opt]# ftp 20.0.0.54 ####登录ftp Name (192.168.32.16:root): laya ####使用laya账户
ftp> put uptest.txt ####上传测试文件 ftp> ls###查看测试文件 ftp> quit 【注】这里的测试文件是上传在laya的家目录下的 cd /home/laya
####给账户登录做下白名单,使用部分账户能登录#####
[root@localhost ~]# vi /etc/vsftpd/user_list #####在白名单上添加账户laya laya [root@localhost ~]# vi /etc/vsftpd/ftpusers #####在ftpusers上添加账户vanko
vanko
hunter账号不进行任何操作
【ftpusers不收vsftpd.conf配置的影响,它是一个黑名单,在他上面的账号,不允许登入ftp】
#####重新配置vsftpd.conf######
[root@localhost ~]# vi /etc/vsftpd/vsftpd.conf
anonymous_enable=YES local_enable=YES write_enable=YES local_umask=077 chroot_local_user=YES allow_writeable_chroot=YES anon_umask=022 anon_upload_enable=YES anon_mkdir_write_enable=YES anon_other_write_enable=YES dirmessage_enable=YES xferlog_enable=YES connect_from_port_20=YES xferlog_std_format=YES listen=YES listen_ipv6=NO
pam_service_name=vsftpd userlist_enable=YES #####这个白名单功能开启 userlist_deny=NO#####黑名单功能关闭 不禁用user_list列表中的用户tcp_wrappers=YES
#####重启vsftpd服务器#### [root@localhost ~]# systemctl restart vsftpd
####这样配置,user_list起到的就是白名单的作用,此时只有user_list中的账号允许登录。也就是只有laya账号可以登陆####
####修改一下userlist_enable和userlist_deny就可以将user_list变为黑名单####
userlist_enable=YES #####这个白名单功能开启 userlist_deny=YES #####黑名单功能如果也开启
#####重启vsftpd服务器#### [root@localhost ~]# systemctl restart vsftpd
####这样配置,user_list起到的就是黑名单的作用,此时只有user_list中的账号就不允许登录了,也就是说只有hunter账号可以登陆####
7、FTP的其他服务
1、修改vsftpd服务的监听地址、端口 [root@localhost ~]# vi /etc/vsftpd/vsftpd.conf 。。。。。省略。。。。。 listen=YES
listen_address=20.0.0.54 ###修改监听地址
listen_port=2121###修改端口(默认端口是21)
[root@localhost ~]# systemctl restart vsftpd
#####测试#####
#####在客户端登录ftp######
ftp 20.0.0.54 2121 ####因为修改了端口号,所以登录时要加端口号2121####
2.限制FTP的并发连接数,传输速度
vi /etc/vsftpd/vsftpd.conf
追加配置
max_clients=20 ####限制并发的客户端最大是20个 max_per_ip=2 ####限制一个IP的最大连接数是2个 local_max_rate=200000 ####限制本地用户的传输速率是200KB/S
[root@localhost ~]# systemctl restart vsftpd
8、基于虚拟用户验证访问的FTP服务
###最好重新配置一下yum源,不然会有一些莫名其妙的错误###
###首先关闭防火墙和核心防护###
####在服务端yum安装vsftpd####
####vi /etc/vsftpd/vusers.list,配置虚拟用户####
【注】奇数行是账号,偶数行是密码。
####此时查看vusers.list发现是明文,不安全#####
####创建DB格式的数据文件对vusers.list进行加密-----特点:这个文件是加密的#### [root@localhost ~]# cd /etc/vsftpd/ [root@localhost vsftpd]# db_load -T -t hash -f vusers.list vusers.db [root@localhost vsftpd]# file vusers.db
#####出于安全考虑将vusers.list和vusers.db的权限改为600####
【
插个知识点: samba服务的共享文件夹opt就放在根目录下 /opt ftp服务的共享文件夹ftp放在根目录下的var目录下 /var/ftp
】
添加虚拟用户映射的账号、创建FTP的根目录
[root@zhengkun vsftpd]# useradd -d /var/ftproot -s /sbin/nologin virtual
[root@zhengkun vsftpd]# cd /var/ftproot/
[root@zhengkun ftproot]# ll
####查看ftproot目录的详细信息,发现访问权限不够,需要修改,改为755###
[root@zhengkun vsftpd]# cd /var/ftproot [root@zhengkun ftproot]# chmod 755 /var/ftproot/ [root@zhengkun ftproot]# ll /var
###在ftproot中建立两个目录,虚拟账户的目录###
[root@zhengkun ftproot]# mkdir john [root@zhengkun ftproot]# mkdir mike
为虚拟用户建立PAM认证模块
[root@localhost ftproot]# vi /etc/pam.d/vsftpd.vu #%PAM-1.0 auth required pam_userdb.so db=/etc/vsftpd/vusers account required pam_userdb.so db=/etc/vsftpd/vusers
修改vsftpd配置、添加虚拟用户支持、为不同用户建立独立的配置文件
[root@localhost ftproot]# vi /etc/vsftpd/vsftpd.conf
anonymous_enable=NO (当然你也可以设成YES,同时允许匿名用户登陆)
local_enable=YES (必须置YES,因为虚拟用户是映射到virtual这个本地用户来访问的) guest_enable=YES(启用虚拟用户)
anon_umask=022 (虚拟用户的umask值) guest_username=virtual(将虚拟用户映射为本地virtual用户) pam_service_name=vsftpd.vu(指定PAM配置文件,文件已经在/etc/pam.d/存在) user_config_dir=/etc/vsftpd/vusers_dir(指定不同虚拟用户配置文件的存放路径)
创建vusers_dir目录用来存放虚拟用户配置文件(要与前面不同虚拟用户配置文件的存放路径保持一致)
mkdir /etc/vsftpd/vusers_dir
###查看是否创建成功
cd /etc/vsftpd/vusers_dir
###为虚拟用户john创建配置文件###
vi john
local_root=/var/ftproot/john (用户目录在哪) anon_upload_enable=YES (是否允许上传) anon_mkdir_write_enable=YES (是否允许创建目录) anon_other_write_enable=YES(是否允许写)
###为虚拟用户mike创建配置文件###
local_root=/var/ftproot/mike (用户目录在哪) anon_mkdir_write_enable=NO(是否允许创建目录) anon_other_write_enable=NO(是否允许写)
###重启一下vsftpd服务###
systemctl restart vsftpd
systemctl enable vsftpd ###将vsftpd服务设置为开机自启###
9、基于虚拟用户验证访问FTP服务的测试
###用Xftp7 登录ftp20.0.0.53,或者直接在文件地址栏中输入ftp://20.0.0.53发现登陆不了,会报一个500的错###
###这里会有个bug必须加上下面这句,新建一个john组,将用户john添加到john组中,shell描述改为程序账户才能登录##
groupadd john adduser -g john -s /sbin/nologin john
###然后再试###
就可以登录了。
尝试新建文件夹,有可能会报错,我做了两遍,第一遍直接可以新建,第二遍需要用下面的命令更改一下ftproot路径下的所有文件或文件夹的访问权限
chmod 777 -R /var/ftproot
改完之后就可以新建了