CentOS 6下的NFS文件共享服务搭建教程

介绍:
nfs是网络文件系统。类似于samba,但不支持身份认证,只能通过ip地址来鉴别客户端。
起初只可用于linux/unix系统,后来windows也可以使用nfs了。
安装软件:

[root@localhost ~]# yum install nfs-utils

配置服务:
nfs默认的配置文件为/etc/exports,若不存在此文件请手动创建。
编辑配置文件

[root@localhost ~]# vim /etc/exports

向其中添加文件共享,一条一行,格式:
要共享的文件夹 允许访问的主机(访问权限) 允许访问的主机2(访问权限)……….允许访问的主机N(访问权限)…..
允许访问的主机可以用IP来指定也可以用网段、主机名(NetBIOS需正常解析),支持通配符,需要注意的是——通配符只能用在主机名上,不可用于ip。
例如:

关于访问权限的详细解释如下(此处摘录自《鸟哥的Linux私房菜——服务器架设篇(第三版)》):

编辑完配置文件后启动服务即可,在正式启动nfs服务前还需要把rpcbind这个服务给启动了(已启动则略过),否则nfs无法启动。rpcbind服务主要是负责在nfs共享时候告诉客户端服务器的nfs端口号的。

[root@localhost ~]# service rpcbind start
[root@localhost ~]# service nfs start

修改共享配置文件后既可以通过重启服务使配置生效也可以通过如下命令使配置立即生效:

[root@localhost ~]# exportfs -arv

查看当前NFS共享的目录。

[root@localhost ~]# showmount -e     //若仅查看已被客户端挂载的目录则使用-d参数替换-e参数。

目录及文件的权限管理:
nfs服务器设置目录及文件的用户权限在实际生产环境中没有多大意义,因为客户机和服务器上的用户虽然用户名是相同的,但UID可能不同,而NFS是通过UID来区别用户的,那就会产生问题啦!而且,就算在服务器上对NFS共享中的某一个目录设置了所有者,那客户端上其实只要把随便一个用户的UID改成和目录所有者的UID相同,就可以具有所有者的权限啦,所以说,为NFS共享中的目录及文件设置权限是完全没有意义的事情。
客户端挂载及卸载nfs:
参考此篇文章。

CentOS 6下挂载NFS共享的方法

CentOS 6下超实用的samba配置教程

介绍:
samba是在linux/unix上实现SMB协议的免费软件,通俗来说就是让linux/unix支持与windows间互相共享文件。
安装软件包:

yum install -y samba

samba配置文件介绍
samba配置文件的存放路径为

/etc/samba/

该目录下有以下三个文件:

lmhosts文件中记录着局域网中NetBIOS与IP地址的对应关系
smb.conf是samba的主配置文件,其内容由全局配置部分和共享配置部分组成。
smbusers文件记录着windowns中用户与linux中用户的对应关系,例如windows中的administrator管理员账户对应linux下的root用户。
samba的配置:
在开始配置前,首先明确下需求:
1、user11和user12用户可以通过samba共享来访问自己的家目录,且此共享仅本人可见。
2、创建三个共享,分别为share1、share2、share3,其共享的本地文件夹分别为/tmp/a1、/tmp/a2、/tmp/a3。
3、group1组的用户user1对share1共享有全部权限,group2组的用户user2对share2有全部权限,group3组的用户user3对share1和share2共享都有全部权限;对于share1和share2共享其他人有只读权限;share3为公共存储,所有人都有存取权。
4、所用用户新建的文件都是本人拥有全部权限,其他人只有只读权限。
知道了需求,那么现在就来根据需求来做具体配置吧:

vim /etc/samba/smb.conf                //使用vim文本编辑器打开配置文件

转到第248行,可以看到如下内容,看开头一行,[homes],home是家的意思,加s呢,变成复数了,可以理解成所有用户的家,哈哈,感觉我像是在讲英语。总之,通过配置此部分就可以满足需求1了。

comment选项是用来添加一个文本描述的。
browseable选项定义他人是否可以看到此共享,yes为可以,no为不可以(仅自己可见)。
writable选项用来定义共享是否可写。
valid users选项定义该共享规则对哪些用户启用。

看显而易见,我们只要设置valid users选项,让此共享配置仅对user11和user12用户生效即可满足需求1。

再来看需求2,新建三个共享,这个怎么破?其实很简单啦,配置文件里已经写好了现成的,我们只需要复制成三份就好。
转到配置文件的末尾,可以看到以[public]关键字开头的配置部分,这就是配置共享的模板。

复制前需要注意,这部分配置文件默认被注释掉了,如果你不想在复制完去一点点的删除三份注释符号的话那最好在复制之前把这一份注释符号删掉,如下图:

三个共享有了,但他们的配置文件是一摸一样的,那共享名和共享的文件夹一定也是一样的,要如何为每一个共享做定制呢?
先看这部分配置文件的简单介绍:

开头的[public]是共享名,可任意起,与实际的共享文件夹可以不同名。
comment是没用的文本介绍。
path是指定要共享的本地文件夹的路径。
public是用来指定是否共享的,有yes和no两个选项,至于这两个选项分别是啥意思我就不啰嗦了。
writable用于配置此共享是否支持写入。
printable指定是否支持打印,没有特殊需求的话这里都保持注释状态。
write list此选项用于决定哪些用户或组对此共享拥有写入权限,此处一般保持注释就好,因为linux的权限管理可比samba的好用多了。

以下是按照需求2修改过的配置文件,修改部分已经用红笔标出来了,对照上方配置选项的解释就可以轻松理解下图的配置内容了。

权限配置部分:
下面来看需求3,很明显这里是需要做权限控制了。但我不得不唠叨一下,samba自带的权限管理配置起来那是相当的蛋疼,而且功能弱爆了。所以这里我们使用linux系统权限管理加ACL来做权限控制。
关于ACL的介绍可以参考:

linux下acl权限详解


在配置权限前,我们先把所需要的用户与组都创建完,并把他们加入到samba用户数据库中,再把要共享的文件夹都创建出来。
新建用户:

useradd user11
useradd user12
useradd user1
useradd user2
useradd user3

新建组:

groupadd group1
groupadd group2
groupadd group3

将用户加入组:

usermod -G group1 user1
usermod -G group2 user2
usermod -G group3 user3

将系统用户加入到samba用户数据库中。

pdbedit -a user11
pdbedit -a user11
pdbedit -a user1
pdbedit -a user2
pdbedit -a user3

使用pebedit命令将系统用户加入samba用户数据库中时会提示输入两次密码,此密码可以与linux系统用户密码不相同,加入成功后会出现类似如下提示:

创建共享的文件夹:

mkdir /tmp/a1
mkdir /tmp/a2
mkdir /tmp/a3

接下来就进入到了最重要的文件夹权限配置阶段了。
先来看/tmp/a1目录的权限配置。
将目录所属组改为group1

chown :group1 /tmp/a1

此时目录/tmp/a1的权限为:

此时group1组的成员对目录是没有写权限的,下面就赋予其读写执行的权限:

chmod 775 /tmp/a1


此时group1组已经拥有了应有的权限,但需求3里面要求grou3组对该共享目录也拥有全部权限,这个就需要ACL来完成了。
执行如下命令:

setfacl -m g:group3:rwx /tmp/a1       //配置ACL权限使group3组的成员对/tmp/a1目录拥有全部权限

此时查看权限:

注意权限的最后多了一个+号,这证明ACL权限已经生效了,再执行。

getfacl /tmp/a1         //查看目录的ACL权限


只要有如上图画红线的部分即是配置成功。
至此/tmp/a1这个目录的全部权限已经配置完成,而/tmp/a2目录的权限与/tmp/a1的权限的配置方法雷同,这里不再赘述。
再来看下/tmp/a3目录的权限,很简单,给他777的权限即可。

chmod 777 /tmp/a3

最后的最后,来看看需求4吧,就差这一个了。
这里依然使用ACL权限来完成需求,而不通过修改samba的配置文件。
那要如何配置ACL呢?没错,只需要配置两条默认ACL权限即可。

setfacl -m d:u::rwx /tmp/a?    //这里使用通配符为所有以a开头而第二个字符为任意字符的文件夹配置权限
setfacl -m d:g::rx /tmp/a?

以/tmp/a1文件夹的acl权限为例:

getfacl /tmp/a1


可以看到如上图中红色标注的部分即为配置成功。
 
好啦,4个需求已经全部满足了,尽情测试吧。

linux下acl权限详解

安装软件包

yum install -y acl

配置acl权限
用于acl权限管理的命令主要有两个:

setfacl          //设置acl权限
getfacl          //查看acl权

首先来看setfacl
常用参数:

-b:删除所有扩展的acl规则,基本的acl规则(所有者,群组,其他)将被保留。
-d:设定默认的acl规则
-R:递归的对所有文件及目录进行操作。
-m:修改文件或目录的acl规则。
-x:删除指定acl规则。

以上只列出常用参数,详细命令帮助可参考:http://man.linuxde.net/setfacl
举个例子:想让user1这个用户对~/test目录拥有全部权限,除了修改所有者或所属组之外还能怎样呢?
且往下看。

setfacl -Rm u:user1:rwx ~/test             //使user1用户对test目录拥有全部权限。

执行以上命令后user1用户即可任意操作~/test目录。
来看一下这条命令,setfacl,设置acl权限、参数R代表递归应用,m修改权限、u代表用户,如果想赋予某个组acl权限就用g,:后边接的要赋予acl权限的用户名或组名(不填则修改所有者或所属组的acl权限),紧接着下一个冒号后面跟的就是要赋予这个用户的权限了、最后接要操作的目录或文件名,就这么简单。
再来看一个例子:

setfacl -m d:u::rwx ~/test                //为test目录下新建的文件或目录设置默认acl权限,对所有用户生效

如果写成这样:

setfacl -m d:u:user1:rwx ~/test

这条命令执行后可以达到什么目的呢?我猜,聪明的读者一定猜到了:是给user1创建的文件或目录设置默认acl权限。
如果你是这样想的,那么恭喜你,猜错了。
这条命令实际的意义其实是给所有用户创建的文件或目录都加上user1这个用户的rwx的acl权限~
最后再来看下如何删除acl权限

setfacl -x d:u:user1 ~/test              //删除~/test目录中关于user1的默认acl权限
setfacl -b ~/test                        //删除~/test目录上所有的acl权限

查看acl权限
查看acl权限使用getfacl命令

getfacl ~/test                           //查看~/test目录的acl权限

会输入类似如下内容

另外,当我们执行ls -l时会发现,拥有acl权限的文件或文件夹其linux默认权限后面多一个“+”号。

最后需要注意的是:linux默认权限是优于acl权限的,就是说当liux默认权限和acl权限同时存在时,系统会优先考虑linux默认权限。

linux中root用户无法删除某个文件的解决方法

root用户登录,删除文件:

rm -f  a.txt

删除不了,提示:

rm: cannot remove 'a.txt': Opreation not permitted

查看权限:

ls -l a.txt
-rwxr--r-- a.txt root root

发现root 用户 有执行文件的权限
再使用 lsattr   命令查看权限:

lsattr a.txt
---i------------ a.txt

发现有一个 i 权限,百度查看此权限,发现 I 权限如下:
不能被删除、改名、设定连结、写入或新增数据;
使用   命令撤销 i 权限:

chattr -i a.txt

再查看:

lsattr a.txt
--------------- a.txt

此时再删除:

rm -f  a.txt

删除成功。
本文来源:http://blog.csdn.net/ye1142262478/article/details/51152228