文件共享是在企业办公网络中经常用到的一项功能,如何设置并使用文件共享在技术上并不复杂,其中的问题主要集中在权限配置方面。
本文以世界技能大赛网络系统管理赛项中的一道题目作为案例,详细分析了如何利用Samba服务结合系统权限来完成各种复杂的权限设置,本文所采用的系统版本为CentOS7。
1. 任务需求与分析
将/share/archive目录创建为samba共享,并完成下列要求:
① 共享名为archive;
② zhangsan,lisi,wangwu用户都能通过输入用户名和密码(Skills39)登录并上传文件;
③ 其他人不能访问共享目录;
④ zhangsan能够查看和删除所有人的文件;
⑤ lisi能够查看所有人的文件,但不能删除别人的文件;
⑥ wangwu只能查看和删除自己的文件,不能查看和删除别人的文件;
在这6项需求中,第1、2、3项需求属于Samba服务的常规配置,实现起来较为简单;第4、5、6项需求主要是针对不同用户的权限设置,需要结合系统权限完成配置,实现起来较为复杂。下面就从这两个方面分别进行分析。
2. Samba常规配置
在CentOS7系统中所提供的Samba版本为4.6.2,软件默认没有安装,首先执行下列命令安装、启动服务,并将之设为开机自动运行。
# yum install samba
# systemctl start smb
# systemctl enable smb
Samba的配置文件为“/etc/samba/smb.conf”,下面在配置文件中定义共享,相关设置项如图1所示。
对设置项的解释:
[archive]:指定共享名,也就是客户端在访问时所看到的共享目录名字。
path:指定共享目录在服务器中对应的实际路径,要求必须使用绝对路径。
valid users:只允许指定的Samba用户访问该共享。
writable:共享目录是否允许Samba用户写入。这里虽然设置了所有Samba用户都可以写入,但由于“valid users”设置项限制了只有指定的三个用户可以访问共享,因而实际上也只有这三个用户可以写入。
配置完成后,保存退出。
下面创建共享目录,并将其权限设为777。
# mkdir -p /share/archive
# chmod 777 /share/archive
接下来再创建Samba用户。由于Samba用户要以系统用户为基础,因而需要先创建出系统用户之后,再将其添加为Samba用户。这里为了进行测试,额外再创建一个Samba用户maliu。
# useradd -s /sbin/nologin zhangsan
# useradd -s /sbin/nologin lisi
# useradd -s /sbin/nologin wangwu
# useradd -s /sbin/nologin maliu
下面将这些系统用户添加为Samba用户,同时需要为每位用户指定密码。需要注意的是,Samba用户的密码与系统用户的密码没有任何关系。
# smbpasswd -a zhangsan
# smbpasswd -a lisi
# smbpasswd -a wangwu
# smbpasswd -a maliu
最后,可以通过执行“pdbedit -L”命令列表显示目前系统中已经存在的所有Samba用户。
# pdbedit -L
zhangsan:1009:
lisi:1010:
wangwu:1011:
maliu:1012:
至此,Samba的常规配置就完成了,执行“systemctl restart smb”命令重启服务,使配置生效。然后可以在Windows或Linux客户端进行访问测试,用户zhangsan、lisi、wangwu都可以访问共享,并上传文件,但用户maliu没有访问共享的权限。具体测试过程从略。
3. 权限设置
下面再来完成第4、5、6项要求,这也是在这整个任务需求中最复杂的部分。将这三项需求进行归纳,核心问题主要有两个:是否允许删除别人的文件,是否允许读取别人的文件。下面分别来解决这两个问题。
3.1 限制删除别人的文件
要完成这个任务,首先需要明确一个问题:在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/