如何配置帐户对系统上的所有文件(包括根文件)具有读取权限?

如何配置帐户对系统上的所有文件(包括根文件)具有读取权限?

我需要创建一种“备份操作员”帐户,它可以读取系统上的所有文件并复制到备份系统,而无需修改其中任何文件,包括那些属于root.

root帐户似乎是唯一能够执行此操作的帐户,但root不会阻止该帐户运行它想要的任何内容。我能想到的另一个选择是将帐户放置在具有读取权限的组中,并使该帐户成为每个用户组的成员。 Linux 中的基本rwx权限似乎不是为此创建的。

Linux 是否有更复杂的功能来实现此目的,例如 ACL 可能提供的功能?

该权限适用于从远程备份服务器登录并将所有文件备份到远程服务器的用户。如果备份服务器受到威胁,该帐户将无法登录正在备份的服务器并造成一些损害。备份服务器上的帐户也应该无法登录备份服务器,并且在备份服务器受到威胁时会造成一些损害。

答案1

我想通常情况下,人们会以 root 身份运行备份实用程序,cron或者通过 SSH 密钥上的强制命令来运行,然后相信该实用程序不会执行任何危险的操作。

使用 ACL 授予权限全部系统上的文件会有点尴尬,因为您需要为每个文件单独设置 ACL(因为 POSIX ACL 并不真正具有授予子树访问权限的概念,您只有默认的 ACL自动复制到新文件)。这些文件的所有者可以意外或有意地删除这些权限。如果具有安全意识的程序(例如 SSH 或 GPG)发现您的文件被其他人读取,它们也可能会有点生气。 (他们甚至不需要了解 ACL 就可以做到这一点,因为传统的权限位屏蔽了 ACL 授予的权限,因此 ACL 授予的任何访问权限在传统权限位中都是显而易见的。)

不过,其实还是有办法的。 Linux能力系统包含一个专门用于此目的的功能:

CAP_DAC_READ_SEARCH

  • 绕过文件读权限检查和目录读执行权限检查;
  • 调用open_by_handle_at(2)
  • 使用该linkat(2) AT_EMPTY_PATH标志创建到文件描述符引用的文件的链接。

(我不确定最后一个与其他的有什么关系,但我会忽略它......)

如果您有一个特定的实用程序,您希望拥有该功能,您可以通过以下方式将其赋予它setcap

# setcap "CAP_DAC_READ_SEARCH+ep" /path/to/backupcmd

不过现在,任何可以运行二进制文件的人/path/to/backupcmd都可以使用该功能。因此,您可能希望保护该特定文件不被任意用户访问。例如,让它由 拥有root:backup,具有权限rwx--x---,其中backup是应该能够运行它的用户组。

# chown root:backup /path/to/backupcmd
# chmod 710 /path/to/backupcmd

答案2

您正在寻找 sudo

sudo 是类 Unix 计算机操作系统的一个程序,允许用户以另一个用户的安全权限运行程序

相关内容