看了一个比赛的题目,感觉也挺有意思的,比平常配置的权限稍微有点不同,并且稍微有点复杂。我们慢慢来看一看:
? 题目:创建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,表示文件所有者用户读写执行的权限,用户组有读的权限,其他用户没有任何权限
(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用户组中
原文地址:http://blog.51cto.com/12332766/2124983