看了一个比赛的题目,感觉也挺有意思的,比平常配置的权限稍微有点不同,并且稍微有点复杂。我们慢慢来看一看: • 题目:创建samba共享/share/archive目录,要求: • 共享名为archive; • 1、zhangsan,lisi,wangwu用户都能通过输入用户名和密码(Skills39)登录并上传文件; • 2、zhangsan能够查看和删除所有人的文件; • 3、lisi能够查看所有人的文件,但不能删除别人的文件; • 4、wangwu只能查看和删除自己的文件,不能查看和删除别人的文件; • 5、其他人不能访问共享目录。

安装服务什么的就不在说了,相信你们应该都非常熟练了。

**一、创建共享目录 ** 首先创建共享目录并将目录设置到最大权限 mkdir -p /share/archive chmod 777 /share/archive **注意:**这里虽然将目录的权限设置到最大,但是我们可以通过修改配置文件权限来限制用户对这个目录的权限。例如某smb用户对目录有写入的权限,但是配置文件中这个用户没有可写的权限,这个用户还是不能写。 我们可以来测试一下,验证zhangsna用户是否有写入的权限 在配置文件中让zhangsna用户不可写。 在客户端验证 Zhangsna用户写入文件失败 所以我认为只有当配置文件和目录都有写入的权限的时候,用户才有权限写入,缺一不可。 二、回归正题,根据题目要求修改服务配置文件。 1、Vim /etc/samba/smb.conf 在文件的最后添加以下几行: 具体说明解释: (1)Comment=archive共享文件的一个说明,有没有没有关系 (2)Path=/share/archive指定共享目录的路径,必须正确无误 (3)Valid users=zhangsan,lisi,wangwu指定可以用密码登陆的用户, (4)writable=yes.保证三个用户拥有上传的权限

到这里的配置我们通过配置(3)已经满足1、6的限制条件:指定zhangsan,lisi,wangwu用户可以密码登陆,并拒绝其他这可以访问。 张三登陆成功: Lisi登陆成功 Wangwu登陆成功 Maliu登陆失败,拒绝访问:

三、然后分析2,3,4的题目要求: 1、第二个条件:zhangsan能够查看和删除所有人的文件; 从这条限制可以看出,zhangsan用户对着个共享目录有着绝对的权限。所以我们要将共享目录的所有者给zhangsan Chown zhangsan /share/archive 2、然后验证张三用户能否查看和删除所有人的文件。 首先,使用lisi,wangwu用户分别上传文件b.txt,c.txt。 然后,客户端登陆zhangsan用户,去查看这两个文件并删除 成功查看文件内容并删除文件。

• lisi能够查看所有人的文件,但不能删除别人的文件; • wangwu只能查看和删除自己的文件,不能查看和删除别人的文件;

3、这两条还要求lisi,wangwu用户没有删除别人上传的文件的权限,只能删除自己的文件。所以达到这个目的我们可以使用sbit权限

Sbit权限:SBIT(Sticky Bit)目前只针对目录有效,对于目录的作用是:当用户在该目录下建立文件或目录时,仅有自己与 root才有权力删除。也就是说文件是谁的谁就是老大,其他人只能靠边看着。

(1)设置sbit: Chmod +t /share/archive 当设置好sbit的时候,在用户权限显示里面的最后,出现t。 (2)客户端验证用户只能删除自己的文件,不能删除别人的文件。 a.txt,b.txt,c.txt分别对应zhangsan,lisi,wangwu用户上传的文件。可以看到lisi用户只能对自己的文件为所欲为,对别人的文件却不能怎样。再看wangwu也是同样如此: 4、再看题目条件,lisi拥有读所有人的权限,而wangwu只能读自己的。这又该怎么办呢。这个地方我思来想去,用了很长时间。突然我看到配置文件中其他的共享目录中拥有这样的一行配置create mask=。这是给用户创建文件的时候,默认将文件的权限改为create mask等于的值。 (1)如果没有这一行,用户上传的文件是什么权限,我们看一下: 可以看到,在other上面的权限有可以读的权限,所以,当每个用户上传完文件的时候,其他用户都可以读。 所以我们可以通过create mask=的值来限制用户读取的权限,这样不就杜绝了wangwu用户读其他人的文件

(2)修改配置文件,添加create mask=0740

create mask=0740,表示文件所有者用户读写执行的权限,用户组有读的权限,其他用户没有任何权限。但是这里出于安全考虑最好不要给执行权限,可设为0640 (3)我们重新通过这些用户上传文件,并查看上传后的文件权限 (4)验证wangwu只能查看自己的文件: (5)但是当我们这样设置以后,lisi,zhangsan还有读取所有人文件的权限吗?: 很显然不能读取别人的权限,因为lisi,zhangsan分别对于另外两人是个外人。那么为了满足要求,我们又如何让他可以读取所有人的文件。

既然是外人,我们就让lisi分别成为zhangsan,wangwu的亲人,让zhangsan成为lisi,wangwu的亲人。 我们知道每个文件的所属组是有读的权限的。 所以将zhangsan,lisi分别加入到他们的亲人组中。这样lisi可以读取zhangsan,wangwu的文件,zhansan可以读取lisiwangwu的文件

(6)所以我们可以将lisi分别加入到zhangsan组合wangwu组。 Gpasswd -a lisi zhangsan Gpasswd -a lisi wangwu 分别将zhangsan添加到lisi,wangwu组中 (7)这时候我们再来验证zhangsan,lisi 是否拥有读取所有文件的权限

成功读取。

综合验证: 1、所有人拥有上传权限 2、 zhangsna能查看和删除所有人的权限 3、验证lisi能查看别人文件,不能删除别人文件 4、验证wagnwu只能看自己的和删除自己的

总结: 为了满足要求,也就几条关键的权限设置,分别是: (1)目录所有者要是zhangsan; (2)设置目录权限SBIT (3)配置文件添加create mask=0740; (4)将zhangsan加入到lisi,wangwu用户组中 (5)将lisi加入到zhangsan,wangwu用户组中