使用chown和chmod设置权限
1. 概述
Linux 操作系统是一个多用户操作系统。它有一个安全系统来控制哪些用户和组可以访问系统中的文件和目录。 在这个简短的教程中,我们将了解两个使用户能够访问文件的工具:chown 和chmod 。 本教程中使用的命令在bash 中进行了测试,但也应该在其他符合 POSIX 的 shell 中工作。
2. 安全概念
在 Linux 中,用户可以属于一个或多个组。此外,用户和组都可以是文件和目录的所有者。除了所有权的详细信息,每个文件都有关于其访问权限的元数据。
chown 和chmod 是我们用来文件和目录的所有权和访问权限 。
3. 所有权和访问权
如前所述,文件元数据包含有关拥有该文件的用户和组的信息。此外,它还包含有关谁可以读取、写入和执行它的信息。
我们可以使用ls 列出这些信息:
$ ls -l
total 20
-rw-rw-r--. 1 bob bob 16433 Oct 7 18:06 document.docx
我们特别感兴趣的信息有两部分:
bob bob
从左到右,这意味着文件document.docx由用户bob拥有,其所属组也称为bob。这是可能的,因为默认情况下,Linux 使用用户名为每个用户创建一个私有组。
接下来是:
-rw-rw-r--
这些是访问权限。第一个字符描述文件类型。其余字符分为三组,每组三个字符,分别描述所有者、拥有组和其他所有人的访问权限。 在每个组中,第一个字符用于读取访问 ( r ),然后是写入访问 ( w ) 和执行权限 ( x )。破折号表示权限已关闭。 因此,系统上每个人的完整权限如下所示:
-rwxrwxrwx
在 Linux 中,文件和目录的处理方式类似。文件和目录的访问权限之间的主要区别在于,文件的x权限授予执行它的权限,而在目录上,它授予进入它的权限。
4. chown转让所有权
**使用chown可以在用户之间传输文件。**名称chown是“更改所有者”的缩写。
我们可以通过调用来更改document.docx的所有者:
chown alice document.docx
该文档现在归 Alice 所有:
$ ls -l
total 20
-rw-rw-r--. 1 alice bob 16433 Oct 7 18:06 document.docx
该文档的拥有组仍然是bob。我们只告诉chown更改所有者,而不是更改组。因此,通过组成员身份,Alice 和 Bob 现在都拥有对该文档的读写权限。
要将组更改为alice,我们可以做三件事之一。
我们可以将所有者和组更改为alice:
chown alice:alice document.docx
因为我们想将所属组更改为用户的默认组,我们可以省略该组:
chown alice: document.docx
**或者,由于我们只想更改拥有组,**我们可以调用:
chown :alice document.docx
然后,结果将是:
$ ls -l
total 20
-rw-rw-r--. 1 alice alice 16433 Oct 7 18:06 document.docx
在 Linux 中,作为普通用户,不可能将我们文件的所有权转让给其他人。我们要么必须以 root 身份运行,要么具有通过sudo 运行chown的权限:
sudo chown alice:alice document.docx
5. 使用chmod更改访问权限
**文件访问权限可以通过chmod命令修改。**名称chmod是“更改模式”的缩写。
我们可以使用两种调用chmod的方法,符号或八进制表示法。
5.1. 符号表示法
在符号表示法中,我们使用用户 ( u )、组 ( g ) 和其他 ( o ) 的引用为**chmod提供逗号分隔的字符串。
让我们记住document.docx的访问权限*:-rw-rw-r–*
我们可以使用符号表示法设置这些相同的权限:
chmod u=rw,g=rw,o=r document.docx
**也可以逐步添加权限。**例如,我们可以为其他人添加写权限:
chmod o+w document.docx
或者类似地,我们可以通过调用来取消组的写访问权限:
chmod g-w document.docx
我们应该注意,增量更改仅对指定的组和标志进行操作,而其他访问权限保持不变。
我们可以结合引用来一次性设置权限。要使文档对组和其他人只读,我们可以使用:
chmod go=r document.docx
甚至还有一个简写符号 - a - 来设置所有引用的权限。例如,我们可以使我们的文档对每个用户和组都是只读的:
chmod a=r document.docx
5.2. 八进制表示法
调用chmod的一种广泛使用的、通常更短的形式是使用八进制表示法。这是三个数字的组合,我们可以用它来表示所有访问权限的组合。
下表显示了等效的八进制和符号表示法:
r/w/x | binary | octal
--- | 000 | 0
--x | 001 | 1
-w- | 010 | 2
-wx | 011 | 3
r-- | 100 | 4
r-x | 101 | 5
rw- | 110 | 6
rwx | 111 | 7
每个可能的访问权限组合都可以写成二进制数,1 和 0 表示权限打开或关闭。这些二进制数代表数字 0 到 7,即组成八进制数字系统的 8 位数字。
回到上一节的例子,相当于:
chmod u=rwx,g=rx,o= document.docx
八进制表示法是:
chmod 750 document.docx
我们还应该注意,在八进制表示法中,不可能增量地添加权限。
6. 常见例子
最后,让我们看看一些常见的例子以及它们的作用。
6.1. 递归更改目录的所有权
chown -R alice:alice /path/to/directory
在此示例中,-R开关使chown递归。
6.2. 与他人共享目录
chmod u=rwx,go=rx /path/to/directory
或者
chmod 755 /path/to/directory
6.3. 保护 SSH 私钥
chmod u=rw,og= ~/.ssh/id_rsa
或者
chmod 600 ~/.ssh/id_rsa
我们应该注意到,如果*.ssh*文件夹中的密钥没有应用正确的权限,许多 Linux 安全配置将阻止它们用于允许 SSH 访问。
6.4. 使脚本可执行
chmod +x script.sh