我有这个文件结构:
> APPLICATION 1
>> CONTROLLER (@JuniorProgrammers)
>> MODELS (symlink to SHARED/MODELS)
>> VIEWS (@Designers)
> APPLICATION 2
>> CONTROLLER (@JuniorProgrammers)
>> MODELS (symlink to SHARED/MODELS)
>> VIEWS (@Designers)
> SHARED
>> MODELS (@SeniorProgrammers)
我需要 php 才能读取文件夹 1.1 的内容,但是通过 FTP 进入文件夹 1 的程序员将无法读取符号链接(他们可以看到符号链接,但不能跟踪它,包括所有读取和写入)。
@ 是具有每层读/写访问权限的用户组。
答案1
符号链接本身有 777 个,因为在 Unix 中,文件安全性是根据文件/inode 来判断的。如果他们正在操作的数据相同,则它应该具有相同的安全条件,无论您为系统提供的打开它的名称如何。
[root@hypervisor test]# ls -l
total 0
lrwxrwxrwx. 1 root root 10 Jun 8 16:01 symTest -> /etc/fstab
[root@hypervisor test]# chmod o-rwx symTest
[root@hypervisor test]# ls -l
total 0
lrwxrwxrwx. 1 root root 10 Jun 8 16:01 symTest -> /etc/fstab
[root@hypervisor test]# :-(
由于权限是在 inode 上设置的,因此它甚至无法使用硬链接:
[root@hypervisor test]# echo "Don't Test Me, Bro" > testing123
[root@hypervisor test]# ls -l
total 4
lrwxrwxrwx. 1 root root 10 Jun 8 16:01 symTest -> /etc/fstab
-rw-r--r--. 1 root root 19 Jun 8 16:06 testing123
[root@hypervisor test]# ln testing123 newHardLink
[root@hypervisor test]# ls -l
total 8
-rw-r--r--. 2 root root 19 Jun 8 16:06 newHardLink
lrwxrwxrwx. 1 root root 10 Jun 8 16:01 symTest -> /etc/fstab
-rw-r--r--. 2 root root 19 Jun 8 16:06 testing123
[root@hypervisor test]# chmod 770 testing123
[root@hypervisor test]# chmod 700 newHardLink
[root@hypervisor test]# ls -lh
total 8.0K
-rwx------. 2 root root 19 Jun 8 16:06 newHardLink
lrwxrwxrwx. 1 root root 10 Jun 8 16:01 symTest -> /etc/fstab
-rwx------. 2 root root 19 Jun 8 16:06 testing123
符号链接不是索引节点(它实际上存储您想要保护的数据),因此在 Unix 模型中,它通过使用两组不同的权限来保护相同的数据,从而使事情变得复杂。
听起来这是一种尝试,为不同群体的人提供对同一文件的不同级别的访问权限。如果是这种情况,您实际上应该使用 POSIX ACL(通过setfacl
和getfacl
)为文件提供符号链接目标的适当权限。
编辑:
为了详细说明您可能想要进入的方向,类似于:
# setfacl -m u:apache:r-- "Folder 2.1"
# setfacl -m g:groupOfProgrammers:--- "Folder 2.1"
# setfacl -m g:groupOfProgrammers:r-x "Folder 1"
上面的内容为apache
用户(用您的 apache/nginx/无论运行的任何用户替换)提供了对符号链接目标的只读访问权限,并提供了groupOfProgrammers
对符号链接所在目录的读取访问权限(以便groupOfProgrammers
可以获得完整的目录)在那里列出),但关闭符号链接同一目标的所有权限位。
答案2
我们仍然不知道您在文件系统级别做了什么。通常的方法是让 root(或另一个管理员帐户)成为所有这些目录的所有者,并将 2 级目录赋予具有所有者任何权限的组,rwx 为组,无others
.设置粘性位也可能很有用 ( chmod o+t "$dirname"
)。
1 级目录应属于管理员用户和组(例如 root:root),r-x
具有others
.