组文件以及与之相关的所有内容

组文件以及与之相关的所有内容

我对 *nix 操作系统很陌生。我了解该文件的格式和用法(至少是手册页所说的)/etc/group。有一天,我试图用备份副本替换我的组文件。我将文件名更改为group.old然后我机器中的所有帐户都丢失了使用权。我必须进入单用户模式才能修复它。看来我需要一个关于这个组和整个 UNIX 帐户事情的深入课程。

有人可以给我一个链接或与我分享您的学习经验吗?

答案1

该文件/etc/group指示哪些用户是哪些组的成员。组用于访问控制;他们补充用户。

/etc/group在登录时读取。每个进程作为一个用户和一个或多个组运行。登录过程开始以所有权限运行;当用户已成功通过身份验证(例如,通过键入密码)时,登录过程将采用 中指示的组/etc/group(加上 中指示的一组/etc/passwd),然后作为经过身份验证的用户启动 shell。

您可能已经注意到,每个文件都具有三组权限(用户、组和其他)以及所有者和组。当进程尝试访问文件时,则:

  1. 如果进程以拥有该文件的用户身份运行,则适用的权限是用户权限。
  2. 否则,如果进程的组之一是拥有该文件的组,则适用的权限是组权限。
  3. 否则,适用的权限是其他权限。

例子:

$ ls -l myfile
-rw-r-----  1 msh gutenberg 1234 Jul  4  1971 books.txt

用户msh可以读写该文件( rw-)。组中的任何用户gutenberg都可以读取该文件 ( r--)。其他用户根本无法访问该文件 ( ---)。

因此,组允许您让所有用户的子集可以访问文件。系统服务和设备也可以限制为特定用户或特定组。

组有三种典型用途:

  • 处理一个共同项目的物理用户组访问同一组文件,如上例所示。
  • 用于对系统资源进行访问控制的物理用户组。例如,竞技类游戏通常会存储属于用户root和组的高分文件games,并且只能由games所有用户写入,而不能由所有用户写入 ( rw-rw----);游戏程序以提升的权限作为games组运行(它是设置gidgames),因此它可以读写高分文件,但其他进程不能。
  • 系统用户组。例如,许多系统服务作为专用用户和专用组运行,以最大限度地降低一项服务中的错误或妥协可能影响其他服务的风险。

鉴于您的症状,您的系统设置为root通过组成员身份控制对帐户的访问。做这件事有很多种方法。最常见的设置是:

  • 访问 root 帐户是通过须藤。用户必须输入自己的密码才能运行sudosudo如果用户在组中,则允许他们以 root 身份调用运行命令admin。这由类似%admin: ALL=(ALL) ALL中的线表示/etc/sudoers。有时组的名称不同。这是 Ubuntu 中的默认设置。
  • 访问 root 帐户是通过。只有组内的用户wheel可以运行su。用户必须输入root密码才能运行su;这样,为了渗透 root 帐户,攻击者必须同时获取用户的密码和 root 密码。这是某些 BSD 系统上的默认设置,但随着攻击者变得更加复杂(泄露帐户、运行键盘记录器、获取 root 密码),它已被废弃。

/etc道德:如果您不知道文件的用途,请不要更改或删除它们。如果您确实更改了某些内容,请从 root shell 执行此操作,并测试之后是否仍然可以登录;如果不能,请立即恢复更改。

我建议在/etc.在 Ubuntu 上,安装等等管理员打包并运行etckeeper init(以 root 身份)。

答案2

或许是《运行Linux》Dalheimer 和 Welsh 的书(O'Reilly,2005)或一些TLDP 指南符合要求。您的发行版可能有一些特定的指南,请查找。修改配置文件时要特别小心。备份它们是个好主意,但如果您更改了任何内容,最好事先制作一份副本(不要将它们移走)。大多数发行版都有管理用户的工具和许多其他配置,除非您完全确定自己知道自己在做什么,否则不要考虑其他任何事情;当你知道的时候,无论如何都要使用它们。

答案3

当您提出问题时,让人们知道您正在运行什么软件对您来说非常有用 - 在这种情况下,了解您正在运行什么发行版将很有用。

您是否碰巧运行 Fedora 或 Redhat?如果是这样,SE Linux 可能就是问题所在。

要查明您是否正在运行 SE Linux,请运行以下命令:getenforce

如果您运行的是 SE Linux,它将返回“enforcing”。如果您运行的是 SE Linux,则运行:

ls -lZ /etc/group.old /etc/group

并比较一下差异。如果新文件丢失了很多看起来有点像这样的东西:

system_u:object_r:etc_t:s0

在旧文件的列表中,您可能丢失了 SElinux 上下文信息。

您可以使用以下命令从旧文件中复制 SElinux 上下文:

chcon --reference /etc/group.old /etc/group

如果您刚刚学习,明智的答案可能是关闭 SE Linux。您可以通过以下方式做到这一点:

setenforce 0

这将终止 SELinux,直到您重新启动(或运行 setenforce 1)。

要永久关闭 SElinux,您需要编辑:

/etc/selinux/config

相关内容