Linux chown 命令介绍

了解如何使用 chown 命令更改文件或目录的所有者。
176 位读者喜欢这篇文章。
Why the operating system matters even more in 2017

Internet Archive Book Images。由 Opensource.com 修改。CC BY-SA 4.0

Linux 系统上的每个文件和目录都归某人所有,所有者拥有更改或删除其所拥有文件的完全控制权。除了拥有用户之外,文件还拥有一个

您可以使用 ls -l 命令查看文件的所有权

[pablo@workstation Downloads]$ ls -l
total 2454732
-rw-r--r--. 1 pablo pablo 1934753792 Jul 25 18:49 Fedora-Workstation-Live-x86_64-30-1.2.iso

输出的第三列和第四列是所有者用户和组,它们一起被称为所有权。 对于上面的 ISO 文件,两者都是 pablo

通过 chmod 命令设置的所有权设置控制着谁可以执行读取、写入或执行操作。 您可以使用 chown 命令更改所有权(一个或两个)。

通常需要更改所有权。 文件和目录可以在系统上存在很长时间,但用户可能会来来去去。 当文件和目录在系统之间或从一个系统移动到另一个系统时,可能也需要更改所有权。

我的主目录中的文件和目录的所有权是我的用户和我的主要组,以 user:group 形式表示。 假设 Susan 正在管理 Delta 组,该组需要编辑一个名为 mynotes 的文件。 您可以使用 chown 命令将用户更改为 susan,并将组更改为 delta

$ chown susan:delta mynotes
ls -l
-rw-rw-r--. 1 susan delta 0 Aug  1 12:04 mynotes

Delta 组完成文件操作后,可以将其分配回给我

$ chown alan mynotes
$ ls -l mynotes
-rw-rw-r--. 1 alan delta 0 Aug  1 12:04 mynotes

通过在用户后附加冒号 (:),可以将用户和组都分配回给我

$ chown alan: mynotes
$ ls -l mynotes
-rw-rw-r--. 1 alan alan 0 Aug  1 12:04 mynotes

通过在组前添加冒号,您可以仅更改组。 现在 gamma 组的成员可以编辑该文件

$ chown :gamma mynotes
$ ls -l
-rw-rw-r--. 1 alan gamma 0 Aug  1 12:04 mynotes

chown 的一些附加参数在命令行和脚本中都很有用。 就像许多其他 Linux 命令一样,chown 有一个递归参数(-R),它告诉命令进入目录以操作内部的所有文件。 如果没有 -R 标志,您只会更改文件夹的权限,而不会更改其中的文件。 在此示例中,假设目的是更改目录及其所有内容的权限。 在这里,我添加了 -v(verbose)参数,以便 chown 报告它正在做什么

$ ls -l . conf
.:
drwxrwxr-x 2 alan alan 4096 Aug  5 15:33 conf

conf:
-rw-rw-r-- 1 alan alan 0 Aug  5 15:33 conf.xml

$ chown -vR susan:delta conf 
changed ownership of 'conf/conf.xml' from alan:alan to  susan:delta
changed ownership of 'conf' from alan:alan to  susan:delta

根据您的角色,您可能需要使用 sudo 来更改文件的所有权。

在更改文件所有权以匹配特定配置或在您不知道所有权时(例如在运行脚本时)可以使用引用文件(--reference=RFILE)。 您可以复制另一个文件(RFILE,称为引用文件)的用户和组,例如,撤消上面所做的更改。 回想一下,点 (.) 指的是当前工作目录。

$ chown -vR --reference=. conf

报告更改

大多数命令都有用于控制其输出的参数。 最常见的是 -v--verbose)启用详细模式,但 chown 还有一个 -c--changes)参数,用于指示 chown 仅在进行更改时报告。 Chown 仍然会报告其他内容,例如操作何时不被允许。

参数 -f (--silent, --quiet) 用于抑制大多数错误消息。 我将在下一节中使用 -f-c,以便仅显示实际更改。

保留根目录

Linux 文件系统的根目录 (/) 应该受到高度重视。 如果在此级别上出现错误,后果可能会导致系统完全无用。 尤其是在运行进行任何类型更改(甚至更糟:删除)的递归命令时。 chown 命令有一个可用于保护和保留根目录的参数。 该参数是 --preserve-root。 如果将此参数与根目录上的递归 chown 命令一起使用,则不会执行任何操作,而是会显示一条消息。

$ chown -cfR --preserve-root alan /
chown: it is dangerous to operate recursively on '/'
chown: use --no-preserve-root to override this failsafe

该选项在不与 --recursive 结合使用时无效。 但是,如果该命令由 root 用户运行,则将更改 / 本身的权限,而不是更改其中其他文件或目录的权限。

$ chown -c --preserve-root alan /
chown: changing ownership of '/': Operation not permitted
[root@localhost /]# chown -c --preserve-root alan /
changed ownership of '/' from root to alan

所有权即安全

文件和目录所有权是良好信息安全的一部分,因此偶尔检查和维护文件所有权以防止未经授权的访问非常重要。 chown 命令是 Linux 安全命令集中最常见和最重要的命令之一。

接下来阅读什么
标签
Alan Formy-Duval Opensource.com Correspondent
Alan 拥有 20 年的 IT 经验,主要在政府和金融部门。 他最初是一家增值经销商,后来进入系统工程领域。 Alan 的背景是高可用集群应用程序。 他在 Oracle Press/McGraw Hill 的《Oracle Solaris 11 系统管理》一书中撰写了“用户和组”以及“Apache 和 Web 堆栈”章节。

4 条评论

在以“我的主目录中的文件和目录的所有权...”开头的段落中,最后应该说:“您可以使用 chown 命令将用户更改为 susan,并将组更改为 delta:”

正如您所说,用户帐户来来去去。 因此,也值得一提的是,如果 /etc/password 和 /etc/group 中没有匹配的条目,则将显示用户和/或组的数值。

毕竟,只有“人类世界”才能将数字映射到文本。

这很重要:“根据您的角色,您可能需要使用 sudo 来更改文件的所有权。”

如果用户“alan”不是特权用户,他不能将他的文件的所有权交给用户“susan”。

如果用户“susan”不是特权用户,她不能在所有权被授予她之后将这些文件还给用户“alan”。

只有 root 可以做到这一点(我认为)。 因此,需要通过“sudo”运行该命令才能完成这些示例。

这很有趣,来自“chown”系统调用的手册页
(man 2 chown)

“只有特权进程(Linux:具有 CAP_CHOWN 能力的进程)才能更改文件的所有者。文件的所有者可以将文件的组更改为该所有者所属的任何组。特权进程(Linux:具有 CAP_CHOWN)可以任意更改组。”

我不确定进程如何获得 CAP_CHOWN 能力。 我想它基于调用用户。 我很想知道如何为文章中的用户 alan 和 susan 执行此操作。

是否仍然可以通过在 /etc/passswd 文件中为这些用户提供 UID 0 和 GID 0 来完成此操作?

知识共享许可协议本作品采用 知识共享署名-相同方式共享 4.0 国际许可协议 授权。
© . All rights reserved.