FTP服务器和NFS服务器

1、 FTP服务的概述

1) 常见的FTP服务器:
常见的FTP服务器:
Windows:Serv-U、FTPServer、fileailla server(比较好用)
fileailla server:https://www.filezilla.cn/
Linux:ProtFTPD一个Unix平台上或类Umix平台上的FTP服务器程序
2) FTP监听的端口号
VSFTP基于GPL发布的类Unix平台的FTP服务器
FTP监听的端口:
端口20:用于传输数据
端口21:用于传输指令

2、 工作流程

主动和被动模式
FTP回话包含了两个通道,控制通道和数据传输通道;
FTP有两个传输模式,主动模式和被动模式;
FTP客户端先通过控制通道建议连接,然后通过数据传输通道来传输数据;
主动模式:FTP服务器主动和客户端进行数据传输
被动模式:FTP客户端主动和服务端尽心数据传输
我们的主动和被动模式,都是相对于服务端来说的,服务端主动就是主动模式,服务端被动就是被动模式

3、 vsftp安装

1) 服务端yum安装vsftp
[root@xuegod200 ~]# yum -y install vsftpd
2) 客户端安装ftp客户端软件lftp
[root@xuegod210 ~]# yum -y install lftp

4、 配置文件相关

1) vftp相关文档
/etc/vsftpd/vsftpd.conf #vsftpdde 的主配置文件
/etc/vsftpd/ftpusers #用于指定哪些用户不能访问FTP服务器(黑名单)
/etc/vsftpd/user_list #指定允许使用vsftpd的用户列表文件(白名单)
查看user_list文件,如下:
FTP服务器和NFS服务器_第1张图片
userlist_deny=YES(默认),绝不允许在这个文件中的用户登录ftp,甚至不提示输入密码
userlist_deny=NO,允许在这个文件中的用户登录ftp
2) 启动服务
[root@xuegod200 vsftpd]# systemctl start vsftpd
[root@xuegod200 vsftpd]# systemctl enable vsftpd
Created symlink from /etc/systemd/system/multi-user.target.wants/vsftpd.service to /usr/lib/systemd/system/vsftpd.service.
[root@xuegod200 vsftpd]# systemctl status vsftpd
● vsftpd.service - Vsftpd ftp daemon
Loaded: loaded (/usr/lib/systemd/system/vsftpd.service; enabled; vendor preset: disabled)
Active: active (running) since 五 2019-05-17 23:08:34 CST; 14s ago
Main PID: 56729 (vsftpd)
CGroup: /system.slice/vsftpd.service
└─56729 /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf
5月 17 23:08:34 xuegod200 systemd[1]: Starting Vsftpd ftp daemon…
5月 17 23:08:34 xuegod200 systemd[1]: Started Vsftpd ftp daemon.
3) 查看端口监听状态
[root@xuegod200 vsftpd]# netstat -anutp | grep vsftpd
tcp6 0 0 :::21 ::? LISTEN 56729/vsftpd
注意:这里看到21号端口监听,没有20号端口;因为21号端口是传输指令,21号端口是传输数据
4) Windows使用ftp的方法
在这里插入图片描述
5) 默认匿名用户可以浏览,但不可以创建、删除、修改等操作
FTP服务器和NFS服务器_第2张图片

5、 配置允许匿名用户访问

anon_mkdir_write_enable 字段可以控制是否允许匿名用户创建目录
1) 修改这个字段,允许匿名用户创建目录
12 anonymous_enable=YES #默认开始匿名访问,需要做修改
29 anon_upload_enable=YES #默认是没有开启自动上传功能,需要取消注释符号
33 anon_mkdir_write_enable=YES #默认没有开启创建目录功能,需要取消注释符号
2) 重启vsftpd服务
[root@xuegod200 vsftpd]# systemctl restart vsftpd
3) 测试是否可以创建目录
FTP服务器和NFS服务器_第3张图片
注意:虽然我们在配置文件开通了匿名用户可以创建目录的权限,但是需要注意的时候,在服务器上这个目录本身的权限,其他用户是没有创建权限的
[root@xuegod200 vsftpd]# ll -d /var/ftp/pub/
drwxr-xr-x 2 root root 6 10月 31 2018 /var/ftp/pub/ #可以看到没有创建权限
4) 使用chmod命令给other用户添加一个w权限
[root@xuegod200 vsftpd]# chmod o+w !$
chmod o+w /var/ftp/pub/
[root@xuegod200 vsftpd]# ll /var/ftp/pub/ -d
drwxr-xrwx 2 root root 6 10月 31 2018 /var/ftp/pub/
5) 再次测试能否创建目录
FTP服务器和NFS服务器_第4张图片
注意:虽然修改本地目录的权限后,我们可以创建目录,但是对目录重命名还是没有权限,也不能删除
我们需要手动在配置文件增加一行参数:
anon_other_write_enable=YES #允许匿名用户的other用户有写的权限
6) 修改配置文件,增加anon_other_write_enable=YES并重启vsftpd服务
34 anon_other_write_enable=YES
[root@xuegod200 vsftpd]# !sys
systemctl restart vsftpd
7) 再次进行测试
FTP服务器和NFS服务器_第5张图片
注意:我们一般在生产环境下,不会开放匿名用户的访问权限,这样极度不安全,所以默认在生产环境下,需要开启匿名用户访问,如下:
12 anonymous_enable=NO #关闭匿名用户访问
29 # anon_upload_enable=YES #关闭匿名用户上传
33 # anon_mkdir_write_enable=YES #关闭匿名用户创建目录
34 # anon_other_write_enable=YES #关闭other用户修改、删除功能
FTP服务器和NFS服务器_第6张图片

6、 实战举例1

公司技术部准备搭建一台功能简单的FTP 服务器,允许所有员工上传和下载文件,并允许创建用户自己的目录。
分析:
允许所有员工上传和下载文件需要设置成允许匿名用户登录并且需要将允许匿名用户上传功能开启
1) 修改配置文件,增加如下内容,并重启服务
12 anonymous_enable=YES #开启匿名用户访问
29 anon_upload_enable=YES #开启匿名用户上传
33 anon_mkdir_write_enable=YES #开启匿名用户创建目录
34 anon_other_write_enable=YES #开启other用户修改、删除功能
[root@xuegod200 vsftpd]# systemctl restart vsftpd
2) 创建xuegod的目录,并修改权限
[root@xuegod200 ftp]# mkdir xuegod
[root@xuegod200 ftp]# chown ftp.ftp xuegod
[root@xuegod200 ftp]# ll -d xuegod
drwxr-xr-x 2 ftp ftp 6 5月 17 23:49 xuegod
FTP服务器和NFS服务器_第7张图片
注意:因为这里我增加一个参数,所以匿名用户可以进行增删改查,生产环境中,不会开启,最多注释开启匿名用户的访问功能

7、 实战举例2

公司内部现在有一台FTP 和WEB 服务器,FTP 的功能主要用于维护公司的网站内容,包括上传文
件、创建目录、更新网页等等。公司现有两个部门负责维护任务,他们分别使用team1和team2
帐号进行管理。先要求仅允许team1 和team2 帐号登录FTP 服务器,但不能登录本地系统,并将
这两个帐号的根目录限制为/var/www/html,不能进入该目录以外的任何目录。
分析:
将FTP 和WEB 服务器做在一起是企业经常采用的方法,这样方便实现对网站的维护,为了增强安全性,首先需要使用仅允许本地用户访问,并禁止匿名用户登录。其次使用chroot 功能将team1和team2 锁定在/var/www/html 目录下。如果需要删除文件则还需要注意本地权限。
1) 先创建team1和team2用户,因为不需要登录系统,所以需要使用-s参数指定/sbin/nologin这个bashe
[root@xuegod200 ftp]# useradd -s /sbin/nologin team1
[root@xuegod200 ftp]# useradd -s /sbin/nologin team2
2) 修改密码
[root@xuegod200 ftp]# echo 123456 | passwd --stdin team1
更改用户 team1 的密码 。
passwd:所有的身份验证令牌已经成功更新。
[root@xuegod200 ftp]# echo 123456 | passwd --stdin team2
更改用户 team2 的密码 。
passwd:所有的身份验证令牌已经成功更新。
3) 创建/var/www/html目录,因为测试环境所以单独创建
[root@xuegod200 ftp]# mkdir -p /var/www/html
4) 修改目录权限,并使用-R参数,递归修改
[root@xuegod200 ftp]# chmod -R o+w /var/www/html/
[root@xuegod200 ftp]# ll -d !$
ll -d /var/www/html/
drwxr-xrwx 2 root root 6 5月 17 23:59 /var/www/html/
5) 修改配置文件,增加或修改如下参数
[root@xuegod200 ftp]# vim /etc/vsftpd/vsftpd.conf
12 anonymous_enable=NO #修改YES为NO,不允许匿名登录
16 local_enable=YES #启动本地用户登录
102 chroot_list_enable=YES #激活chroot功能
103 local_root=/var/www/html #设置本地用户的根目录为/var/www/html
104 chroot_list_file=/etc/vsftpd/chroot_list #允许登录ftp表的用户文件
106 allow_writeable_chroot=YES #允许锁定的用户有写的权限(不增加这个,没有读取权限)
6) 创建chroot_list用户文件
[root@xuegod200 ftp]# vim /etc/vsftpd/chroot_list
[root@xuegod200 ftp]# cat !$
cat /etc/vsftpd/chroot_list
team1
team2
7) 重启vsftpd服务
[root@xuegod200 ftp]# !sys
systemctl restart vsftpd
8) 使用ftp客户端登录测试
[root@xuegod210 ~]# lftp 192.168.11.200 -u team1,123456
lftp [email protected]:~> ls
-rw-r–r-- 1 0 0 2276 May 17 16:14 passwd
9) 使用windows资源管理器登录测试
在这里插入图片描述
FTP服务器和NFS服务器_第8张图片

8、 补充:配置vsftpd,使用ssl证书加密数据传输

FTP与HTTP一样缺省状态都是基于明文传输,希望FTP服务器端与客户端传输保证安全,可以配置SSL
1) 使用openssl生成自签证书
[root@xuegod200 ~]# cd /etc/vsftpd/
[root@xuegod200 vsftpd]# openssl req -new -x509 -nodes -out vsftpd.pem -keyout vsftpd.pem -days 3560
Generating a 2048 bit RSA private key
…+++
…+++
writing new private key to ‘vsftpd.pem’
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter ‘.’, the field will be left blank.
-----
Country Name (2 letter code) [XX]:ZH
State or Province Name (full name) []:JS
Locality Name (eg, city) [Default City]:NJ
Organization Name (eg, company) [Default Company Ltd]:XS
Organizational Unit Name (eg, section) []:XS
Common Name (eg, your name or your server’s hostname) []:XS.COM
Email Address []:[email protected]
[root@xuegod200 vsftpd]# ls
chroot_list ftpusers user_list vsftpd.conf vsftpd_conf_migrate.sh vsftpd.pem
OpenSSL 简单参数解释:
req #是 X.509 Certificate Signing Request (CSR,证书签名请求)管理的一个命令。
x509 #X.509 证书数据管理。
days #定义证书的有效日期。
newkey #指定证书密钥处理器。
keyout #设置密钥存储文件。
out #设置证书存储文件,注意证书和密钥都保存在一个相同的文件
2) 创建证书存放目录
[root@xuegod200 vsftpd]# mkdir .sslkey
[root@xuegod200 vsftpd]# cp vsftpd.pem .sslkey/
[root@xuegod200 vsftpd]# chmod 400 .sslkey/vsftpd.pem
3) 修改配置文件,增加如下参数
118 ssl_enable=YES #启用SSL支持
119 allow_anon_ssl=NO
120 force_local_data_ssl=YES
121 force_local_logins_ssl=YES
122 force_anon_logins_ssl=YES
123 force_anon_data_ssl=YES
#上面四行force 表示强制匿名用户使用加密登陆和数据传输。
ssl_tlsv1=YES #指定vsftpd支持TLS v1。
ssl_sslv2=YES #指定vsftpd支持SSL v2。
ssl_sslv3=YES #指定vsftpd支持SSL v3。
require_ssl_reuse=NO #不重用SSL会话,安全配置项 。
ssl_ciphers=HIGH #允许用于加密 SSL 连接的 SSL 算法。这可以极大地限制那些尝试发现使用存在缺陷的特定算法的攻击者。
rsa_cert_file=/etc/vsftpd/.sslkey/vsftpd.pem
rsa_private_key_file=/etc/vsftpd/.sslkey/vsftpd.pem
#定义 SSL 证书和密钥文件的位置。

注意:上面的配置项不要添加到vsftpd.conf 文件最后,否则启动报错。
4) 重启服务
[root@xuegod200 vsftpd]# !sys
systemctl restart vsftpd
5) 使用filezilla软件登录测试
FTP服务器和NFS服务器_第9张图片
登录成功,看到右下角有一个黄色的锁,表示使用SSL传输数据

9、 NFS概述-配置NFS服务器并实现开机自动挂载

1) NFS服务的概述
NFS,是Network File System的简写,即网络文件系统。网络文件系统是FreeBSD支持的文件系统中的一种,也被称为NFS.,NFS允许一个系统在网络上与他人共享目录和文件。通过使用NFS,用户和程序可以像访问本地文件一样访问远端系统上的文件
2) NFS的模式和监听端口
NFS的模式:C/S模式
NFS监听的端口:2049
Centos7是以NFSv4作为默认版本,NFSv4使用TCP协议(端口号2049)和NFS服务器建立连接
查看/etc/services文件
[root@xuegod200 ~]# cat /etc/services | grep ^nfs
nfs 2049/tcp nfsd shilp # Network File System
nfs 2049/udp nfsd shilp # Network File System
nfs 2049/sctp nfsd shilp # Network File System
3) 安装NFS服务
[root@xuegod200 ~]# yum -y install rpcbind nfs-utils
4) NFS服务的文件位置
[root@xuegod200 ~]# ls /etc/exports
/etc/exports
5) 启动NFS服务,并开机自启动
[root@xuegod200 ~]# systemctl start rpcbind #启动rpcbind服务
[root@xuegod200 ~]# systemctl start nfs-server.service #启动nfs服务
[root@xuegod200 ~]# systemctl enable nfs-server.service #设置开机自启动
Created symlink from /etc/systemd/system/multi-user.target.wants/nfs-server.service to/usr/lib/systemd/system/nfs-server.service.
6) 查看端口监听状态
[root@xuegod200 ~]# netstat -antup | grep 2049
tcp 0 0 0.0.0.0:2049 0.0.0.0:* LISTEN -
7) 服务的使用方法
这里因为客户端需要使用到showmount命令,所以也需要安装nfs包
语法格式:showmount -e NFS服务器IP
例:[root@xuegod210 ~]# showmount -e 192.168.11.200
Export list for 192.168.11.200:

10、 实战:在NFS服务中把/media目录共享,允许所有网段使用,并且在客户端上将挂载写入到fstab文件,实现开机自动挂载

1) 修改配置文件,实现共享目录
[root@xuegod200 ~]# vim /etc/exports
[root@xuegod200 ~]# systemctl status nfs-server.service
[root@xuegod200 ~]# cat /etc/exports
/media *(rw)
注意:/media #表示服务端共享的挂载目录
*表示所有网段,也可以写一个网段来表示
(rw) #表示访问权限
2) NFS支持动态装载配置文件:
[root@xuegod200 ~]# exportfs -rv
exporting *:/media
3) 到客户端上查看
[root@xuegod210 ~]# showmount -e 192.168.11.200
Export list for 192.168.11.200:
/media *
4) 在客户端上挂载NFS服务器共享的目录
[root@xuegod210 ~]# mount -t nfs 192.168.11.200:/media/ /opt/
[root@xuegod210 ~]# df -h
文件系统 容量 已用 可用 已用% 挂载点
/dev/mapper/centos-root 10G 4.0G 6.1G 40% /
devtmpfs 975M 0 975M 0% /dev
tmpfs 992M 0 992M 0% /dev/shm
tmpfs 992M 10M 982M 2% /run
tmpfs 992M 0 992M 0% /sys/fs/cgroup
/dev/sr0 4.2G 4.2G 0 100% /mnt
/dev/mapper/centos-home 5.0G 33M 5.0G 1% /home
/dev/sda1 497M 150M 347M 31% /boot
tmpfs 199M 0 199M 0% /run/user/0
192.168.11.200:/media 10G 4.0G 6.1G 40% /opt
5) 修改fstab文件,实现开机自动挂载
[root@xuegod210 ~]# umount /opt
[root@xuegod210 ~]# echo “192.168.11.200:/media /opt nfs defaults 0 0” >> /etc/fstab
[root@xuegod210 ~]# tail -1 /etc/fstab
192.168.11.200:/media /opt nfs defaults 0 0
[root@xuegod210 ~]# mount -a
[root@xuegod210 ~]# df -h
文件系统 容量 已用 可用 已用% 挂载点
/dev/mapper/centos-root 10G 4.0G 6.1G 40% /
devtmpfs 975M 0 975M 0% /dev
tmpfs 992M 0 992M 0% /dev/shm
tmpfs 992M 10M 982M 2% /run
tmpfs 992M 0 992M 0% /sys/fs/cgroup
/dev/sr0 4.2G 4.2G 0 100% /mnt
/dev/mapper/centos-home 5.0G 33M 5.0G 1% /home
/dev/sda1 497M 150M 347M 31% /boot
tmpfs 199M 0 199M 0% /run/user/0
192.168.11.200:/media 10G 4.0G 6.1G 40% /opt
6) 在服务器上创建内容,进行测试
[root@xuegod200 ~]# cd /media/
[root@xuegod200 media]# ls
aaa bbb ccc
[root@xuegod210 ~]# cd /opt
[root@xuegod210 opt]# ls
aaa bbb ccc
7) 我们在客户端上,测试能否创建文件
[root@xuegod210 opt]# touch 111 222
touch: 无法创建"111": 权限不够
touch: 无法创建"222": 权限不够

8) 解决方法:修改目录本身的权限
这里需要注意的是,一般出现权限不足,只有两种情况:
第一种:服务本身的权限没有给足,所以无法创建,我们这里给的是rw,所以不是这个问题
第二种:目录本身的权限没有给足,所以导致无法创建,这里可看到/media目录,对除了root用户和root组外的所有用户是没有w权限的,所以无法写入
nfs默认使用nfsnobody用户
[root@xuegod200 media]# grep nfs /etc/passwd
rpcuser❌29:29:RPC Service User:/var/lib/nfs:/sbin/nologin
nfsnobody❌65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin
修改目录本身的权限,达到可以编辑的效果
[root@xuegod200 media]# chmod 777 -R /media
[root@xuegod200 media]# ll -d /media/
drwxrwxrwx. 2 root root 61 5月 18 15:14 /media/
客户端测试
[root@xuegod210 opt]# touch 111 222
[root@xuegod210 opt]# ls
111 222 aaa bbb ccc

9) 测试目标本身权限足够后,修改配置文件的权限为ro(只读),看客户端能否创建文件或目录
修改配置文件
[root@xuegod200 media]# cat /etc/exports
/media *(ro)
重启服务
[root@xuegod200 media]# systemctl restart nfs-server.service
客户端测试
[root@xuegod210 opt]# touch aaa bbb
touch: 无法创建"aaa": 只读文件系统
touch: 无法创建"bbb": 只读文件系统

NFS共享的常用参数
ro #只读访问。
rw #读写访问。
sync #资料同步写入到内存与硬盘当中。
async #资料会先暂存于内存当中,而非直接写入硬盘。
secure #NFS通过1024以下的安全TCP/IP端口发送。
insecure #NFS通过1024以上的端口发送。
wdelay #如果多个用户要写入NFS目录,则归组写入(默认)。
no_wdelay #如果多个用户要写入NFS目录,则立即写入,当使用async时,无需此设置。
hide #在NFS共享目录中不共享其子目录。
no_hide #共享NFS目录的子目录。
subtree_check #如果共享/usr/bin之类的子目录时,强制NFS检查父目录的权限(默认)。
no_subtree_check #和上面相对,不检查父目录权限。
all_squash #共享文件的UID和GID映射匿名用户anonymous,适合公用目录。
no_all_squash #保留共享文件的UID和GID(默认)。
root_squash #root用户的所有请求映射成如anonymous用户一样的权限(默认)。
no_root_squash #root用户具有根目录的完全管理访问权限。

选项使用方法示例:
[root@xuegod63 ~]# cat /etc/exports
/tmp/a/no_root_squash *(rw,no_root_squash)
/tmp/a/sync 192.168.0.0/24(rw,sync)
/tmp/a/ro 192.168.1.64(ro)
/tmp/a/all_squash 192.168.0.0/24(rw,all_squash,anonuid=500,anongid=500)
/tmp/a/async 192.168.3.0/255.255.255.0(async)
/tmp/a/rw 192.168.3.0/255.255.255.0(rw) 192.168.4.0/255.255.255.0(rw)
/tmp/a/root_squash *(rw,root_squash)

注意:在发布共享目录的格式中除了共享目录是必跟参数外,其他参数都是可选的。并且共享
目录与客户端之间及客户端与客户端之间需要使用空格符号,但是客户端与参数之间是不能有
空格。

11、NFS客户端挂载参数的优化:

NFS高并发环境下的服务端重要优化(mount -o 参数)。
async:异步同步,此参数会提高I/O性能,但会降低数据安全(除非对性能要求很高,对数据可靠性不要求的场合。一般生产环境,不推荐使用)。
noatime:取消更新文件系统上的inode访问时间,提升I/O性能,优化I/O目的,推荐使用。
nodiratime:取消更新文件系统上的directory inode访问时间,高并发环境,推荐显式应用该选项,提高系统性能。
intr:可以中断不成功的挂载。
rsize/wsize:读取(rsize)/写入(wsize)的区块大小(block size),这个设置值可以影响客户端与服务端传输数据的缓冲存储量。一般来说,如果在局域网内,并且客户端与服务端都具有足够的内存,这个值可以设置大一点,比如说32768(bytes),提升缓冲区块将可提升NFS文件系统的传输能力。但设置的值也不要太大,最好是实现网络能够传输的最大值为限。

内核优化:
[root@xuegod63 ~]# vim /etc/sysctl.conf #修改/etc/sysctl.conf,在文件最后添加如下。
net.core.wmem_default = 8388608 #内核默认读缓存
net.core.rmem_default = 8388608 #内核默认写缓存
net.core.rmem_max = 16777216 #内核最大读缓存
net.core.wmem_max = 16777216 #内核最大写缓存
[root@xuegod63 ~]# sysctl -p #使用sysctl.conf文件内的参数生效,执行命令输出的结果中的参数代表生效。
net.core.wmem_default = 8388608
net.core.rmem_default = 8388608
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216

挂载选项用法,如图 4-21 所示:
[root@xuegod64 ~]# mount -t nfs -o noatime,nodiratime,rsize=131072,wsize=131072,intr 192.168.1.63:/media /opt

图 4-21 挂载选项用法
或者写到挂载文件里:
192.168.1.63:/media /mnt nfs noatime,nodiratime,rsize=131072,wsize=131072,intr 0 0

你可能感兴趣的:(第二阶段-服务类)