在UNIX/Linux系统中,每个文件或目录都与3种类型的权限相关联,这些权限控制对它们的访问权限。这些权限是读、写和执行。这允许或防止用户读取文件或写入文件。执行权限允许用户将文件作为脚本或可执行文件运行。
什么是chmod命令
Chmod命令用于更改Linux中文件系统对象(如文件和目录)的访问权限。它还用于更改特殊标志,例如SUID、SGID和粘附位。
您可以使用ls -l
命令来检查由r、w和x表示的文件模式。
Linux文件权限
在Linux/Unix类操作系统中,每个文件和目录都由用户和组拥有。当我们谈论Linux文件权限时,它涉及文件所有者、组所有者和权限。
有三个基于用户的权限组:
- 所有者 - 拥有文件或目录的用户。默认情况下,当用户创建文件或目录时,同一用户将成为其所有者。
- 组 - 拥有文件或目录的组。组中的所有成员将在文件或目录上具有相同的访问权限。
- 其他 - 不是文件或目录所有者且不属于组的用户。这意味着“everyone”或另一种说法是“world”。
可以使用chown命令更改文件和目录的所有权。要仅更改文件或目录的组,请使用chgrp命令。默认的文件和目录权限基于umask设置。
每个文件或目录有三种文件权限类型:
- 读
- 写
- 执行
字符表示读是r
,写是w
,执行是x
。
读权限
文件的读权限表示可以打开并阅读文件。
目录(文件夹)的读权限表示用户可以列出目录的内容。
写权限
文件的写权限表示可以更改(修改或更改)文件。
目录的写权限表示可以更改目录内容。例如,用户可以在目录中创建新文件、删除或重命名文件。
执行权限
文件的执行权限表示可以执行文件。例如,用户可以执行程序或shell脚本文件。
目录的执行权限表示用户可以更改(cd)到目录。但是,这不允许用户列出目录内容。
特殊权限模式
除了读、写和执行之外,您还可以在文件和目录上分配几个特殊权限模式。特殊权限模式是SUID(setUID)、SGID(setGID)和粘附位。
当在文件上设置SUID位时,该文件始终作为拥有该文件的用户而不是启动程序的用户运行。使用SUID的Linux命令的一个示例是ls -l /usr/bin/passwd
,该命令在普通用户运行时会给予提升的特权。
当在文件上设置SGID时,有效组设置为文件的组。在执行程序时,用户将获得文件组权限。
粘附位通常设置为目录。一旦在目录上设置了粘附位,则只有文件所有者或root可以更改该目录内的文件或目录。
如何在Linux中执行chmod
Chmod使用符号模式或数字模式来指定权限。您需要是root、文件所有者或sudo用户特权才能更改文件权限。
使用数字模式更改文件/目录权限
Chmod数字模式也称为绝对模式。这是最常用的方法。
读、写和执行分配具有特定数字号码。我们使用该数字或组合来设置文件和目录的权限。
Linux权限数字(八进制值)为:
r(读取)= 4 w(写入)= 2 x(执行)= 1 没有权限 = 0
数字模式中chmod的语法:
chmod <permission-number> <file-name or directory-name>
权限数字通常是一个3位数字(每个三位数字由一个八进制模式数字表示)。第一个数字表示所有者,下一个数字表示组,最后一个数字表示其他人。
例如,要设置文件夹的chmod权限:
chmod 777 hello-programs
以下是关于Linux文件权限和如何更改它们的介绍:
在文件权限中,第一个数字代表文件所有者的读、写、执行权限,用rwx表示,分别对应4、2、1,所以如果第一个数字是7,则代表文件所有者拥有读、写和执行权限。第二个数字代表文件所属组的读、写、执行权限,第三个数字代表其他用户的读、写、执行权限。权限数字可以通过每个用户类别中八进制值的总和来计算。
例如,权限 -rw-rw-r--
可以表示为:
- 用户(u):
rw-
= 4+2+0=6 - 组(g):
rw-
= 4+2+0=6 - 其他(o):
r--
= 4+0+0=4
从上面的计算中,我们得到数字权限为 664
。
再举一个例子,文件权限为 -rwxr-xr--
:
- 用户(u):
rwx
= 4+2+1=7 - 组(g):
r-x
= 4+0+1=5 - 其他(o):
r-x
= 4+0+1=5
在这种情况下,数字权限为 755
。
你可以同时为用户、所有者和其他用户设置权限。如果要添加特殊权限,如粘着位(sticky bit)、SUID或SGID,我们使用4位数字。第一个数字用于设置以下特殊权限:
SUID = 4 SGID = 2 sticky bit = 1 zero effect = 0
例如,在/tmp目录上设置特殊权限粘着位:
chmod 1777 /tmp
当有许多文件和目录时,你可以递归更改权限:
chmod -R 755 directory-name
使用符号模式进行chmod更改文件/目录权限
chmod符号模式也称为相对模式。当使用符号模式进行chmod操作时,使用字符u(所有者)、g(组)、o(其他)和a(所有用户)。
基本语法:
chmod <ugoa><-+=><rwxst> file-name or directory-name
其中:
- "-" - 仅删除指定权限
- "+" - 添加到已有的其他权限
- "=" - 忽略所有权限并按指定的权限更改权限
例如,要在目录上设置完全权限:
chmod u=rwx,g=rwx,o=rwx directory-name
或者
chmod ugx+rwx directory-name
或者
chmod a+rwx directory-name
递归更改目录和文件权限
要递归更改目录的文件权限,请使用-R或--recursive标志。以下是递归更改目录权限的语法:
chmod -R MODE filename
例如,要在/var/www目录中为子目录和文件分配数字权限模式755,请运行以下命令:
sudo chmod -R 755 /var/www/html
在符号表示法中,可以表示为:
chmod -R u=rwx,og=rx /var/www/html
指定的目录路径中的所有文件和子目录都将继承分配给目录的权限。
更改多个文件的权限
有时你想批量更改目录或文件的权限。
find /path/to/directory -type d -exec chmod mode {} \; find /path/to/directory -type f -exec chmod mode {} \;
例如,将/usr/share/nginx/html目录路径中的目录权限更改为755,请执行以下命令:
find /usr/share/nginx/html -type d -exec chmod 755 {} \;
符号表示法为:
find /usr/share/nginx/html -type d -exec chmod u=rwx,og=rx {} \;
使用参考文件更改权限
使用--reference=reference_file选项,可以将文件权限从一个文件转移到另一个文件。在所示的语法中,filename最终具有与reference_file相同的文件权限。
chmod --reference=reference_file filename
符号链接中的chmod
在大多数Linux系统中,符号链接权限一般不太重要。通常,更改符号链接的文件权限会更改它所指向的文件的文件权限,而不是符号链接本身。但是在某些系统中,如果需要更改符号链接的权限,则可以键入:
chmod 644 symlink
一些有用的chmod命令示例
chmod 755 directory-name
这等价于chmod u=rwx,go=rx。这为所有者设置读、写和执行权限(完全权限),为其他用户设置读和执行权限。
chmod +x filename
这相当于chmod ugo+x或chmod u+x,g+x,o+x。这为所有者、组和其他用户设置执行权限。
chmod 750 directory-name
这等价于chmod u+rwx,g=rx,o=.这为所有者设置完全权限,为组设置读和执行权限,为其他用户设置无权限。
chmod u+rwx directory-name
忽略所有权限并为所有者设置读、写和执行权限。
chmod -R 700 directory-name
递归为目录的所有者设置完全权限
chmod go-rwx filename
将组和其他用户的读、写和执行权限从文件中删除。
chmod 644 filename
这为所有者分配读和写权限,为文件的组和其他用户分配只读权限。
chmod g+x filename
将组成员的执行权限分配给文件
chmod go-rw filename
删除文件的用户和组类别的读和写权限。
在本教程中,我们学习了Linux chmod命令以及如何更改它们的权限。