第四章 构建FTP服务器
本节课所讲内容:
4.1、VSFTP服务器概述
4.2、安装配置VSFTP
4.3、实战:匿名访问VSFTP
4.4、实战:用户名密码方式访问VSFTP
4.5、实战:虚拟用户访问VSFTP
4.6、NFS概述-配置NFS服务器并实现开机自动挂载

正文部分:

FTP服务端:ftp-server IP:192.168.26.71
FTP客户端:ftp-client IP:192.168.26.72
4.1、VSFTP服务器概述
FTP服务器(File Transfer Protocol Server)是在互联网上提供文件存储和访问服务的计算机,它们依照FTP协议提供服务。
FTP作用: Internet 上用来传送文件的协议
常见FTP服务器:
windows:Serv-U FTP Server,filezilla_server
Linux: VSFTP一个Unix平台上或是类Unix平台上(如Linux, FreeBSD等)安全、高速、稳定FTP服务器程序
[root@node1 ~]# cat /etc/services |grep ftp
ftp-data 20/tcp
ftp-data 20/udp

21 is registered to ftp, but also used by fsp

ftp 21/tcp
ftp 21/udp fsp fspd
常用FTP端口:TCP/UDP 20-21
20常用于数据传输  21常用于密码验证
[root@node1 ~]# cat /etc/services |grep ftp
ftp-data 20/tcp
ftp-data 20/udp

21 is registered to ftp, but also used by fsp

ftp 21/tcp
ftp 21/udp fsp fspd

4.2、安装配置VSFTP
4.2.1、安装VSFTP
安装服务端:
[root@ftp-server ~]# yum -y install vsftpd ftp
安装客户端:
[root@ftp-client ~]# yum -y install ftp
4.2.2、配置文件位置:
1)vsftpd 相关文档
/etc/vsftpd/vsftpd.conf:vsftpd 的核心配置文件
/etc/vsftpd/ftpusers:用于指定哪些用户不能访问FTP 服务器。 黑名单
/etc/vsftpd/user_list:指定允许使用vsftpd 的用户列表文件。 白名单
/etc/vsftpd/vsftpd_conf_migrate.sh:是vsftpd 操作的一些变量和设置脚本
/var/ftp/:默认情况下匿名用户的根目录
[root@ftp-server ~]# cat /etc/vsftpd/user_list

vsftpd userlist

If userlist_deny=NO, only allow users in this file

If userlist_deny=YES (default), never allow users in this file, and

do not even prompt for a password.

Note that the default vsftpd pam config also checks /etc/vsftpd/ftpusers

for users that are denied.

…………

[root@ftp-server ~]#systemctl start vsftpd && systemctl enable vsftpd
Created symlink from /etc/systemd/system/multi-user.target.wants/vsftpd.service to /usr/lib/systemd/system/vsftpd.service.
[root@ftp-server ~]# netstat -tunlp |grep ftp
tcp6 0 0 :::21 ::: LISTEN 1412/vsftpd
此时VSFTPD监控IPV6需要修改配置文件
[root@ftp-server ~]# vim /etc/vsftpd/vsftpd.conf
115行listen=NOlisten=YES
124行listen_ipv6=NOlisten_ipv6=YES
[root@ftp-server ~]# systemctl restart vsftpd
[root@ftp-server ~]# netstat -tunlp |grep ftp
tcp 0 0 0.0.0.0:21 0.0.0.0:
LISTEN 1474/vsftpd
此时vsftpd已经可以正常运行
4.3、实战:匿名访问VSFTP--不常用
[root@ftp-server ~]# cp /etc/vsftpd/vsftpd.conf{,.bak}
[root@ftp-server ~]# vim /etc/vsftpd/vsftpd.conf
12行:anonymous_enable=YES
29行:anon_upload_enable=YES 去掉注释
33行:anon_mkdir_write_enable=YES 去掉注释
34行:anon_other_write_enable=YES 增加一行
[root@ftp-server ~]# systemctl restart vsftpd
说明:
【默认匿名用户的目录在/var/ftp/pub/位置上】
在windows登录,测试匿名访问VSFTP是否成功

此时说明匿名用户成功

4.4、实战:用户名密码方式访问VSFTP--较常用
4.4.1:实战环境与要求介绍
用实战的方式来说明问题:web服务器上的代码需要更新,为了安全起见,建立一个webuser普通用户来更新网站代码,锁定用户只能访问此网站目录:/www
实战说明:
1)ftp 和web服务器相结合。
2)web服务器根目录: /www
3)权限要求:webuser用户可以上传文件、图片等同时vsftp禁止匿名
分析:首先需要使用仅允许本地用户访问,并禁止匿名用户登录。其次使用chroot 功能将webuser 锁定在/www 目录下。如果需要删除文件则还需要注意本地权限,webuser不能通过ssh登录本机
4.4.2:操作过程如下:
1)建立维护网站FTP账号且禁止本地登录的用户webuser;然后设置相应的密码
[root@ftp-server ~]# useradd -s /sbin/nologin webuser
[root@ftp-server ~]# echo 'webuser' | passwd --stdin webuser
Changing password for user webuser.
passwd: all authentication tokens updated successfully.
2)删除以前配置过的vsftpd.conf,重新修改配置文件达到要求
[root@ftp-server ~]# rm -rf /etc/vsftpd/vsftpd.conf && cp /etc/vsftpd/vsftpd.conf.bak /etc/vsftpd/vsftpd.conf
[root@ftp-server ~]# vim /etc/vsftpd/vsftpd.conf
12行:anonymous_enable=YES-->anonymous_enable=NO 修改:禁止匿名用户登录
16行:local_enable=YES 去掉注释:允许本地用户登录
101行:local_root=/www 增加一行:设置本地用户的根目录为/www
102行:chroot_list_enable=YES 去掉注释:激chroot 功能
105行:chroot_list_file=/etc/vsftpd/chroot_list 去掉注释:设置锁定用户在根目录中的列表文件。此文件存放要锁定的用户名
106行:allow_writeable_chroot=YES 增加一行:允许锁定的用户有写的权限
保存退出
3)建立/etc/vsftpd/chroot_list 文件,添加帐号
[root@ftp-server ~]# vim /etc/vsftpd/chroot_list
[root@ftp-server ~]# cat /etc/vsftpd/chroot_list --写入以下内容格式:一行一个用户名
webuser
4)修改本地文件夹权限
[root@ftp-server ~]# setfacl -R -m u:webuser:rwx /www
5)重启vsftpd服务
[root@ftp-server ~]# systemctl restart vsftpd
登陆测试

成功登录,测试功能

此实战完成,达到相关要求

4.5、实战:虚拟用户访问VSFTP--最常用
用实战的方式来说明问题:web服务器上的代码需要更新,为了安全起见,建立用户来更新网站代码,锁定用户只能访问指定目录:
实战说明:
1)ftp 和web服务器相结合。
2)web服务器有两个不同域名的网站,两个网站根目录: /www/oa /www/erp
3)权限要求:weboa和weberp用户只能对相应的目录做操作同时vsftp禁止匿名
操作步骤如下:
1)创建虚拟用户
[root@ftp-server ~]# cd /etc/vsftpd/
[root@ftp-server vsftpd]#vim users.list
[root@ftp-server vsftpd]# cat users.list
weboa
123456
weberp
654321
说明:users.list 保存是虚拟用户列表,其中奇数行为账户名,偶数行为密码
[root@ftp-server vsftpd]# db_load -T -t hash -f users.list users.db
[root@ftp-server vsftpd]# file users.db
users.db: Berkeley DB (Hash, version 9, native byte-order)
[root@ftp-server vsftpd]# chmod 600 users.*
2)增加pam认证
[root@ftp-server vsftpd]# vim /etc/pam.d/vsftpd.vu
添加两行
[root@ftp-server vsftpd]# cat /etc/pam.d/vsftpd.vu
auth required pam_userdb.so db=/etc/vsftpd/users
account required pam_userdb.so db=/etc/vsftpd/users
说明:此处不用加.db
3)修改vsftpd.conf配置文件并重启
[root@ftp-server ~]# rm -rf /etc/vsftpd/vsftpd.conf && cp /etc/vsftpd/vsftpd.conf.bak /etc/vsftpd/vsftpd.conf
[root@ftp-server ~]# vim /etc/vsftpd/vsftpd.conf
115行listen=NOlisten=YES
124行listen_ipv6=NOlisten_ipv6=YES
12行:anonymous_enable=YES-->anonymous_enable=NO 修改:禁止匿名用户登录
53行:xferlog_file=/var/log/xferlog 去掉注释
126行:pam_service_name=vsftpd-->pam_service_name=vsftpd.vu 修改:指定pam文件位置
129行:guest_enable=YES 增加一行
130行:guest_username=nobody 增加一行
131行:user_config_dir=/etc/vsftpd/users.dir 增加一行
132行:allow_writeable_chroot=YES 增加一行
[root@ftp-server vsftpd]# cat vsftpd.conf |grep -v ^#
anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_file=/var/log/xferlog
xferlog_std_format=YES
listen=YES
listen_ipv6=NO

pam_service_name=vsftpd.vu
userlist_enable=YES
tcp_wrappers=YES
guest_enable=YES
guest_username=nobody
user_config_dir=/etc/vsftpd/users.dir
allow_writeable_chroot=YES
4)创建虚拟用户目录并设置用户主目录
[root@ftp-server vsftpd]# mkdir /etc/vsftpd/vusers.dir
[root@ftp-server vsftpd]# touch /etc/vsftpd/vusers.dir/weberp
[root@ftp-server vsftpd]# touch /etc/vsftpd/vusers.dir/weboa
[root@ftp-server vsftpd]# vim users.dir/weboa
[root@ftp-server vsftpd]# cat users.dir/weboa
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
anon_max_rate=0
local_root=/www/weboa
[root@ftp-server vsftpd]# vim users.dir/weberp
[root@ftp-server vsftpd]# cat users.dir/weberp
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
anon_max_rate=0
local_root=/www/weberp
5)重启服务并验证
[root@ftp-server vsftpd]#systemctl restart vsftpd
[root@ftp-server vsftpd]#setfacl -R -m u:nobody:rwx /www
[root@ftp-server vsftpd]# touch /www/weboa/weboa.html
[root@ftp-server vsftpd]# touch /www/weberp/weberp.html
验证:
[root@ftp-client ~]# ftp 192.168.26.71
Connected to 192.168.26.71 (192.168.26.71).
220 (vsFTPd 3.0.2)
Name (192.168.26.71:root): weboa
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> dir
227 Entering Passive Mode (192,168,26,71,245,111).
150 Here comes the directory listing.
-rw-rwxr-- 1 0 0 0 May 11 06:14 weboa.html
226 Directory send OK.

[root@ftp-client ~]# ftp 192.168.26.71
Connected to 192.168.26.71 (192.168.26.71).
220 (vsFTPd 3.0.2)
Name (192.168.26.71:root): weberp
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> dir
227 Entering Passive Mode (192,168,26,71,241,40).
150 Here comes the directory listing.
-rw-rwxr-- 1 0 0 0 May 11 06:14 weberp.html
226 Directory send OK

4.6、NFS概述-配置NFS服务器并实现开机自动挂载
4.6.1、NFS安装与配置
[root@ftp-server www]# yum -y install nfs-utils rpcbind
[root@ftp-server www]# mkdir /data
[root@ftp-server www]# vim /etc/exports
[root@ftp-server www]# cat /etc/exports
/data 192.168.26.0/24(rw,sync,all_squash)
[root@ftp-server www]# systemctl restart rpcbind && systemctl enable rpcbind
[root@ftp-server www]# systemctl restart nfs && systemctl enable nfs
4.6.2、客户端挂载:
[root@ftp-client ~]#yum -y install rpcbind nfs-utils
[root@ftp-client ~]#showmount -e 192.168.26.71
[root@ftp-client ~]#mkdir /data
[root@ftp-client ~]#mount 192.168.26.71:/data /data
[root@ftp-client ~]#echo "192.168.26.71:/data /data nfs defaults 0 0" >> /etc/fstab
[root@ftp-client ~]#mount -a
无报错信息就说明可以
如果服务器在公网肯定要设置防火墙规则,此时不能按照端口号来设置了(nfs服务没有固定端口),只能以服务名来设置防火墙富规则
在ftp-server上设置如下:
[root@ftp-server www]#firewall-cmd --zone=public --add-rich-rule="rule family="ipv4" source address="192.168.26.72/32" service name="mountd" accept"
[root@ftp-server www]#firewall-cmd --zone=public --add-rich-rule="rule family="ipv4" source address="192.168.26.72/32" service name="mountd" accept" --permanent
[root@ftp-server www]#firewall-cmd --zone=public --add-rich-rule="rule family="ipv4" source address="192.168.26.72/32" service name="rpc-bind" accept"
[root@ftp-server www]#firewall-cmd --zone=public --add-rich-rule="rule family="ipv4" source address="192.168.26.72/32" service name="rpc-bind" accept" --permanent
[root@ftp-server www]#firewall-cmd --zone=public --add-rich-rule="rule family="ipv4" source address="192.168.26.72/32" service name="nfs" accept"
[root@ftp-server www]#firewall-cmd --zone=public --add-rich-rule="rule family="ipv4" source address="192.168.26.72/32" service name="nfs" accept" --permanent
[root@ftp-server www]#firewall-cmd --list-all
[root@ftp-server www]#cat /etc/firewalld/zones/public.xml
[root@ftp-server www]#firewall-cmd --reload
在ftp-client上设置如下:
[root@ftp-client ~]#firewall-cmd --zone=public --add-rich-rule="rule family="ipv4" source address="192.168.26.71/32" service name="mountd" accept"
[root@ftp-client ~]#firewall-cmd --zone=public --add-rich-rule="rule family="ipv4" source address="192.168.26.71/32" service name="nfs" accept"
[root@ftp-client ~]#firewall-cmd --zone=public --add-rich-rule="rule family="ipv4" source address="192.168.26.71/32" service name="rpc-bind" accept"
[root@ftp-client ~]#firewall-cmd --zone=public --add-rich-rule="rule family="ipv4" source address="192.168.26.71/32" service name="mountd" accept" --permanent
[root@ftp-client ~]#firewall-cmd --zone=public --add-rich-rule="rule family="ipv4" source address="192.168.26.71/32" service name="nfs" accept" --permanent
[root@ftp-client ~]#firewall-cmd --zone=public --add-rich-rule="rule family="ipv4" source address="192.168.26.71/32" service name="rpc-bind" accept" --permanent
[root@ftp-client ~]#firewall-cmd --reload