AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / unix / 问题 / 412234
Accepted
Steve
Steve
Asked: 2017-12-22 02:46:01 +0800 CST2017-12-22 02:46:01 +0800 CST 2017-12-22 02:46:01 +0800 CST

“root”用户的文件权限如何工作?

  • 772

我有以下文件:

---------- 1 Steve Steve 341 2017-12-21 01:51 myFile.txt

我将用户切换到root终端,我注意到以下行为:

  • 我可以读取这个文件并写入它。

  • 我无法执行此文件。

  • 如果我x在文件的用户权限 ( ---x------) 或组权限 ( ------x---) 或其他权限 ( ---------x) 中设置该位,那么我将能够执行该文件。

任何人都可以向我解释或指向一个教程,该教程解释了root用户处理文件和目录时适用的所有规则吗?

linux permissions
  • 5 5 个回答
  • 33937 Views

5 个回答

  • Voted
  1. Best Answer
    ilkkachu
    2017-12-22T04:05:00+08:002017-12-22T04:05:00+08:00

    对文件和目录的特权访问实际上是由能力决定的,而不仅仅是存在root与否。在实践中,root通常具有所有可能的功能,但在某些情况下,可能会删除所有/许多功能,或者将某些功能提供给其他用户(他们的进程)。

    简而言之,您已经描述了访问控制检查如何为特权进程工作。以下是不同功能对它的实际影响:

    这里的主要功能是CAP_DAC_OVERRIDE,拥有它的进程可以“绕过文件读取、写入和执行权限检查”。这包括读取和写入任何文件,以及读取、写入和访问目录。

    它实际上并不适用于执行未标记为可执行的文件。( ) 中的注释generic_permissionfs/namei.c,在访问检查文件之前,说

    读/写 DAC 始终是可覆盖的。当至少设置了一个 exec 位时,可执行 DAC 是可覆盖的。

    x如果您尝试执行文件,代码会检查是否至少设置了一位。我怀疑这只是一个便利功能,以防止意外运行随机数据文件并出现错误或奇怪的结果。

    无论如何,如果您可以覆盖权限,您可以制作一个可执行副本并运行它。(虽然它在理论上可能会有所不同,因为进程的 setuid 文件能够覆盖文件权限(CAP_DAC_OVERRIDE),但没有其他相关功能(CAP_FSETID// CAP_FOWNER)CAP_SETUID。但是CAP_DAC_OVERRIDE允许编辑/etc/shadow和类似的东西,所以它大致相等无论如何都要拥有完全的root访问权限。)

    还有CAP_DAC_READ_SEARCH允许读取任何文件和访问任何目录的功能,但不能执行或写入它们;并且CAP_FOWNER允许进程执行通常仅为文件所有者保留的操作,例如更改权限位和文件组。

    仅在下面提到了覆盖目录上的粘性位CAP_FOWNER,因此似乎CAP_DAC_OVERRIDE不足以忽略这一点。(它会给你写权限,但通常在粘性目录中你有这个权限,并+t限制它。)

    (我认为特殊设备在这里算作“文件”。至少generic_permission()只有目录的类型检查,但我没有检查之外。)


    当然,还是有连能力都无法帮你修改文件的情况:

    • 和 中的一些文件/proc,/sys因为它们不是真正的实际文件
    • SELinux 和其他可能限制 root 的安全模块
    • chattr不可变+i并且仅在 ext2/ext3/ext4 上附加+a标志,这两个标志甚至都阻止了 root,并且还阻止了文件重命名等。
    • 网络文件系统,服务器可以在其中进行自己的访问控制,例如root_squash在 NFS 中将 root 映射到没人
    • FUSE,我认为它可以做任何事情
    • 只读挂载
    • 只读设备
    • 43
  2. Kevin Lemaire
    2017-12-22T03:09:21+08:002017-12-22T03:09:21+08:00

    这与您注意到的默认权限完全相同:

    • 读写:
      默认情况下,Root 用户可以访问系统中的任何文件。您可以通过更改属性(如在此处说明:chattr )来删除此访问权限。然后将其与能力相关联。

    • 执行:
      除非设置了至少一个执行位,否则根用户没有执行权限。

    • 14
  3. GAD3R
    2017-12-22T03:50:07+08:002017-12-22T03:50:07+08:00

    由myFile.txt获得chmod 000 myFile.txt。

    0 no permission
    1 execute
    2 write
    3 execute + write
    4 read 
    5 read + execute
    6 read + write
    7 all
    

    ---------表示用户,组和其他没有权限。

    root 用户可以不受限制地修改此文件。授予读/写权限。要执行此文件,root 用户需要使其可执行。(chmod 100、010 或 001)

    • 5
  4. Barmar
    2017-12-28T10:36:45+08:002017-12-28T10:36:45+08:00

    执行模式的处理方式与其他模式略有不同。

    读取和写入权限用于强制执行安全策略。用户通常不受安全限制的root影响(有一些例外,如不可变文件,而现代功能(如功能)使其更加细粒度),这就是该帐户的另一个名称是“超级用户”的原因。

    执行权限更多的是一种建议模式,区分文件是可执行文件还是只是数据。因此,即使是 root 用户也遵守它——执行数据文件是没有意义的。如果没有设置执行权限,root 不能执行文件;如果其中任何一个被设置,他可以。当然,由于 root 也有权更改任何文件的权限,因此该帐户可以根据需要使文件可执行(除非文件系统是只读的)。

    顺便说一句,脚本是一个有趣的案例。脚本是相关解释器的数据文件。如果脚本有#!一行,您可以将其作为程序执行——shebang 中命名的解释器以脚本文件名作为参数运行。但是只有在设置了执行权限时才会这样做。另一方面,您可以直接运行解释器,例如/bin/bash scriptname. 解释器只关心他们是否可以读取文件,他们不检查执行权限。

    • 2
  5. Hassan Sohail
    2017-12-22T04:37:49+08:002017-12-22T04:37:49+08:00

    让我从理论上解释一下。

    root 用户是操作系统之王。

    如果一个文件或目录具有像 X 这样的执行权限,但没有其他权限,并且像 Steve 用户这样的人拥有该文件,那么 root 也可以执行该文件。

    永远记住,在 Linux 中 root 可以做任何事情,对 root 没有任何限制。

    • 0

相关问题

  • 有没有办法让 ls 只显示某些目录的隐藏文件?

  • 使用键盘快捷键启动/停止 systemd 服务 [关闭]

  • 需要一些系统调用

  • astyle 不会更改源文件格式

  • 通过标签将根文件系统传递给linux内核

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    JSON数组使用jq来bash变量

    • 4 个回答
  • Marko Smith

    日期可以为 GMT 时区格式化当前时间吗?[复制]

    • 2 个回答
  • Marko Smith

    bash + 通过 bash 脚本从文件中读取变量和值

    • 4 个回答
  • Marko Smith

    如何复制目录并在同一命令中重命名它?

    • 4 个回答
  • Marko Smith

    ssh 连接。X11 连接因身份验证错误而被拒绝

    • 3 个回答
  • Marko Smith

    如何下载软件包而不是使用 apt-get 命令安装它?

    • 7 个回答
  • Marko Smith

    systemctl 命令在 RHEL 6 中不起作用

    • 3 个回答
  • Marko Smith

    rsync 端口 22 和 873 使用

    • 2 个回答
  • Marko Smith

    以 100% 的利用率捕捉 /dev/loop -- 没有可用空间

    • 1 个回答
  • Marko Smith

    jq 打印子对象中所有的键和值

    • 2 个回答
  • Martin Hope
    EHerman JSON数组使用jq来bash变量 2017-12-31 14:50:58 +0800 CST
  • Martin Hope
    Christos Baziotis 在一个巨大的(70GB)、一行、文本文件中替换字符串 2017-12-30 06:58:33 +0800 CST
  • Martin Hope
    Drux 日期可以为 GMT 时区格式化当前时间吗?[复制] 2017-12-26 11:35:07 +0800 CST
  • Martin Hope
    AllisonC 如何复制目录并在同一命令中重命名它? 2017-12-22 05:28:06 +0800 CST
  • Martin Hope
    Steve “root”用户的文件权限如何工作? 2017-12-22 02:46:01 +0800 CST
  • Martin Hope
    Bagas Sanjaya 为什么 Linux 使用 LF 作为换行符? 2017-12-20 05:48:21 +0800 CST
  • Martin Hope
    Cbhihe 将默认编辑器更改为 vim for _ sudo systemctl edit [unit-file] _ 2017-12-03 10:11:38 +0800 CST
  • Martin Hope
    showkey 如何下载软件包而不是使用 apt-get 命令安装它? 2017-12-03 02:15:02 +0800 CST
  • Martin Hope
    youxiao 为什么目录 /home、/usr、/var 等都具有相同的 inode 编号 (2)? 2017-12-02 05:33:41 +0800 CST
  • Martin Hope
    user223600 gpg —list-keys 命令在将私钥导入全新安装后输出 uid [未知] 2017-11-26 18:26:02 +0800 CST

热门标签

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve