刚刚在贴吧看到有人对web目录如何做权限设定很是疑惑。
下面我来做一下讲解。
本文使用到的是linux中的setgid(该权限只对目录有效. 目录被设置该位后, 任何用户在此目录下创建的文件都具有和该目录所属的组相同的组.)权限。
关于setgid请参考:Linux下chmod g+s 、chmod o+t 、chmod u+s详解
下面是详细的实验步骤:
1.创建公共web组,以及多个账户,保证新建的账户共同属于web组。
[root@bak ~]# groupadd web [root@bak ~]# useradd lili -G web [root@bak ~]# useradd lilei -G web [root@bak ~]# useradd hanmeimei -G web
2.在/tmp下创建测试目录web,设定其属组为"web",并将权限设定为775。
[root@bak tmp]# pwd /tmp [root@bak tmp]# mkdir web [root@bak tmp]# chmod 775 web [root@bak tmp]# chgrp web web [root@bak tmp]# ll drwxrwxr-x. 2 root web 4096 12月 11 10:28 web [root@bak tmp]#
3.测试普通权限下,多个用户是否可以同时读写。
使用lili用户新建一个文件名为lili。
[lili@bak tmp]$ cd web [lili@bak web]$ ls [lili@bak web]$ touch lili [lili@bak web]$ ll 总用量 0 -rw-rw-r--. 1 lili lili 0 12月 11 10:29 lili
我们可以看到lili新建的文件默认权限为775,属主和属组都是lili。这个权限不出意外的话,lilei是没有权限写的,只是能读,下面我们测试。
[lilei@bak web]$ pwd /tmp/web [lilei@bak web]$ ll 总用量 0 -rw-rw-r--. 1 lili lili 0 12月 11 10:29 lili [lilei@bak web]$ echo "I'm lilei.">>lili bash: lili: 权限不够
不出所料,lilei确实对此文件没有写的权限。
下面的步骤,就是设定lili创建的文件,lilei和hanmeimei默认是可以更改的。
4.测试setgid权限,创建同组用户都能读写的目录。
返回root用户,清空/tmp/web目录,并设定setgid权限。
[root@bak tmp]# ll web -d drwxrwxr-x. 2 root web 4096 12月 11 10:29 web [root@bak tmp]# chmod g+s web [root@bak tmp]# rm -rf web/* [root@bak tmp]# ll web -d;ll web drwxrwsr-x. 2 root web 4096 12月 11 10:32 web 总用量 0 [root@bak tmp]#
此时我们可以看到web目录的权限从【drwxrwxr-x】变为【drwxrwsr-x】。
web目录已经具备setgid权限了。
5.测试是否已经达到预期需求。
切换到lili用户,重新建立一个文件名为lili,并且在文件中写入文本“I'm lili.”。
[lili@bak web]$ touch lili [lili@bak web]$ ll 总用量 0 -rw-rw-r--. 1 lili web 0 12月 11 10:32 lili [lili@bak web]$ echo "I'm lili.">>lili [lili@bak web]$ cat lili I'm lili. [lili@bak web]$ ll 总用量 4 -rw-rw-r--. 1 lili web 36 12月 11 10:34 lili
注意看,lili文件默认的属组就是web了,而组用户的权限为rw-,不出意外的话,与lili同属web组的lilei和hanmeimei也对此文件具有读写权限,下面我们测试。
切换到lilei用户。
尝试对lili文件写入文本"I'm lilei."。并使用cat查看lili文件。
[lilei@bak web]$ echo "I'm lilei.">>lili [lilei@bak web]$ cat lili I'm lili. I'm lilei.
我们可以看到,文件里有lili和lilei写入的文本了。
同样用hanmeimei用户测试,应该有相同的结果。
[hanmeimei@bak web]$ ll 总用量 4 -rw-rw-r--. 1 lili web 21 12月 11 10:33 lili [hanmeimei@bak web]$ echo "I'm hanmeimei.">>lili [hanmeimei@bak web]$ cat lili I'm lili. I'm lilei. I'm hanmeimei.
接下来我们验证一下lilei删除hanmeimei的文件。
使用hanmeimei用户,建立一个包含网络信息的hanmeimei文件。
[hanmeimei@bak web]$ echo `ifconfig`>hanmeimei [hanmeimei@bak web]$ ll 总用量 8 -rw-rw-r--. 1 hanmeimei web 768 12月 11 10:35 hanmeimei -rw-rw-r--. 1 lili web 36 12月 11 10:34 lili
通过lilei用户查看此文件,并将此文件删除。
[lilei@bak web]$ ll 总用量 8 -rw-rw-r--. 1 hanmeimei web 768 12月 11 10:35 hanmeimei -rw-rw-r--. 1 lili web 36 12月 11 10:34 lili [lilei@bak web]$ cat hanmeimei eth0 Link encap:Ethernet HWaddr 00:24:E8:0C:4C:90 inet addr:192.168.16.180 Bcast:192.168.16.255 Mask:255.255.255.0 inet6 addr: fe80::224:e8ff:fe0c:4c90/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:322849515 errors:0 dropped:0 overruns:0 frame:0 TX packets:177573680 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:452911214991 (421.8 GiB) TX bytes:12856189965 (11.9 GiB) lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 inet6 addr: ::1/128 Scope:Host UP LOOPBACK RUNNING MTU:16436 Metric:1 RX packets:1275112 errors:0 dropped:0 overruns:0 frame:0 TX packets:1275112 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:427547657 (407.7 MiB) TX bytes:427547657 (407.7 MiB) [lilei@bak web]$ rm -rf hanmeimei [lilei@bak web]$ ll 总用量 4 -rw-rw-r--. 1 lili web 36 12月 11 10:34 lili [lilei@bak web]$
可以看到,lilei可以顺利删除hanmeimei创建的文件。
总结
通过setgid权限,我们可以实现多个用户可以更改web目录中的文件。
生产环境中,我们可以设定多个用户通过ftp登录到web目录,用户对文件都有读写权限,apache(只讨论使用apache的情况)用户也具有读写权限,这样就不用考虑更改或上传文件后重新修改权限,或某个新用户没有权限的问题了。
回顾一下,步骤很简单:
1.设定用户属于同一个组。
2.设定web目录属组为这个组。
3.web目录使用setgid权限。
这篇文章还没有人留言,快来抢沙发吧。