存档

文章标签 ‘nfs’

NFS文件系统详解以及安全设置

2017年8月10日 评论已被关闭

## 1、什么是NFS
The Network File System(NFS),网络文件系统。它允许挂载一个远程主机的硬盘分区,就相于使用本地硬盘一样.
## 2、搭建一个NFS服务器。
### 2.1.1、安装。
#yum -y install nfs*
### 2.1.2、nfs配置文件
nfs主要有三个配置文件/etc/exports,/etc/hosts.allow,/etc/hosts.deny。通常只需要编辑一个/etc/exports文件就可以让nfs工作。但是它不够安全,要用hosts.allow和hosts.deny文件来限制一些客户的访问。我先讲解/etc/exports文件配置,稍后再来讲解/etc/hosts.allow,/etc/hosts.deny两个文件的配置。
### 2.1.3、/etc/exports
这个文件包含一个条目列表,每个条目表示一个卷的共享以及是如何共享的。例如文件中有个条目是:
/usr/local/src 192.168.1.252(rw,sync,no_root_squash)
说明:/usr/local/src: 是要共享的目录,在/usr/local/src下的所有子目录和文件也将被共享。
192.168.1.252:客户机的ip能够访问/usr/local/src目录。
(rw):设置客户机对/home目录的权限,可读可写,(ro)为只读权限。
启动服务:
# /etc/init.d/nfs start
Starting NFS services: [ OK ]
Starting NFS quotas: [ OK ]
Starting NFS daemon: [ OK ]
Starting NFS mountd: [ OK ]

### 2.1.4、解释/etc/hosts.allow和/etc/hosts.deny配置文件

这两个文件是指定网络上哪些计算机可以使用nfs服务,该文件的每一个条目录,指定一个服务和一个或一组主机。当一个主机请求nfs服务,它会进行以下操作:
首先会去检查hosts.allow文件是否匹配里面的条目,如果匹配,则允许访问nsf服务。
如果不匹配hosts.allow文件中的条目,服务将会去检查hosts.deny文件,如果匹配,则拒绝访问。
如果客户端不匹配两个文件中的条目,则允许访问。
配置/etc/hosts.deny禁止所有用户访nfs的守护进程。只有hosts.allow文件指定的ip才能访问。内容如下:
portmap:ALL
lockd:ALL
mountd:ALL
rquotad:ALL
statd:ALL
配置/etc/hosts.allow文件允许192.168.1.252访问nfs.
格式:
service: host [or network/netmask] , host [or network/netmask]
添加以下内容:
portmap: 192.168.1.252
lockd: 192.168.1.252
rquotad: 192.168.1.252
mountd: 192.168.1.252
statd: 192.168.1.252

## 3、客户端配置
在192.168.1.252上执行
#mount -t nfs 192.168.1.251:/usr/local/src /data/src
#df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 6.6G 3.5G 2.9G 56% /
/dev/sda1 190M 17M 164M 10% /boot
tmpfs 62M 0 62M 0% /dev/shm
/dev/hdc 2.9G 2.9G 0 100% /mnt/cdrom
192.168.1.251:/usr/local/src
7.5G 3.0G 4.1G 43% /data/src
nfs文件系统成功挂载到客户端。

分类: Linux系统管理 标签:

NFS共享服务挂载时出现“access denied by server while mounting”的解决方法

2017年1月3日 评论已被关闭

NFS共享服务挂载时出现“access denied by server while mounting”的解决方法
http://www.2cto.com/os/201305/215679.html
笔者用的Linuxf发行版本为Centos6.4,以下方法理论上讲对于Fedora, Red Hat均有效:

搭建好NFS服务后,如果用以下的命令进行挂载:

# mount -t nfs 172.16.12.140:/home/liangwode/test /mnt

出现如下错误提示:

mount.nfs: access denied by server while mounting 172.16.12.140:/home/liangwode/test
那我们可以用以下的方法进行解决:

修改/etc/sysconfig/nfs文件,将

# Turn off v2 and v3 protocol support
# RPCNFSDARGS=”-N 2 -N 3″
# Turn off v4 protocol support
#RPCNFSDARGS=”-N 4″ /*把这句话的#号去掉*/
NFS分为三个版本,即NFS-2 NFS-3 NFS-4,该配置文件默认关闭了这三个的NFS版本,我们只需要打开NFS-4即可。

问题解决!!!
NFS共享服务挂载时出现“access denied by server while mounting”的解决方法

笔者用的Linuxf发行版本为Centos6.4,以下方法理论上讲对于Fedora, Red Hat均有效:

搭建好NFS服务后,如果用以下的命令进行挂载:

# mount -t nfs 172.16.12.140:/home/liangwode/test /mnt

出现如下错误提示:

mount.nfs: access denied by server while mounting 172.16.12.140:/home/liangwode/test
那我们可以用以下的方法进行解决:

修改/etc/sysconfig/nfs文件,将

# Turn off v2 and v3 protocol support
# RPCNFSDARGS=”-N 2 -N 3″
# Turn off v4 protocol support
#RPCNFSDARGS=”-N 4″ /*把这句话的#号去掉*/
NFS分为三个版本,即NFS-2 NFS-3 NFS-4,该配置文件默认关闭了这三个的NFS版本,我们只需要打开NFS-4即可。

问题解决!!!

linux下NFS、FTP使用讲解

2016年11月8日 评论已被关闭

linux下NFS、FTP使用讲解
http://mofansheng.blog.51cto.com/8792265/1654731
一、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

[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

[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的权限

[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

[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 可以查看包所在的源

[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

[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

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@yonglinux 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@yonglinux ~]# tail -1 /etc/passwd
virftp:x:501:501::/home/virftp:/sbin/nologin

分类: Linux系统管理 标签:

nfs安装配置

2016年11月8日 评论已被关闭

nfs安装配置

Server:
1.改写配置文件

#vi /etc/exports
#写上你的公享的文件路径
#例如
#/home 192.168.0(rw) **注意:地址与权限中间没有空格
#让192.168.0网段可以访问 /home 并有 读写权限

2.启动服务

#service portmap start
#service nfs start

Client:

#挂载目录

#mount -t nfs ip地址:/home /mnt

CentOS 6安装portmap
晚上在看UNIX网络编程的RPC,程序执行需要用到portmap,发现CentOS 6上不叫portmap,而是改为rpcbind
01.yum install rpcbind 2. 开机启动关闭

01.chkconfig rpcbind off

NFS介绍
NFS = network file system
NFS只有三个系统守护进程:
rpc.nfsd:它是基本的NFS守护进程,主要功能是管理客户端是否能够登录服务器
rpc.mountd:它是RPC安装守护进程,主要功能是管理NFS的文件系统。当客户端顺利通过rpc.nfsd登录NFS服务后,在使用NFS服务所提供的,还必须通过文件使用权限的验证。它会读取NFS的配置文件/etc/exports来对比客户端权限。
portmap:portmap的主要功能是进行端口映射工作。当客户端尝试连接并使用RPC服务器提供的服务(如NFS服务)时,portmap会将所管理的与服务对应的端口提供给客户端,从而使客户可以通过该端口向服务器请求服务。
nfs的端口是2049 ,但是它基于portmap,portmap的端口是111,所以默认策略是允许,禁止其中一个端口,都能禁止nfs服务器,而且nfs服务器自己的client描述功能已经很强大了。
相关文件:
1、/etc/exports
这个文件是NFS的主要配置文件,不过系统并没有默认值,所以这个文件不一定会存在,可能要使用vim手动建立,然后在文件里面写入配置内容。现在的版本都有的,等会我们修改的也就是这个文件
2、/usr/sbin/exportfs
这是维护NFS共享资源的命令
3、/usr/sbin/showmount
shouwmount命令主要是用在client端,可以用来查看NFS共享出来的目录资源
4、/var/lib/nfs/*tab
其中的etab记录了NFS分享出来的目录的完整权限设定值,另一个是xtab,记录曾经连接到此NFS主机的相关client数据。

一、下载或从光盘上找到nfs服务安装包。

二、安装(nfs*代表其安装包名称):
# rpm -ivh nfs*

三、配置NFS文件:
现在我们来定义我们需要共享的文件和目录,用NFS共享的目录和文件是没有selinux限制的。
这个配置文件只要分为三列
第一列,写入你需要共享的目录路径
第二列 写入客户端描述,也就是哪些客户端可以使用你的服务器
第三列是紧挨着第二列的,内容是共享的权限
NFS对client的表达方式要求不是很严格,常用的表达方式他都能识别
比如:
IP就直接输入IP:192.168.0.24
网段:192.168.0.0/24 或 192.168.0.0/255.255.255.0
域名: www.linux.com
域:*.linux.com
如果表示所有的IP都能访问,就直接输入:*
而且你还可以分段表示,如下:
/mnt/dvd 192.168.2.0/24(ro,sync) 192.168.1.168(rw)
我们来配置一个例子试一下:
# vi /etc/exports
在里面加入如下内容:
/mnt/dvd 192.168.2.0/24(ro,sync)
保存并退出。
# exportfs -r
# service nfs restart
如果上面的命令都返回正常的话,就配置成功了。
# exportfs (此命令可以查看到本机用NFS共享的目录)
# showmount -e [NFS服务器IP] (它也可以查看到)
配置成功了之后,就可以挂载了。
挂载可以使用mount命令手动挂载,也可以使用autofs挂载
如果使用fstab挂载的话,要注意了,由于系统启动读取fstab在启动rc.d之前。所以那个时候nfs还没有启动,所以会挂载失败,可以在rc.local里面写入 mount -a 来在最后从新挂载fstab
我们先手动挂载试试
# mount -t nfs 192.168.2.11:/mnt/dvd /mnt/nfs
如果没有报错,就证明挂载成功了,也可以用mount命令来查看是否挂载成功
进去看看,是不是和我们/mnt/dvd目录下的东西一样

(卸载命令 umount /mnt/nfs)

然后我们在/mnt/nfs里面建立一个文件,看看权限是什么
看见没有,我明明是root写入的,怎么变成nfsnobody了呢?
NFS的共享权限和访问控制
关于刚才文件属于nfsnobody的原因,这个是由于系统默认的NFS共享权限中的root_squash导致的
root_squash:当登陆NFS主机使用共享目录的使用者是root时,其权限被转换成匿名使用者,通常它的UID与GID都会变成nobody身份。
其实NFS有很多默认的参数,我们可以去看看
大家看见了吗,默认就有sync,wdelay,hide等等
no_root_squash是让root保持权限,root_squash是把root映射成nobody。
no_all_squash 就不让所有用户保持在挂载目录中的权限
所以,root建立的文件是nfsnobody
sync:同步写入资料到内存与硬盘中
async:资料会暂存到内存中,而非直接写入硬盘
这两个那个比较好?
如果你是重要的小文件,当然是sync,同步写入,避免文件丢失
如果你是很大的数据,建议不要同步写入
rw:可读可写
ro:只读,这个很简单
注意:如果iptables开启了,nfs相关端口TCP和UDP都要开启,只开启一个的话是不行的!!
附:权限详细说明
ro 只读访问
rw 读写访问
sync 所有数据在请求时写入共享
async NFS在写入数据前可以相应请求
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用户具有根目录的完全管理访问权限
anonuid=xxx 指定NFS服务器/etc/passwd文件中匿名用户的UID
anongid=xxx 指定NFS服务器/etc/passwd文件中匿名用户的GID

搭建NFS遇到的问题
1,在启动NFS服务器的时候遇到的一个问题如下,原因在于NFS配置文件中地址与权限中间多了一个空格,去掉空格重新启动即可:

[root@youxia121 local]# service nfs restart

关闭 NFS mountd:[确定]
关闭 NFS 守护进程:[确定]
关闭 NFS 服务: [确定]
启动 NFS 服务: exportfs: No options for /usr/local/data/ 192.168.0.122: suggest 192.168.0.122(sync) to avoid warning

exportfs: No host name given with /usr/local/data (rw,no_root_squash,no_all_squash,sync), suggest *(rw,no_root_squash,no_all_squash,sync) to avoid warning

[确定]

关掉 NFS 配额:[确定]
启动 NFS 守护进程:[确定]
启动 NFS mountd:[确定]

2,客户端在挂载的时候遇到的一个问题如下,可能是网络不太稳定,NFS默认是用UDP协议,换成TCP协议即可:
[root@youxia122 local]# mount -t nfs 192.168.0.121:/usr/local/data /usr/local/data
mount.nfs: Input/output error
解决方法:mount -t nfs 192.168.0.121:/usr/local/data /usr/local/data -o proto=tcp -o nolock

分类: Linux系统管理 标签:

NFS umount 提示 device is busy

2016年11月8日 评论已被关闭

NFS umount 提示 device is busy
http://blog.163.com/chen_r200509/blog/static/3411130020134811474686/
问题现象:
sudo umount /data1/logs/web1logs
umount.nfs: /data1/logs/web1logs: device is busy
umount.nfs: /data1/logs/web1logs: device is busy

方法一:
fuser -m -v /data/
用户 进程号 权限 命令
/data/: root 2798 ..c.. bash
root 2996 ..c.. su
如上所示,有两个进程占用了,将其kill掉,再重新取消挂载。
kill -9 2798 2996
umount /data1/logs/web1logs

方法二:
umount -l /data1/logs/web1logs

方法三:
fuser -km /data1/logs/web1logs

分类: Linux故障排查 标签:

解决Linux NFS umount ‘device is busy’ and ‘df -h’ hang

2016年11月8日 评论已被关闭

解决Linux NFS umount ‘device is busy’ and ‘df -h’ hang

http://www.linuxidc.com/Linux/2013-12/93758.htm
公司开发、测试、准生产数据库的备份都是nfs挂载的nas盘和备份主机的本地磁盘,最近nas的权限做了调整后,导致nfs挂载点掉了。df -h看不到挂载的nas,并且导致操作hang住。

一、’df -h’ hang
[root@develop119 ~]# df -h
文件系统 容量 已用 可用 已用% 挂载点
/dev/sda5 34G 10G 22G 32% /
/dev/sda7 76G 68G 4.1G 95% /oradata
/dev/sda3 34G 29G 2.9G 91% /u01
/dev/sda2 48G 24G 22G 52% /bakcup
/dev/sda1 145M 12M 126M 9% /boot
tmpfs 3.9G 0 3.9G 0% /dev/shm
192.168.101.119:/nfs_backup
197G 89G 99G 48% /bakcup/expdp_bk/dmp
这里df -h后,操作hang住,无法查看挂载点,查看/etc/fatab后,发现未设置开机自动挂载。
解决办法:
查看挂载点:
[root@develop119 ~]# cat /proc/mounts
rootfs / rootfs rw 0 0
/dev/root / ext3 rw,data=ordered 0 0
/dev /dev tmpfs rw 0 0
/proc /proc proc rw 0 0
/sys /sys sysfs rw 0 0
/proc/bus/usb /proc/bus/usb usbfs rw 0 0
devpts /dev/pts devpts rw 0 0
/dev/sda7 /oradata ext3 rw,data=ordered 0 0
/dev/sda3 /u01 ext3 rw,data=ordered 0 0
/dev/sda2 /bakcup ext3 rw,data=ordered 0 0
/dev/sda1 /boot ext3 rw,data=ordered 0 0
tmpfs /dev/shm tmpfs rw 0 0
none /proc/sys/fs/binfmt_misc binfmt_misc rw 0 0
sunrpc /var/lib/nfs/rpc_pipefs rpc_pipefs rw 0 0
/etc/auto.misc /misc autofs rw,fd=7,pgrp=2854,timeout=300,minproto=5,maxproto=5,indirect 0 0
-hosts /net autofs rw,fd=13,pgrp=2854,timeout=300,minproto=5,maxproto=5,indirect 0 0
192.168.101.119:/nfs_backup /bakcup/expdp_bk/dmp nfs rw,vers=3,rsize=262144,wsize=262144,hard,proto=tcp,timeo=600,retrans=2,sec=sys,addr=192.168.101.119 0 0
172.16.7.241:/db_bak /mnt nfs rw,vers=3,rsize=32768,wsize=32768,hard,proto=tcp,timeo=600,retrans=2,sec=sys,addr=172.16.7.241 0 0

发现nas盘的挂在目录是/mnt

umount挂载点
[root@develop119 ~]# umount -lf /mnt
[root@develop119 ~]# df -h
文件系统 容量 已用 可用 已用% 挂载点
/dev/sda5 34G 10G 22G 32% /
/dev/sda7 76G 68G 4.1G 95% /oradata
/dev/sda3 34G 29G 2.9G 91% /u01
/dev/sda2 48G 24G 22G 52% /bakcup
/dev/sda1 145M 12M 126M 9% /boot
tmpfs 3.9G 0 3.9G 0% /dev/shm
192.168.101.119:/nfs_backup
197G 89G 99G 48% /bakcup/expdp_bk/dmp
[root@develop119 ~]#

二、umount ‘device is busy’
[root@mysql10 ~]# umount /mnt/
umount: /mnt: device is busy

umount: /mnt: device is busy

解决device is busy:
[root@mysql10 ~]# fuser -k /mnt/ –fuser 命令显示访问某个文件的进程的PID,-k 是kill 访问这个文件的进程。
[root@mysql10 ~]# umount /mnt/
[root@mysql10 ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/VolGroup00-LogVol00
229G 111G 107G 51% /
/dev/sda1 99M 13M 82M 14% /boot
tmpfs 3.9G 0 3.9G 0% /dev/shm

三、重启nfs server端的portmap和nfs 后重新挂载
/etc/init.d/portmap restart 或者service portmap restart
/etc/init.d/nfs restart 或者service nfs restart

分类: Linux故障排查 标签:

nfs只能挂载为nobody的解决方法

2014年11月14日 评论已被关闭

nfs只能挂载为nobody的解决方法

http://my.oschina.net/panzhc/blog/191663
不得不承认centos6较centos5发生了很大的变化,在新部署的centos 6.4上又遇到nfs挂载的问题。问题现象是,在配置完nfs后,无论配置里指定的是何用户,挂载成功后显示的只能是nobody用户,本想通过修改/etc/passwd和/etc/group对应的uid和gid号解决,发现重新挂载后,用户仍然是nobody 。

造成该问题的原因是,在centos 6版本中默认使用的nfs-v4版本,其提供了称为rpc.idmapd 的守护进程,并使用 /etc/idmapd.conf 的配置文件。当请求加载nfsv4 时,该守护进程将处理 UID 和 GID 映射。默认使用nis,没有nis它会自动映射成nobody用户。

既然找到了原因,找解决方法也就不难了,大致找了下网上的解决方法,分如下两种。

方法一:mount中指定参数法

在mount挂载的时候指定使用v3版本去挂载,如下:

mount -t nfs -o vers=3 ip:/data1 /data1显然不推荐该方法,既然有了V4版本,其肯定较V3版本做了很多优化,如果再用V3,显然跟不上时代的步伐 。

方法二:修改/etc/idmapd.conf文件

修改前,先看下为什么会mount成nobody,在/etc/idmapd.conf文件中,mapping配置下有如下两句 。

[Mapping] Nobody-User = nobody Nobody-Group = nobody有人肯定说,直接修改这两句,变成想要的用户和组不就行了 ? 当然没这么简单,这里改了后,会发现mount的目录只有读的权限,没有写的权限 。想在彻底的解决该文件,只需要客户端和服务端各改一行就行了。修改方法为,取消/etc/idmapd.conf中如下行的注释,改为你所使用的根域名:

#Domain = local.domain.edu如:都改为:

Domain = 361way.com更改完成后,重启idmapd服务:

service rpcidmapd restart至此,问题解决。记得是客户端和服务端都要修改才行,只改一处,问题仍然无法解决 。另外在umount的过程中,还可能遇到无法umount的问题:

root@test:/# umount /data1/nfs/ umount.nfs: /data1/nfs: device is busy
umount.nfs: /data1/nfs: device is busy遇到该问题时只需要使用fuser命令就可以解决:

root@test:/# fuser -km /data1/nfs/ 或 root@test:/# fuser -f /data1/nfs/ 执行完上面的操作后,再去umount就可以了。fuser上面用到的几个参数的意义如下:

-f silently ignored (for POSIX compatibility)
-i ask before killing (ignored without -k)
-k kill processes accessing the named file
-m show all processes using the named filesystems