目录

  1. NFS
    1.1 NFS 介绍
    1.2 NFS 服务端配置
    1.3 NFS 客户端挂载
    1.4 exportfs 命令
    1.5 客户端文件属主属组为 nobody
  2. FTP
    2.1 FTP 介绍
    2.2 FTP 服务端配置
    2.3 FTP 客户端访问

1. NFS

1.1 NFS 介绍

NFS 就是 Network FileSystem 的缩写,最早之前是由sun 这家公司所发展出来的。 它最大的功能就是可以透过网络,让不同的机器、不同的操作系统、可以彼此分享个别的档案 (share files)。所以,你也可以简单的将他看做是一个文件服务器 (file server) 呢!这个 NFS 服务器可以让你的 PC 来将网络远程的 NFS 服务器分享的目录,挂载到本地端的机器当中, 在本地端的机器看起来,那个远程主机的目录就好像是自己的一个磁盘分区槽一样 (partition)!使用上面相当的便利!

因为 NFS 支持的功能相当的多,而不同的功能都会使用不同的程序来启动, 每启动一个功能就会启用一些端口来传输数据,因此, NFS 的功能所对应的端口才没有固定住, 而是随机取用一些未被使用的小于 1024 的端口来作为传输之用。但如此一来又造成客户端想要连上服务器时的困扰, 因为客户端得要知道服务器端的相关端口才能够联机吧!

此时我们就得需要远程过程调用 (RPC) 的服务啦!RPC 最主要的功能就是在指定每个 NFS 功能所对应的 port number ,并且回报给客户端,让客户端可以连结到正确的端口上去。 那 RPC 又是如何知道每个 NFS 的端口呢?这是因为当服务器在启动 NFS 时会随机取用数个埠口,并主动的向 RPC 注册,因此 RPC 可以知道每个端口对应的 NFS 功能,然后 RPC 又是固定使用 port 111 来监听客户端的需求并回报客户端正确的端口, 所以当然可以让 NFS 的启动更为轻松愉快了!

所以你要注意,要启动 NFS 之前,RPC 就要先启动了,否则 NFS 会无法向 RPC 注册。 另外,RPC 若重新启动时,原本注册的数据会不见,因此 RPC 重新启动后,它管理的所有服务都需要重新启动来重新向 RPC 注册。

1.2 NFS 服务端配置

1.2.1 安装 rpcbind 和 nfs-utils
[root@LNMP ~]# yum install -y nfs-utils rpcbind
1.2.2 修改 nfs 配置文件
[root@LNMP ~]# vim /etc/exports

/home/nfstest 192.168.1.0/24(rw,sync,all_squash,anonuid=1000,anongid=1000)
1.2.3 nfs 配置选项
  • rw:读写
  • ro:只读
  • sync:同步模式,内存数据实时写入磁盘
  • async:非同步模式
  • no_root_squash:客户端挂载NFS共享目录后,root用户不受约
    束,权限很大
  • root_squash:与上面选项相对,客户端上的root用户收到约束,
    被限定成某个普通用户
  • all_squash:客户端上所有用户在使用NFS共享目录时都被限定为
    一个普通用户
  • anonuid/anongid:和上面几个选项搭配使用,定义被限定用户
    的uid和gid
1.2.4 建立必要的目录
[root@LNMP ~]# mkdir /home/nfstest

[root@LNMP ~]# chmod 777 /home/nfstest
1.2.5 开启服务
[root@LNMP ~]# systemctl start rpcbind

[root@LNMP ~]# systemctl start nfs

[root@LNMP ~]# systemctl enable rpcbind

[root@LNMP ~]# systemctl enable nfs

1.3 NFS 客户端挂载

1.3.1 安装 nfs-utils
[root@localhost ~]# yum install -y nfs-utils
1.3.2 查看远端共享出来的目录
[root@localhost ~]# showmount -e 192.168.1.100
Export list for 192.168.1.100:
/home/nfstest (everyone)
1.3.3 进行挂载
[root@localhost ~]# mount -t nfs 192.168.1.100:/home/nfstest /mnt

[root@localhost mnt]# df -h | grep nfs
192.168.1.100:/home/nfstest   36G  4.4G   32G  13% /mnt
1.3.4 新建文件,并查看属主、属组
[root@localhost ~]# touch /mnt/client.txt ; ll /mnt
total 0
-rw-r--r--. 1 chocolee911 chocolee911 0 Jul 16 10:49 client.txt


## 看一下 passwd 文件中,chocolee911 是不是对应的 UID=1000
[root@localhost ~]# grep chocolee911 /etc/passwd
chocolee911:x:1000:1000:Choco Lee:/home/chocolee911:/bin/bash

1.4 exportfs 命令

当 NFS 服务器上有新增的共享目录,或者共享目录配置有更改时,不可以轻易地重启 NFS 服务,因为远程有客户端正连在共享目录上,此时重启服务可能造成服务损坏。这时应该使用 nfs-utils 自带的 exportfs 命令进行配置刷新。

1.4.1 exportfs 常用选项
  • -a:全部挂载或者全部卸载
  • -r:重新挂载
  • -u:卸载某一个目录
  • -v:显示共享目录
1.4.2 exportfs 用法示例
  • 修改服务端配置文件
[root@LNMP ~]# vim /etc/exports

/home/nfstest 192.168.1.0/24(rw,sync,all_squash,anonuid=1000,anongid=1000)
/tmp/ 192.168.1.0/24(rw,sync,no_root_squash)
  • 此时在客户机上查看可挂载的共享目录
[root@localhost ~]# showmount -e 192.168.1.100
Export list for 192.168.1.100:
/home/nfstest 192.168.1.0/24       # 并无变化
  • 使用 exportfs 刷新配置
[root@LNMP ~]# exportfs -avr
exporting 192.168.1.0/24:/tmp
exporting 192.168.1.0/24:/home/nfstest
  • 再次在客户端上进行查看
[root@localhost ~]# showmount -e 192.168.1.100
Export list for 192.168.1.100:
/tmp          192.168.1.0/24
/home/nfstest 192.168.1.0/24
  • 在客户端上进行挂载
[root@localhost ~]# mount -t nfs -o nolock 192.168.1.100:/tmp /nfs

[root@localhost ~]# touch /nfs/test.txt

[root@localhost ~]# ll !$
ll /nfs/test.txt
-rw-r--r--. 1 root root 0 Jul 16 11:05 /nfs/test.txt

1.5 客户端文件属主属组为 nobody

NFS 4版本会有该问题:客户端挂载共享目录后,不管是 root 用户还是普通用户,创建新文件时属主、属组为nobody

解决方法:
* 客户端挂载时加上-o nfsvers=3
* 客户端和服务端都需要 修改 /etc/idmapd.conf 文件,将 “#Domain = local.domain.edu” 改为“Domain = xxx.com” (这里的xxx.com,随意定义吧),然后再重启 rpcidmapd 服务


2. FTP

2.1 FTP 介绍

  • FTP是File Transfer Protocol(文件传输协议,简称文传协议)的英文简称,用于在Internet上控制文件的双向传输。
  • FTP的主要作用就是让用户连接一个远程计算机(这些计算机上运行着FTP服务器程序),并查看远程计算机中的文件,然后把文件从远程计算机复制到本地计算机,或把本地计算机的文件传送到远程计算机。

2.2 FTP 服务端配置

2.2.1 安装 vsftpd
[root@LNMP ~]# yum install -y vsftpd
2.2.2 增加 ftp 的用户
[root@LNMP ~]# useradd -s /sbin/nologin virftp
2.2.3 编辑 ftp 用户认证文件,并修改权限
[root@LNMP ~]# vim /etc/vsftpd/vsftpd_login

chuck
123123

[root@LNMP ~]# chmod 600 /etc/vsftpd/vsftpd_login
2.2.4 将账号密码以加密形式转入数据库
[root@LNMP ~]# db_load -T -t hash -f /etc/vsftpd/vsftpd_login /etc/vsftpd/vsftpd_login.db
2.2.5 生成用户配置文件
[root@LNMP ~]# mkdir /etc/vsftpd/vsftpd_user_conf

[root@LNMP ~]# cd /etc/vsftpd/vsftpd_user_conf


[root@LNMP vsftpd_user_conf]# vim chuck 

local_root=/home/virftp/chuck
anonymous_enable=NO
write_enable=YES
local_umask=022
anon_upload_enable=NO
anon_mkdir_write_enable=NO
idle_session_timeout=600
data_connection_timeout=120
max_clients=10
2.2.6 生成测试文件
[root@LNMP ~]# mkdir /home/virftp/chuck

[root@LNMP ~]# touch /home/virftp/chuck/test.txt

[root@LNMP ~]# chown -R virftp:virftp /home/virftp
2.2.7 修改 /etc/pam.d/vsftpd
[root@LNMP ~]# vim /etc/pam.d/vsftpd
## 在文件最前面增加如下两行
auth sufficient /lib64/security/pam_userdb.so db=/etc/vsftpd/vsftpd_login
account sufficient /lib64/security/pam_userdb.so db=/etc/vsftpd/vsftpd_login


#%PAM-1.0
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
2.2.8 修改 ftp 配置文件

vim /etc/vsftpd/vsftpd.conf
* 将 anonymous_enable=YES 改为 anonymous_enable=NO
* 将 #anon_upload_enable=YES 改为 anon_upload_enable=NO
* 将 #anon_mkdir_write_enable=YES 改为 anon_mkdir_write_enable=NO
* 再增加如下内容

chroot_local_user=YES
guest_enable=YES
guest_username=virftp
virtual_use_local_privs=YES
user_config_dir=/etc/vsftpd/vsftpd_user_conf
allow_writeable_chroot=YES
2.2.9 启动 vsftpd
[root@LNMP ~]# systemctl start vsftpd

2.3 FTP 客户端访问

2.3.1 客户端安装 lftp
[root@localhost ~]# yum install -y lftp
2.3.2 登录 ftp 服务器
[root@localhost ~]# lftp chuck@192.168.1.100
Password: 
lftp chuck@192.168.1.100:~> ls        
-rw-r--r--    1 1003     1003            0 Jul 16 03:24 test.txt