这样,所有的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/
至此,关于能否删除文件的需求就全部解决了。
3.2 限制读取别人的文件
同之前一样,要完成这个任务首先需要明确,用户具有哪种权限才可以读取文件。这个问题相对比较简单,在Linux系统中,用户只要对文件本身具有“读取(r)”权限,那么便可以查看文件中的内容。
综合任务4、5、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系统中的绝大多数服务,用户在使用这些服务时的最终权限基本都是由两个因素综合决定的:一个因素是在服务配置文件中所做的相关设置,另一个因素则是系统权限。因而作为系统运维人员,必须要熟知服务配置和系统权限,这样方能更好地满足各种不同的实际工作需求。
Linux公社的RSS地址:https://www.linuxidc.com/rssFeed.aspx