最近尝试配置wordpress环境,想在上面记录一些自己的笔记。
配置环境过程中遇到了很多文件权限的问题,故写下第一篇,也是测试一下wordpress好不好用。
实验是这样的,假设一般使用的账户为User_A,另一个为User_B。
User_A设置家目录一个文件夹,随后建立一个以User_B为拥有者的文件,文件夹设置其他用户不可访问的权限,A和B是不同组,想测试User_B能不能直接访问本属于User_A用户的文件夹下的自己的文件。
// 不让其他用户可用
mkdir 700 ~/testdir
cd ./testdir
vim test.txt
// 把文件交给User_B
chown User_B:User_B test.txt
su User_B
// 直接访问
vim /home/User_A/testdir/test.txt
不出意外,没权限访问,即使打开vim,底下也显示“Permission Denied”。
修改权限再试试。
su User_A
// 给予B用户可读权限
chmod 704 ~/testdir
su User_B
// 直接访问
vim /home/User_A/testdir/test.txt
这次情况倒是出乎我意料,权限依旧被拒绝。按道理,如果可以读取文件夹,那么文件夹下的自己的文件应该可以被User_B访问啊。
原因就是:我混淆了执行和可读两种权限的作用。
可读权限是允许用户查看目录内容,如果这时使用
xxxxxxxxxx
cat /home/User_A/testdir
那么就会打印testdir目录下的所有文件名。
因为文件夹(目录)本身只存放文件夹下所有文件的索引(存放位置),甚至这些索引通常也不指向文件的真实位置,而是指向的文件控制块(FCB)或者inode之类的。所以并非文件夹去存放其下文件本身,而文件夹只是一个索引块,这也是sc小学二年级就学过的知识。
可以想到的是,调用文件夹,就可以去访问其下文件。于是有
xxxxxxxxxx
su User_A
// 给予B用户可执行权限
chmod 701 ~/testdir
su User_B
// 直接访问
vim /home/User_A/testdir/test.txt
可以访问,并做出修改。
注意到这时候没有给予B可读文件夹的权限,于是
// 正常cd,说明cd正是调用了文件夹,而不是“读取”了文件夹
cd /home/User_A/testdir
// 权限被拒绝,说明ls只是打印了其下文件名
ls
另外,在只有只读权限,没有执行权限的情况下。User_B用户 ls 该文件夹,会出现只能打印文件名,而无法显示其相关信息的情况。这正说明,系统是通过调用文件夹的索引去寻找其下文件的控制块。