了解 Linux 文件权限

2023-10-19

在 Linux 中,文件权限、属性和所有权控制系统进程和用户对文件的访问级别。这确保只有授权的用户和进程才能访问特定的文件和目录。

Linux 文件权限#

基本的 Linux 权限模型的工作原理是将每个系统文件与所有者和组相关联,并为三类不同的用户分配权限访问权限:

  • 文件所有者。
  • 团体成员。
  • 其他人(其他所有人)。

可以使用以下命令更改文件所有权chown and chgrp命令。

三种文件权限类型适用于每一类用户:

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

这个概念允许您控制哪些用户可以读取文件、写入文件或执行文件。

要查看文件权限,请使用ls命令:

ls -l file_name
-rw-r--r-- 12 linuxize users 12.0K Apr  28 10:10 file_name
|[-][-][-]-   [------] [---]
| |  |  | |      |       |
| |  |  | |      |       +-----------> 7. Group
| |  |  | |      +-------------------> 6. Owner
| |  |  | +--------------------------> 5. Alternate Access Method
| |  |  +----------------------------> 4. Others Permissions
| |  +-------------------------------> 3. Group Permissions
| +----------------------------------> 2. Owner Permissions
+------------------------------------> 1. File Type

第一个字符表示文件类型。它可以是一个常规文件(-), 目录 (d), a 符号链接 (l),或其他特殊类型的文件。接下来的九个字符代表文件权限,三个三元组,每个三元组。第一个三元组显示所有者权限,第二个三元组显示组权限,最后一个三元组显示其他人权限。

在上面的例子中(rw-r--r--)表示文件所有者拥有读写权限(rw-),该组和其他人只有读取权限(r--).

根据文件类型的不同,文件权限具有不同的含义。

三个权限三元组中的每一个都可以由以下字符构成,并具有不同的效果,具体取决于它们是设置为文件还是目录:

权限对文件的影响

Permission Character Meaning on File
Read - The file is not readable. You cannot view the file contents.
r The file is readable.
Write - The file cannot be changed or modified.
w The file can be changed or modified.
Execute - The file cannot be executed.
x The file can be executed.
s If found in the user triplet, it sets the setuid bit. If found in the group triplet, it sets the setgid bit. It also means that x flag is set.
When the setuid or setgid flags are set on an executable file, the file is executed with the file’s owner and/or group privileges.
S Same as s, but the x flag is not set. This flag is rarely used on files.
t If found in the others triplet, it sets the sticky bit.
It also means that x flag is set. This flag is useless on files.
T Same as, t but the x flag is not set. This flag is useless on files.

权限对目录(文件夹)的影响

目录是可以包含其他文件和目录的特殊类型的文件。

Permission Character Meaning on Directory
Read - The directory’s contents cannot be shown.
r The directory’s contents can be shown.
(e.g., You can list files inside the directory with ls .)
Write - The directory’s contents cannot be altered.
w The directory’s contents can be altered.
(e.g., You can create new files , delete files ..etc.)
Execute - The directory cannot be changed to.
x The directory can be navigated using cd .
s If found in the user triplet, it sets the setuid bit. If found in the group triplet it sets the setgid bit. It also means that x flag is set. When the setgid flag is set on a directory, the new files created within it inherits the directory group ID (GID) instead of the primary group ID of the user who created the file.
setuid has no effect on directories.
S Same as s, but the x flag is not set. This flag is useless on directories.
t If found in the others triplet, it sets the sticky bit.
It also means that x flag is set. When the sticky bit is set on a directory, only the file’s owner, the directory’s owner, or the administrative user can delete or rename the files within the directory.
T Same as t, but the x flag is not set. This flag is useless on directories.

更改文件权限#

可以使用以下命令更改文件权限chmod命令。只有 root、文件所有者或具有 sudo 权限的用户才能更改文件的权限。使用时要格外小心chmod,尤其是在递归更改权限时。该命令可以接受一个或多个以空格分隔的文件和/或目录作为参数。

可以使用符号模式、数字模式或参考文件来指定权限。

符号(文本)方法#

的语法chmod使用符号模式时的命令具有以下格式:

chmod [OPTIONS] [ugoa…][-+=]perms…[,…] FILE...

第一组标志([ugoa…])、用户标志,定义文件权限发生更改的用户类别。

  • u- 文件所有者。
  • g- 作为组成员的用户。
  • o- 所有其他用户。
  • a- 所有用户,相同ugo.

当用户的标志被省略时,它默认为a.

第二组标志([-+=]),操作标志,定义是否要删除、添加或设置权限:

  • -- 删除指定的权限。
  • +- 添加指定权限。
  • =- 将当前权限更改为指定权限。如果之后没有给予权限=符号,指定用户类的所有权限都将被删除。

权限(perms...) 使用零个或一个或多个以下字母显式设置:r, w, x, X, s, and t。使用集合中的单个字母u, g, and o将权限从一个用户的类复制到另一用户的类时。

当为多个用户类别设置权限时([,…]),使用逗号(不带空格)分隔符号模式。

以下是一些如何使用的示例chmod符号模式下的命令:

  • 授予组成员执行该文件的权限,但不能读取和写入该文件:

    chmod g=x filename
  • 删除所有用户的写权限:

    chmod a-w filename
  • 递归删除其他用户的执行权限:

    chmod -R o-x dirname
  • 删除除文件所有者之外的所有用户的读、写和执行权限:

    chmod og-rwx filename

    同样的事情也可以通过使用以下形式来完成:

    chmod og= filename
  • 向文件所有者授予读取、写入和执行权限,向文件所属组授予读取权限,向所有其他用户授予无权限:

    chmod u=rwx,g=r,o= filename

数值法#

的语法chmod使用符号模式时的命令具有以下格式:

chmod [OPTIONS] NUMBER FILE...

使用数字模式时,您可以同时设置所有三个用户类别(所有者、组和所有其他)的权限。

权限编号可以是 3 位或 4 位数字。当使用3位数字时,第一个数字代表文件所有者的权限,第二个数字代表文件所属的组,最后一个数字代表所有其他用户。

每个写入、读取和执行权限都具有以下数值:

  • r(读)= 4
  • w(写)= 2
  • x(执行)= 1
  • 无权限 = 0

特定用户类别的权限数由该组的权限值的总和表示。

要找出数字模式下文件的权限,只需计算所有用户类别的总数即可。例如,要向文件所有者授予读、写和执行权限,向文件组授予读和执行权限,向所有其他用户授予只读权限,您可以执行以下操作:

  • 所有者:rwx=4+2+1=7
  • 组:r-x=4+0+1=5
  • 其他:r-x=4+0+0=4

使用上面的方法,我们得出数字754,它代表所需的权限。

要设置setuid, setgid, and sticky bit标志,使用四位数字。

当使用 4 位数字时,第一位数字的含义如下:

  • setuid=4
  • setgid=2
  • sticky=1
  • 没有变化 = 0

接下来的三位数字与使用 3 位数字时的含义相同。

如果第一位为0则可以省略,模式可以用3位数字表示。数字模式0755是相同的755.

要计算数值模式,还可以使用另一种方法(二进制方法),但稍微复杂一些。对于大多数用户来说,了解如何使用 4、2 和 1 计算数字模式就足够了。

您可以使用数字符号检查文件的权限stat命令:

stat -c "%a" file_name

以下是一些如何使用的示例chmod数字模式下的命令:

  • 为文件所有者授予读写权限,并为组成员和所有其他用户授予只读权限:

    chmod 644 dirname
  • 授予文件所有者读取、写入和执行权限,授予组成员读取和执行权限,授予所有其他用户无权限:

    chmod 750 dirname
  • 授予给定目录的读、写和执行权限以及粘滞位:

    chmod 1777 dirname
  • 递归地为文件所有者设置读、写和执行权限,而对给定目录的所有其他用户没有权限:

    chmod -R 700 dirname

结论#

在 Linux 中,使用文件权限、属性和所有权来限制对文件的访问。要更改文件的权限,请使用chmod命令。

如果您有任何问题或反馈,请随时发表评论。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

了解 Linux 文件权限 的相关文章

  • 使用curl上传本地目录中的所有文件

    我想上传一个目录中的所有文件 并且我知道如何使用curl上传一个文件 如下所示 curl T local xxx suffix u xxx psw ftp 192 168 1 158 public demon test xxx suffix
  • 从终端运行java类

    这个问题之前已经被问过 但由于某种原因我仍然无法弄清楚出了什么问题 我在文件 src txt 中的包语法测试中得到了一个名为 NewClass 的类 从 src 路径我输入 javac src syntaxtest NewClass jav
  • C: main 未找到,但它在那里 |编译错误

    当我编译两个 c 文件 如下所示 时 我收到一个非常奇怪的错误 终端编译代码 gcc I o main c matrix c lblas lgfortran Error usr bin ld usr lib debug usr lib i3
  • 在Python中将文本输出到多个终端

    我使用Python和ArchLinux 我正在用 Python 编写一个简单的人工智能作为学校项目 因为这是一个学校项目 并且我想清楚地演示它在做什么 所以我的目的是有一个不同的终端窗口来显示每个子进程的打印输出 一个终端显示句子如何被解析
  • 捕获不带 \n 的输入

    我正在终端中制作一个简单的 2d 游戏 我一直想知道如何获得标准输入而不必返回 因此 用户不必按 w n n 用于返回 而只需按 w 即可前进 scanf gets 和 getchar 无法做到这一点 但我以前见过在 Vi 等程序中做到过
  • Visual Studio Code 中的集成终端是从外部打开的,而不是在内部打开的

    I have reinstalled Visual Studio Code and for some reason when I do the Ctrl Shift shortcut instead of opening a termina
  • 如何在最新的 VLC 版本上通过命令行设置音量?

    我一直在尝试在 Ubuntu 上通过终端设置 VLC 2 2 1 中的音量 但没有成功 参数 volume不存在了 Warning option volume no longer exists 并且我在帮助中找不到任何包含 卷 的内容 文档
  • Bower:安装 2 个版本的 jQuery

    我将如何安装 2 个版本的 jQuery使用凉亭 我想要 v2 0 以及 1 9 1 来支持浏览器回退 我遇到的问题是如果你跑bower install jquery 1 9 1 jquery 2 0 0第一个版本被第二个版本覆盖 因为它们
  • 为什么使用 $PATH 以及它是什么

    我对编程有点陌生 不是真的 但我仍在学习 我们不是吗 虽然我了解 Java 和 Python 并且了解 C C JS C HTML CSS 等 并且我可以在终端中很好地导航 但我不熟悉终端中的 PATH 是什么 我使用 Linux 终端和
  • 如何在 python 中的不同终端窗口中运行函数/线程?

    我有一个这样的程序 from threading import Thread def foo1 arg print foo1 gt gt gt Something input foo1 gt gt gt Enter Something de
  • 在C中获取终端宽度?

    我一直在寻找一种从 C 程序中获取终端宽度的方法 我不断想出的是这样的东西 include
  • 使用单个 shell 脚本运行 React 和 Flask

    我构建了一个使用 ReactJS 作为前端和 Flask 作为中间件的应用程序 我可以使用以下命令序列来执行它 npm start cd Equation Solver python m flask run 执行第一个命令后 我必须打开另一
  • Windows 终端中的图标和背景图像字段无法识别父进程目录

    Windows 终端版本 1 12 10732 0 Windows 内部版本号 19043 1645 Issue 如果这个问题已经在其他地方得到解决 请原谅我 但我意识到当Use parent process directory被检查 Co
  • python:Windows终端中的unicode,使用的编码?

    我在 Windows 7 终端中使用 Python 解释器 我正在尝试了解 unicode 和编码 I type gt gt gt s gt gt gt s x89 gt gt gt u u gt gt gt u u xeb 问题1 字符串
  • 箭头键变成 Telnet 中的控制字符

    我在 Ubuntu 终端中 并通过 telnet 连接到服务器 现在每当我输入 up 时 它就会变成 A 其他箭头键也变成控制字符 有没有办法可以运行 telnet 以便它理解我的箭头键 这将是一个巨大的帮助 因为我想在我的命令历史记录中向
  • 将终端颜色扩展到行尾

    我有一个生成 motd 的 bash 脚本 问题取决于某些终端设置 我不确定颜色是否会延伸到行尾 其他时候则不然 e g v s IIRC 一个只是普通的 gnome 终端 另一个是我的 tmux 术语 所以我的问题是如何才能将其扩展到 8
  • 在 Mac 上使用 JRE 打开 jar 文件

    我有一个 jar 文件 旨在通过命令行运行 我不打算在运行应用程序的机器上进行任何java开发 我的思考过程是 因此我应该只需要JRE而不是JDK 此外 JDK 大约是 JRE 的 4 倍 我不想下载它 在 Mac 上安装 JRE 时 它不
  • sqlite 插入需要很长时间

    我正在将不到 200 000 行插入到 sqlite 数据库表中 我只是在终端中通过 sqlite3 使用一个非常简单的 sql 文件 我打赌它已经运行了至少 30 分钟 这是正常现象还是我应该关闭该过程并尝试不同的方法 sqlite中的插
  • 从 pod 安装库时出现错误

    我收到未定义的方法squish for
  • 如何在 Xamarin.Mac 中执行终端命令并读入其输出

    我们正在编写一个 Xamarin Mac 应用程序 我们需要执行像 uptime 这样的命令 并将其输出读取到应用程序中进行解析 这可以做到吗 在 Swift 和 Objective C 中都有 NTask 但我似乎无法在 C 中找到任何示

随机推荐

  • Python 海象运算符(Python 3.8 赋值表达式)

    Python 海象运算符 正式名称为赋值表达式运算符 是在 Python 3 8 中引入的 它由冒号后跟等号表示 Python 社区将其称为 海象运算符 因为它类似于海象的一双眼睛和獠牙 目录 hide 1 对海象操作员的需求 2 Walr
  • 15 个用于网络诊断的 Linux ping 命令示例

    感谢 Linux 我们可以使用许多促进网络管理和诊断的工具 从这个意义上说 Linux ping 命令是系统管理员和网络管理员最有用的工具之一 它的基本功能是确定网络中的一台主机是否可达 然而 在这篇文章中 我们将讨论 Linux Ping
  • Matplotlib 教程(使用 pyplot 绘制图形)

    Matplotlib 是 Python 中的一个库 可创建 2D 图形来可视化数据 可视化总是有助于更好地分析数据并增强用户的决策能力 在本 matplotlib 教程中 我们将绘制一些图形并更改一些属性 如字体 标签 范围等 首先 我们将
  • 如何在 Debian 11 中创建仅 SFTP 用户

    SFTP SSH 文件传输协议 是一种安全文件协议 用于通过加密的 SSH 传输会话访问 管理和传输文件 安全第一是系统管理员的经验法则 在某些情况下 我们需要允许远程用户访问我们系统上的文件系统 但您不想允许他们获得 shell 这将为您
  • 如何使用 Curl 忽略 SSL 证书检查

    在通过 SSL 或 HTTPS 连接到服务器的应用程序中使用 Curl 时 验证服务器的 SSL 证书是默认功能 这确保了通信的安全性以及服务器的身份 但是 在某些情况下 可能需要忽略或绕过 SSL 证书检查 例如在开发环境 测试或处理自签
  • 博客基础知识:成功入门指南

    在数字时代 博客已成为自我表达 教育甚至创收的有影响力的平台 无论您是渴望与世界分享您的热情的业余爱好者 希望建立在线形象的专业人士 还是计划利用博客开展业务的企业家 这本综合指南都将为您提供基础知识和其他知识 欢迎来到 博客基础知识 您成
  • Iptables:常见防火墙规则和命令

    Iptables 是一个功能强大的防火墙实用程序 用于保护 Linux 系统免受未经授权的网络流量的侵害 它是一个命令行工具 提供灵活且可定制的方式来配置和管理防火墙规则 在本文中 我们将介绍 Iptables 的基础知识 包括一些最常见的
  • 如何在 Ubuntu 20.04 上安装 Dotnet Core

    NET Core 是一个免费的开源软件框架 其设计时考虑了 Linux 和 macOS 它是 NET Framework 的跨平台继承者 适用于 Linux macOS 和 Windows 系统 NET Core 框架已经提供了用于引导项目
  • 每个周日(每周)运行一个 Cron 作业

    许多应用程序需要每周执行 cron 作业来执行一些任务 例如 执行每周维护 清理磁盘空间 清理邮件列表和其他任务 您可以在一周中的任何一天运行每周任务 需要CPU和内存的作业需要消耗CPU和内存 这些工作最好在周末进行 安排周日的 Cron
  • 如何在 CentOS/RHEL 7 上安装 NVM

    NVM代表 Node Version Manager 是一个用于管理 Node 版本的命令行实用程序 有时您需要部署具有不同 2 个版本的多个节点应用程序 管理不同 2 项目的多个 Node js 版本对于开发人员来说是一件痛苦的事情 但
  • 如何在 Fedora 29-25、CentOS 7/6 上安装 VirtualBox 来宾添加

    The 虚拟盒子Guest Additions 提供了一些设备驱动程序和应用程序 用于优化来宾操作系统的性能和可用性 它安装在来宾操作系统内 因此 您需要在系统上运行的每个虚拟机上安装 我建议安装或升级 VirtualBox最新版本优先 本
  • 如何在 Bash 中转义单引号

    Bash 脚本对于开发人员 系统管理员以及任何需要在 Unix 或 Linux 系统上自动执行任务的人来说是一项至关重要的技能 有时 您需要在 bash 脚本的字符串中使用单引号 但是 由于 bash 解释单引号的方式 如果处理不当 可能会
  • 如何在 Ubuntu 18.04 和 16.04 上安装 ownCloud 10

    ownCloud使用 Web 界面提供数据访问 它还提供跨设备同步和共享的选项 一切都在您的控制之下 使用 ownCloud 我们可以轻松地对每个用户的文件 ACL 实施限制 ownCloud 提供桌面客户端 Windows MAC Lin
  • 如何使用预准备语句防止 PHP 中的 SQL 注入

    SQL 注入是一种常见的攻击形式 针对使用 SQL 数据库的 Web 应用程序 在此类攻击中 攻击者利用应用程序代码中的漏洞注入恶意 SQL 语句 这些语句可能会危害数据库并可能泄露敏感信息 PHP 是一种流行的 Web 开发语言 通常与
  • 了解 Python 中的区分大小写

    Python 是使用最广泛的编程语言之一 以其简单性和可读性而闻名 然而 与许多语言一样 它具有新手和经验丰富的程序员都应该理解的独特特征 其中一项特征是区分大小写 在本指南中 我们将深入了解 Python 中的大小写敏感性及其重要性 什么
  • 如何设置 SFTP Chroot Jail

    如果您是管理 Linux 服务器的系统管理员 您可能需要向某些用户授予 SFTP 访问权限 以将文件上传到他们的主目录 默认情况下 可以通过SSH SFTP等方式登录系统的用户SCP可以浏览整个文件系统 包括其他用户的目录 如果这些用户是可
  • 如何在 Linux 中终止进程

    您是否遇到过这样的情况 您启动了一个应用程序 但在使用该应用程序时突然变得无响应并意外崩溃 您尝试再次启动应用程序 但没有任何反应 因为原始应用程序进程从未真正完全关闭 好吧 我们所有人都曾在某个时刻发生过这种事 不是吗 解决方案是终止或终
  • 如何在 CentOS 7 上设置 SSH 密钥

    Secure Shell SSH 是一种加密网络协议 专为客户端和服务器之间的安全连接而设计 两种最流行的 SSH 身份验证机制是基于密码的身份验证和基于公钥的身份验证 使用 SSH 密钥通常比传统的密码身份验证更安全 更方便 本教程介绍如
  • 如何重命名本地和远程 Git 分支

    您正在与一群人合作开发一个项目 并且您已经为 git 分支定义了命名约定 你创建了一个新分支 将更改推送到远程存储库 并意识到您的分支名称不正确 幸运的是 Git 允许您使用以下命令轻松地重命名分支 git branch m命令 本指南介绍
  • 了解 Linux 文件权限

    在 Linux 中 文件权限 属性和所有权控制系统进程和用户对文件的访问级别 这确保只有授权的用户和进程才能访问特定的文件和目录 Linux 文件权限 基本的 Linux 权限模型的工作原理是将每个系统文件与所有者和组相关联 并为三类不同的