0%

Linux文件权限 (chmod命令) 简述

DO NOT chmod 777!

文件权限

在Linux中,对文件的访问由操作系统使用文件权限、属性和所有权进行控制。

每个文件由特定用户和组拥有,并为三种不同类别的用户分配权限访问权限:

三类用户

  • 文件所有者;
  • 群组成员;
  • 其他所有人。

三个权限

  • 读权限;
  • 写权限;
  • 执行权限。

查看

可以用ls -l查看文件的权限,例如:

1
2
ls -l install.sh
-rw-r--r-- 1 sixiaolong sixiaolong 34178 Dec 15 14:38 install.sh

第一个字符是文件类型,它可以是常规文件 (-)、目录 (D)、符号链接 (L) 或任何其他特殊类型的文件。

接下来的就个字符(即rw-r--r--)表示文件权限,三个三元组,每个三个字符。

  • 第一个三元组(此处为rw-):所有者权限;
  • 第二个三元组(此处为r--):组权限;
  • 第三个三元组(此处为r--):其他人权限。

权限的数字值

  • 读 - r - 4
  • 写 - w - 2
  • 执行 - x - 1
  • 无 - 0

这样规定之后,上面的三元组就能用一个数字代替,即:

  • 0(0+0+0) - 没有权限;
  • 1(0+0+1) - 仅执行权限;
  • 2(0+2+0) - 仅写入权限;
  • 3(0+2+1) - 写入和执行权限;
  • 4(4+0+0) - 只读权限;
  • 5(4+0+1) - 读取和执行权限;
  • 6(4+2+0) - 读写权限;
  • 7(4+2+1) - 读取、写入和执行权限。

这样的话,750就代表rwxr-x---,即:

  • 属主:rwx=4+2+1=7;
  • 属组:r-x=4+0+1=5;
  • 其他:---=0+0+0=0。

有些时候会用4位数字,此时多出的以为在第一位,代表:

  • setuid = 4
  • setgid = 2
  • sticky = 1
  • no changes = 0

想要用数字(八进制)查看文件权限,需要用stat命令,例如:

1
2
stat -c "%a" install.sh
644

和文件权限有关的两个命令

chown

假设服务器上有一个PHP应用程序以用户www身份运行,请执行以下操作:

1
2
3
chown -R www: /var/www
find /var/www -type d -exec chmod 755 {} \;
find /var/www -type f -exec chmod 644 {} \;

chmod

chmod的用法在chown那里已经提到过了,即:

1
chmod [权限] [文件]

这里需要注意的777这个权限,它等于在说任何人都能对这个文件做任何事情。这对于Linux(尤其是服务器来说)是十分危险的。