阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

Linux下NFS、FTP使用讲解

144次阅读
没有评论

共计 10169 个字符,预计需要花费 26 分钟才能阅读完成。

一、NFS
1、NFS 简介
NFS 全称是 network file system 网络文件系统 nfs 依赖网络带宽的支持
NFS 允许一个系统在网络上与他人共享目录和文件。通过使用 NFS 用户和程序可以像访问本地文件一样访问远端系统上的文件。
假如有三台机器 A, B, C 它们需要访问同一个目录目录中都是图片传统的做法是把这些图片分别放到 A, B, C. 但是使用 NFS 只需要放到 A 上然后 A 共享给 B 和 C 即可。访问的时候 B 和 C 是通过网络的方式去访问 A 上的那个目录的。

2、安装、配置 NFS 服务
需要安装两个包(nfs-utils 和 rpcbind)
#yum install -y nfs-utils  会同时安装上依赖包 rpcbind

提供 nfs 服务的机器上 vim /etc/exports 输入以下内容
/home/ 192.168.20.0/24(rw,sync,all_squash,anonuid=501,anongid=501)
共分为三部分
/home/    第一部分是本地要共享出去的目录
192.168.20.0/24    第二部分为允许访问的主机可以是一个 IP 也可以是一个 IP 段
(rw,sync,all_squash,anonuid=501,anongid=501)    第三部分就是小括号里面的为一些权限选项。权限为读写同步限定所有使用者并且限定的 uid 和 gid 都为 501501 账号必须真实存在。
启动 nfs 服务先启动 rpcbind 再启动 nfs 启动顺序错误的话会导致后面出错
/etc/init.d/rpcbind start
/etc/init.d/nfs start 

3、NFS 配置的一些选项说明
rw 可读可写
ro 只读
sync 同步模式内存中数据时时写入磁盘
async 不同步把内存中数据定期写入磁盘中
no_root_squash squash 的意思为挤压压制字面意思为不压制 root 的权限加上这个选项后 root 用户就会对共享的目录拥有至高的权限控制就像是对本机的目录操作一样。不安全不建议使用
root_squash 和上面的选项对应 root 用户对共享目录的权限不高只有普通用户的权限即限制了 root
all_squash 不管使用 NFS 的用户是谁他的身份都会被限定成为一个指定的普通用户身份
anonuid/anongid 要和 root_squash 以及 all_squash 一同使用用于指定使用 NFS 的用户限定后的 uid 和 gid 前提是本机的 /etc/passwd 中存在这个 uid 和 gid。

4、客户端上挂载 NFS
客户端机器也同样需要安装 nfs 包# yum install -y nfs-utils
同时需要检查 iptables 清空 iptables
关闭 selinux 防火墙
查看服务器端都共享了哪些目录    #showmount -e 192.168.20.30nfs 服务器的 ip 地址
客户端使用 showmount -e 时报错 RPC 程序没有注册
[root@yong ~]# showmount -e 192.168.20.30
clnt_create: RPC: Program not registered
出错原因是 rpcbind 服务与 NFS 服务启动顺序不对先停止服务重新启动先启动 rpcbind 服务再启动 nfs 服务
[root@localhost ~]# /etc/init.d/nfs stop
[root@localhost ~]# /etc/init.d/rpcbind stop

重新启动后执行显示正确

[root@localhost ~]# /etc/init.d/rpcbind start
[root@localhost ~]# /etc/init.d/nfs start
[root@yong ~]# showmount -e 192.168.20.30
Export list for 192.168.20.30:
/home 192.168.20.0/24

 

在客户端上挂载服务端的 nfs 命令
 mount -t nfs  -o nolock,nfsvers=3 192.168.20.30:/home/ /mnt/   
// 如果不加 -onolock,nfsvers=3 则在挂载目录下的文件属主和组都是 nobody 如果指定 nfsvers= 3 则显示 root
-o nolock    不上锁指定 nfsvers 版本是 3 默认是 4
df -h  查看挂载的情况

实验测试 nfs
服务器端共享 /home 目录允许 192.168.20.0 网段的机器访问指定使用 nfs 用户的身份为 501
[root@localhost home]# cat /etc/exports 
/home/ 192.168.20.0/24(rw,sync,all_squash,anonuid=501,anongid=501)
[root@localhost /]# ls -ld home/
drwxr-xr-x. 8 root root 4096 5 月  22 11:33 home/
[root@localhost home]# ls -ld
rwxr-xr-x  2 root    root    4096 5 月  15 15:54 logs
drwx——. 3 mysql  mysql  4096 5 月  11 14:47 mysql
drwx——. 4 php-fpm php-fpm 4096 5 月  13 14:24 php-fpm
drwx——  2 test    test    4096 5 月  22 11:40 test
[root@localhost home]# mkdir 111
[root@localhost home]# chmod 777 111

客户端机器新建立文件夹 nfs 挂载 nfs 服务器的 /home 目录到 nfs 目录挂载后使用 df - h 查看已挂载的 nfs
12345678910 [root@yong ~]# mkdir nfs
[root@yong ~]# mount -t nfs 192.168.20.30:/home/ /root/nfs/
[root@yong ~]# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/mapper/VolGroup-lv_root
                      19G  2.9G  15G  17% /
tmpfs                250M    0  250M  0% /dev/shm
/dev/sda1            477M  46M  407M  11% /boot
/dev/sdb2            6.0G  93M  5.6G  2% /data
192.168.20.30:/home/  18G  2.1G  15G  13% /root/nfs

 

ls -l 列出来共享的目录的文件所属主、组全部为 nobody 在 nfs 目录新建目录或文件提示权限被拒绝
[root@yong nfs]# ls -l
drwxr-xr-x 2 nobody nobody 4096 May 15 15:54 logs
drwx—— 3 nobody nobody 4096 May 11 14:47 mysql
drwx—— 4 nobody nobody 4096 May 13 14:24 php-fpm
drwx—— 2 nobody nobody 4096 May 22 11:40 test

[root@yong nfs]# mkdir abc
mkdir: cannot create directory `abc’: Permission denied
[root@yong nfs]# touch 1.txt
touch: cannot touch `1.txt’: Permission denied

服务器端 /home 目录新建 111 目录并设置权限为 777 客户端进入 111 目录下可以创建目录或文件创建的文件所属主、组都为 nobodoy
12 [root@yong 111]# ls -l
-rw-r–r– 1 nobody nobody      0 May 22 13:40 1.txt

取消挂载重新挂载添加参数 -o nolock,nfsvers=3 显示的所属主则为 root 进入 111 目录新建立文件文件所属主、组权限为 501 因为客户端已经存在 501 对应账号为 user1 所以这里显示账号为 user1

[root@yong ~]# umount /root/nfs/
[root@yong ~]# mount -t nfs -o nolock,nfsvers=3 192.168.20.30:/home/ /root/nfs/

[root@yong nfs]# ls -l
drwxrwxrwx 2 root    root      4096 May 22 14:18 111
drwxr-xr-x 2 root    root      4096 May 15 15:54 logs
drwx—— 3 500  testgroup  4096 May 11 14:47 mysql
drwx—— 4 user1  user1    4096 May 13 14:24 php-fpm
drwx—— 2 php-fpm php-fpm  4096 May 22 11:40 test
[root@yong nfs]# cd 111
[root@yong 111]# touch 2.txt
[root@yong 111]# ls -l
-rw-r–r– 1 user1 user1 0 May 22  2015 2.txt
[root@yong 111]# id -u user1
501

 

5、exportfs 命令的使用
-a 全部挂载或者卸载
-r 重新挂载
-u 卸载某一个目录
-v 显示共享的目录
 /home/ 192.168.20.0/24(rw,sync,no_root_squash) 不限制 root 用户客户端再创建的用户的所属主组都是 root

可以进行更改权限删除文件。
改变 /etc/exports 配置文件后不用重启 nfs 服务执行命令 #exportfs -arv  使 /etc/exports 配置文件生效
我们还可以把要挂载的 nfs 目录写到 client 上的 /etc/fstab 文件中  192.168.20.10:/tmp/ /test nfs nolock 0 0  然后 mount -a

实验测试服务器端更改 nfs 配置不压制 root 的权限
1234 [root@localhost home]# cat /etc/exports 
/home/ 192.168.20.0/24(rw,sync,no_root_squash)
[root@localhost home]# exportfs -arv
exporting 192.168.20.0/24:/home

客户端挂载 nfs 不指定 nfsvers 版本显示的账号还是为 nobody 但是可以直接创建文件已经有 root 权限
[root@yong ~]# mount -t nfs 192.168.20.30:/home/ /root/nfs/
[root@yong ~]# cd nfs/
[root@yong nfs]# touch 1.txt
[root@yong nfs]# ls -l
drwxrwxrwx 2 nobody nobody 4096 May 22 14:25 111
-rw-r–r– 1 nobody nobody    0 May 22  2015 1.txt

取消挂载 nfs 重新指定参数挂载挂载后显示账号为 root
1234567 [root@yong ~]# umount /root/nfs/
[root@yong ~]# mount -t nfs -o nolock,nfsvers=3 192.168.20.30:/home/ /root/nfs/
[root@yong ~]# cd nfs/
[root@yong nfs]# touch 1.txt
[root@yong nfs]# ls -l
drwxrwxrwx 2 root    root      4096 May 22 14:25 111
-rw-r–r– 1 root    root        0 May 22  2015 1.txt

 

二、ftp
1、什么是 ftp
FTP 是 File Transfer Protocol 文件传输协议的英文简称而中文简称为“文传协议”用于 Internet 上的控制文件的双向传输。
FTP 的主要作用就是让用户连接上一个远程计算机这些计算机上运行着 FTP 服务器程序查看远程计算机有哪些文件然后把文件从远程计算机上拷到本地计算机或把本地计算机的文件送到远程计算机去。
在 CentOS 或者 RedHat Linux 上有自带的 ftp 软件叫做 vsftpd。

2、使用 pure-ftpd 搭建 FTP 服务
pure-ftpd 官网 http://www.pureftpd.org/project/pure-ftpd 
pure-ftpd 是服务端工具

先安装 epel 扩展源然后安装 pure-ftpd 包
#yum install -y epel-release
#yum install -y pure-ftpd
yum list 可以查看包所在的源
123 [root@pma ~]# yum list |grep pure-ftpd
pure-ftpd.i686                        1.0.30-1.el6                  epel   
pure-ftpd-selinux.i686                1.0.30-1.el6                  epel

 
pure-ftpd 配置模板参考
cat /etc/pure-ftpd/pure-ftpd.conf
ChrootEveryone              yes
BrokenClientsCompatibility  no
MaxClientsNumber            50
Daemonize                  yes
MaxClientsPerIP            8
VerboseLog                  no
DisplayDotFiles            yes
AnonymousOnly              no
NoAnonymous                yes
SyslogFacility              ftp
DontResolve                yes
MaxIdleTime                15
PureDB                      /etc/pure-ftpd/pureftpd.pdb
LimitRecursion              3136 8
AnonymousCanCreateDirs      no
MaxLoad                    4
AntiWarez                  yes
Umask                      133:022
MinUID                      10
AllowUserFXP                no
AllowAnonymousFXP          no
ProhibitDotFilesWrite      no
ProhibitDotFilesRead        no
AutoRename                  no
AnonymousCantUpload        no
CustomerProof              yes

 

生成随机字符串用户名长度为 5 没有特殊字符没有数字没有大写字母密码没有特殊字符然后重定向到一个文件中
如果没有 mkpasswd 命令需要安装 expect 包# yum install -y expect
user=`mkpasswd -l 5 -s 0 -d 0 -C 0`
pass=`mkpasswd -s 0`
echo $user $pass > /tmp/ftp.pass
12 [root@localhost ~]# cat /tmp/ftp.pass 
zwdlc EEoz14swg

创建 ftp 服务的目录用于共享
#mkdir /data/ftp 
#echo -e “$pass\n$pass”|pure-pw useradd $user -u test -d /data/ftp/
pure-pw 创建一个用户

-u test 映射一个用户系统里必须存在的用户。使用创建的随机用户映射到系统里的用户
pure-pw mkdb    #创建密码文件把用户和密码保存到一个二进制的文件中。路径在 /etc/pure-ftpd/pure-ftpd.conf 配置文件里 PureDB 指定的路径中
[root@localhost ~]# ls -l /etc/pure-ftpd/pureftpd.pdb
-rw——- 1 root root 2141 5 月  22 15:24 /etc/pure-ftpd/pureftpd.pdb

pure-pw list    #列出用户
[root@localhost ~]# pure-pw list
zwdlc              /data/ftp/./

pure-pw userdel $user    #删除账号
/etc/init.d/pure-ftpd  start  #启动服务监听端口为 21

ftp 客户端需要安装 lftp 包 #yum install -y lftp
输入命令 #lftp 用户名 @ftp 服务器 ip 地址   
用户名为服务器创建的随机用户名 ftp 服务器 ip 地址输入密码就登录 ftp 服务器
put 文件 上传到 ftp 服务端
get 文件 下载到本地客户端目录
[root@yong nfs]# lftp zwdlc@192.168.20.30
Password: 
lftp zwdlc@192.168.20.30:/> get nginx-1.6.2.tar.gz 
804164 bytes transferred

2、vsftp 配置 ftp 服务
服务端安装 yum install -y vsftpd db4-utils
建立虚拟账号相关联的系统账号 useradd virftp -s /sbin/nologin 
建立虚拟账户相关的文件  vim  /etc/vsftpd/vsftpd_login // 内容如下
    test1
    123456
    test2
    abcdef
chmod 600 /etc/vsftpd/vsftpd_login
生成对应的库文件 db_load -T -t hash -f /etc/vsftpd/vsftpd_login /etc/vsftpd/vsftpd_login.db
db_load 命令可以将用户文本信息文件转换为 db 数据库并使用 hash 加密。
选项 - T 允许应用程序能够将文本文件转译载入进数据库。由于我们之后是将虚拟用户的信息以文件方式存储在文件里的为了让 Vsftpd 这个应用程序能够通过文本来载入用户数据必须要使用这个选项。
指定了选项 - T 那么一定要追加子选项 -t ;    子选项 - t 追加在在 - T 选项后用来指定转译载入的数据库类型。
hash 就是使用 hash 码加密。
-f 参数后面接包含用户名和密码的文本文件文件的内容是: 奇数行用户名、偶数行密码
如果更改密码更改文件后还需要 db_load 一下并重启 ftp 服务使其生效

建立虚拟账号相关的目录以及配置文件 mkdir  /etc/vsftpd/vsftpd_user_conf
cd  /etc/vsftpd/vsftpd_user_conf  创建和用户对应的配置文件
vim test1 内容如下
local_root=/home/virftp/test1
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
max_per_ip=5
local_max_rate=50000

mkdir /home/virftp/test1
修改权限 chown -R virftp:virftp /home/virftp

vim /etc/pam.d/vsftpd  用户认证的配置文件在最开头添加两行
auth sufficient /lib/security/pam_userdb.so db=/etc/vsftpd/vsftpd_login  // 如果是 64 位系统则改为 /lib64/security/pam_userdb.so
account sufficient /lib/security/pam_userdb.so db=/etc/vsftpd/vsftpd_login  // 如果是 64 位系统则改为 /lib64/security/pam_userdb.so
再修改 vsftpd 主配置文件
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

启动 vsftpd 服务 /etc/init.d/vsftpd start 
启动 vsftp 服务报错 vsftp.conf 主配置文件 guest_enable 这一行错误的变量值。查找原因是因为这一行最后有空格所有配置文件末尾不能有空格删除空格后正常启动服务
[root@localhost vsftpd_user_conf]# /etc/init.d/vsftpd start
为 vsftpd 启动 vsftpd500 OOPS: bad bool value in config file for: guest_enable

客户端实验验证
ftp 客户端需要安装 lftp 包 yum install -y lftp

登录命令 lftp test1@ftp 服务端的 ip 地址

客户端访问 ftp 服务器故意输错密码竟然也能登录但是执行 ls 就提示登录失败使用正确口令登录使用 ls 正常
[root@localhost ~]# lftp 
test1@192.168.22.30
口令: 
lftp test1@192.168.22.30:~> ls         
ls: 登录失败: 530 Login incorrect.             
lftp test1@192.168.22.30:~> exit
[root@localhost ~]# lftp test1@192.168.22.30
口令: 
lftp test1@192.168.22.30:~> ls         
-rw-r–r–    1 0        0              0 May 24 15:21 1.txt

put 上传一个文件 ls 查看文件的所属主、组为 501 在 ftp 服务器查看显示为 virftp 账号对应的 uid 即 501
12345678910 lftp test1@192.168.22.30:/> put 1.sql 
1851 bytes transferred
lftp test1@192.168.22.30:/> ls -l
-rw-r–r–    1 501      501          1851 May 24 15:23 1.sql
-rw-r–r–    1 0        0              0 May 24 15:21 1.txt
[root@linuxidc test1]# ls -l
-rw-r–r– 1 virftp virftp 1851 5 月  24 23:23 1.sql
-rw-r–r– 1 root  root      0 5 月  24 23:21 1.txt
[root@linuxidc ~]# tail -1 /etc/passwd
virftp:x:501:501::/home/virftp:/sbin/nologin

————————————– 分割线 ————————————–

Ubuntu 12.04 安装 NFS server http://www.linuxidc.com/Linux/2012-09/70728.htm

NFS 服务器安装配置实现 Ubuntu 12.04 与 ARM 文件共享 http://www.linuxidc.com/Linux/2012-10/73159.htm

Ubuntu 搭建 nfs 服务器 http://www.linuxidc.com/Linux/2012-10/71930.htm

文件服务器 NFS 配置详解 http://www.linuxidc.com/Linux/2013-06/86542.htm

Ubuntu 下搭建 NFS 网络文件系统服务器 http://www.linuxidc.com/Linux/2013-07/87367.htm

Heartbeat_ldirector+LB+NFS 实现 HA 及 LB、文件共享 http://www.linuxidc.com/Linux/2013-06/85292.htm

CentOS 5.5 配置 NFS 服务器教程 http://www.linuxidc.com/Linux/2013-03/81737.htm

Ubuntu 12.10 下 NFS 的安装使用 http://www.linuxidc.com/Linux/2013-03/80478.htm

————————————– 分割线 ————————————–

本文永久更新链接地址:http://www.linuxidc.com/Linux/2015-05/117976.htm

正文完
星哥说事-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-20发表,共计10169字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中