我正在使用文件上传脚本。我目前正在上传一个文件,然后尝试回显指向该文件的锚点链接,但由于我使用具有 0700 权限的 mkdir() 上传该文件,因此它不允许我访问以查看该文件。
我很确定我遇到的问题是由我使用的文件权限代码引起的。问题是我不知道所有不同的文件权限代码是什么以及它们的含义。
有人可以列出所有不同的文件权限以及它们各自的作用吗?
答案1
类 Unix 系统上的权限管理分为三个不同的类别。这些类别称为用户、组和其他。
课程
文件和目录归用户所有。所有者决定文件的所有者类别。所有者具有不同的权限。
文件和目录被分配一个组,该组定义了文件的组类别。文件组成员具有不同的权限。所有者不必是文件组的成员。
既不是所有者也不是组成员的用户构成了文件的“其他”类。对“其他”应用不同的权限。
有效权限是根据用户的类别决定的。例如,作为文件所有者的用户将具有赋予所有者类别的权限,而不管分配给组类别或其他类别的权限。
权限
类 Unix 系统上有三种适用于每个类别的特定权限:
读取权限,授予读取文件的能力。当为目录设置此权限时,授予读取目录中文件名称的能力(但不能查找有关这些文件的任何进一步信息,例如内容、文件类型、大小、所有权、权限等)。
写入权限,授予修改文件的权限。当为目录设置此权限时,授予修改目录中条目的权限。这包括创建文件、删除文件和重命名文件。
执行权限,授予执行文件的能力。必须为可执行二进制文件(例如,编译的 C++ 程序)或 shell 脚本(例如,Perl 程序)设置此权限,以便允许操作系统运行它们。当为目录设置此权限时,授予遍历其树以访问文件或子目录的能力,但不能查看目录内的文件(除非设置了读取)。
对目录(而不是文件)设置权限的效果是“最常被误解的文件权限问题之一”。
如果未设置权限,则授予的权限将被拒绝。在目录中创建的文件不一定具有与该目录相同的权限。要分配的权限由 umask 确定。
八进制表示法
八进制表示法由三位或四位以 8 为基数的数值组成。
采用三位八进制表示法,每个数字分别代表权限集的不同组成部分:用户类、组类和“其他”类。
这些数字中的每一个都是其组成位的总和(另请参阅二进制数字系统)。因此,特定位会添加到总和中,因为它用数字表示:
读取的位将总数加 4(二进制为 100),
写入位将总数加 2(二进制 010),并且
执行位将总数加 1(二进制 001)。
这些值永远不会产生模棱两可的组合;每个总和代表一组特定的权限。
以下是各个八进制数字值的含义摘要:
0 --- no permission
1 --x execute
2 -w- write
3 -wx write and execute
4 r-- read
5 r-x read and execute
6 rw- read and write
7 rwx read, write and execute
还要注意,您的文件可能归用户所有foo
,Apache 通常以不同的用户身份运行(我们称之为bar
)。这意味着,如果您希望 Apache 读取它,您需要授予group
或other
(取决于您的设置)读取文件的权限。
您可以在以下位置找到有关 POSIX 文件系统权限的更多信息维基百科。
答案2
看起来像是一个服务器故障问题。
为了使非系统用户对目录具有读取权限,您需要将该目录设置为可执行文件。
至于这些数字的含义,它是一个八进制代码号,用于一次设置所有三组权限。
R W X Code
0 0 0 0 No Permission
0 0 1 1 Executable
0 1 0 2 Write
0 1 1 3 Write and execute
1 0 0 4 Read
1 0 1 5 Read and execute
1 1 0 6 Read and write
1 1 1 7 read, write, execute
只需将这三个数字加在一起,其中所有者为第一个数字,组为第二个数字,其他人为第三个数字,您就得到了八进制权限代码。
通常,对于文件共享,您将文件设置为 744,将目录设置为 755,因为应该允许所有者对其执行任何操作,但用户和访客(例如匿名网络用户)应该只具有读取权限。