文件共享是在企业办公网络中常常用到的一项功能,如何设置并使用文件共享在技术上并不复杂,其中的问题主要集中在权限配置方面。
本文以世界技能大赛网络系统管理赛项中的一道题目做为案例,详细分析了如何利用Samba服务结合系统权限来完成各类复杂的权限设置,本文所采用的系统版本为CentOS7。服务器
将/share/archive目录建立为samba共享,并完成下列要求:
① 共享名为archive;
② zhangsan,lisi,wangwu用户都能经过输入用户名和密码(Skills39)登陆并上传文件;
③ 其余人不能访问共享目录;
④ zhangsan可以查看和删除全部人的文件;
⑤ lisi可以查看全部人的文件,但不能删除别人的文件;
⑥ wangwu只能查看和删除本身的文件,不能查看和删除别人的文件;
在这6项需求中,第一、二、3项需求属于Samba服务的常规配置,实现起来较为简单;第四、五、6项需求主要是针对不一样用户的权限设置,须要结合系统权限完成配置,实现起来较为复杂。下面就从这两个方面分别进行分析。网络
在CentOS7系统中所提供的Samba版本为4.6.2,软件默认没有安装,首先执行下列命令安装、启动服务,并将之设为开机自动运行。运维
# yum install samba # systemctl start smb # systemctl enable smb
Samba的配置文件为“/etc/samba/smb.conf”,下面在配置文件中定义共享,相关设置项如图1所示。ide
对设置项的解释:
[archive]:指定共享名,也就是客户端在访问时所看到的共享目录名字。
path:指定共享目录在服务器中对应的实际路径,要求必须使用绝对路径。
valid users:只容许指定的Samba用户访问该共享。
writable:共享目录是否容许Samba用户写入。这里虽然设置了全部Samba用户均可以写入,但因为“valid users”设置项限制了只有指定的三个用户能够访问共享,于是实际上也只有这三个用户能够写入。
配置完成后,保存退出。
下面建立共享目录,并将其权限设为777。测试
# mkdir -p /share/archive # chmod 777 /share/archive
接下来再建立Samba用户。因为Samba用户要以系统用户为基础,于是须要先建立出系统用户以后,再将其添加为Samba用户。这里为了进行测试,额外再建立一个Samba用户maliu。rest
# useradd -s /sbin/nologin zhangsan # useradd -s /sbin/nologin lisi # useradd -s /sbin/nologin wangwu # useradd -s /sbin/nologin maliu
下面将这些系统用户添加为Samba用户,同时须要为每位用户指定密码。须要注意的是,Samba用户的密码与系统用户的密码没有任何关系。code
# smbpasswd -a zhangsan # smbpasswd -a lisi # smbpasswd -a wangwu # smbpasswd -a maliu
最后,能够经过执行“pdbedit -L”命令列表显示目前系统中已经存在的全部Samba用户。blog
# pdbedit -L zhangsan:1009: lisi:1010: wangwu:1011: maliu:1012:
至此,Samba的常规配置就完成了,执行“systemctl restart smb”命令重启服务,使配置生效。而后能够在Windows或Linux客户端进行访问测试,用户zhangsan、lisi、wangwu均可以访问共享,并上传文件,但用户maliu没有访问共享的权限。具体测试过程从略。it
下面再来完成第四、五、6项要求,这也是在这整个任务需求中最复杂的部分。将这三项需求进行概括,核心问题主要有两个:是否容许删除别人的文件,是否容许读取别人的文件。下面分别来解决这两个问题。table
要完成这个任务,首先须要明确一个问题:在Linux系统中,用户须要具备哪一种权限,才能够将一个文件删除。
Linux系统规定,用户只要对某个目录具有“写入(w)”权限,那么即可以修改或删除该目录中的任何文件,而不论这个文件的权限是什么。
也就是说,用户可否删除一个文件,取决于用户对文件所在的目录是否具备写入权限。因为咱们将共享目录/share/archive的系统权限设为了777,于是此时任何用户均可以删除该目录中的任意文件。但在任务5和任务6中,又明确要求用户lisi和wangwu不能删除别人的文件,因此这里天然就想到了sbit粘滞位权限。
sbit权限的做用是:当目录被设置了sbit权限以后,即使用户对目录有“写入(w)”权限,也不能删除该目录中其余用户的文件,每一个文件只有该文件的全部者和root用户才有权将其删除。
于是下面须要为共享目录/share/archive设置sbit权限:
# chmod o+t /share/archive/ # ll -d /share/archive/ drwxrwxrwt. 2 root root 26 4月 28 20:32 /share/archive/
这样,全部的Samba用户均可以向共享目录中上传文件,可是只能删除本身的文件,而没法删除别人的文件。
但如此一来,又没法知足任务4的需求了,用户zhangsan也没法删除别人的文件。到这里,思路好像进入了死胡同。
其实关于sbit权限,还有一条规则是:对于目录的全部者,能够不受sbit权限的限制,他能够删除该目录中全部用户的文件。
只要明白了该规则,问题天然就迎刃而解,咱们只需将共享目录的全部者更改成zhangsan便可。
# chown zhangsan /share/archive/ # ll -d /share/archive/ drwxrwxrwt. 2 zhangsan root 26 4月 28 20:32 /share/archive/
至此,关于可否删除文件的需求就所有解决了。
同以前同样,要完成这个任务首先须要明确,用户具备哪一种权限才能够读取文件。这个问题相对比较简单,在Linux系统中,用户只要对文件自己具备“读取(r)”权限,那么即可以查看文件中的内容。
综合任务四、五、6这三项需求,用户zhangsan和lisi能够读取全部人的文件,而用户wangwu则只能读取本身的文件。下面是具体的实现过程。
首先在Samba的配置文件“/etc/samba/smb.conf”中定义用户上传文件的默认权限,这里须要用到“create mask”设置项,将用户上传文件的默认权限设置为0640,也就是说只有文件的全部者以及所属组用户才具备读取权限。相关设置项如图2所示。
设置完成后,一样须要执行“systemctl restart smb”命令重启服务生效。
接下来咱们只需使得zhangsan和lisi可以成为每一个上传文件的所属组的成员便可,可是默认状况下,用户所上传文件的所属组都是与该用户同名的私有组,若是要使得全部用户上传文件的所属组都可以是同一个指定的用户组,那么就须要为共享目录设置SGID权限。
SGID权限的做用是:若是针对目录设置SGID,则在该目录内所创建的文件或子目录的所属组,将统一被自动设置成此目录的所属组。
好比咱们在系统中建立一个名为admin的用户组,并将其设为共享目录/share/archive/的所属组,而后再对/share/archive/目录设置SGID权限,这样用户在共享目录中上传的全部文件,其默认的用户组都统一被设置成了admin。
# groupadd admin # chown :admin /share/archive/ # chmod g+s /share/archive/ # ll -d /share/archive drwxrwsrwt. 2 zhangsan admin 60 4月 29 10:01 /share/archive
而后再将用户zhangsan和lisi都加入到admin组便可。
# gpasswd -a zhangsan admin # gpasswd -a lisi admin
最后,分别以用户zhangsan、lisi、wangwu的身份在目录中上传文件,其默认权限如图3所示。
至此,这个综合案例中的全部任务需求都已所有完成。对于Linux系统中的绝大多数服务,用户在使用这些服务时的最终权限基本都是由两个因素综合决定的:一个因素是在服务配置文件中所作的相关设置,另外一个因素则是系统权限。于是做为系统运维人员,必需要熟知服务配置和系统权限,这样方能更好地知足各类不一样的实际工做需求。