第四章 构建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