组中的用户可以访问另一个用户主目录中的文件吗?

Dau*_*aud 8 security permissions git group access-control

我在“admin”组中有 3 个用户ABC。我有另一个用户“ D ”,在其主目录中有一个project文件夹。我已将D设为该文件夹的所有者,并使用chgrp. 组和所有者拥有所有权限,但ABC仍然无法访问该文件夹。我有两个问题:

  1. 其他用户甚至可以访问其他用户目录中的任何内容吗

  2. 授予组权限只会使该组中的用户可以访问任何用户主目录之外的文件?

编辑:这是我设置项目所有者和组的方式

sudo chown -R D project
sudo chgrp -R admin project
Run Code Online (Sandbox Code Playgroud)

我在尝试进入D主目录中的project文件夹时出错(以A身份登录)

cd /home/D/project
-bash: cd: /home/D/project: Permission denied
Run Code Online (Sandbox Code Playgroud)

这是ls -la命令的输出:

drwxrwsr-x 7 D admin      4096 Nov 18 13:06 project
Run Code Online (Sandbox Code Playgroud)

以下是该组的描述admin

getent group admin
admin_users:x:501:A,B,C
Run Code Online (Sandbox Code Playgroud)

另请注意,admin当我groups从用户D键入时未列出组,但在我使用cut -d: -f1 /etc/group. 我所指的Dec2-user用户实际上是(亚马逊服务器上的默认 Fedora 用户)

最终,我在服务器上设置了一个 git 存储库。我已经在D的主目录中创建了 repo ,但希望ABC也可以访问它(并克隆它们)

Rob*_*rtL 9

  1. 是的,用户可以访问另一个用户主目录中的文件。
  2. 不,没有对系统文件权限之外的主目录进行特殊处理。“给予的权利,以一组”包含两个部分,给予所属组,并设置组的权限。您的示例仅涉及所有权。

您可以使用该命令递归设置权限chmod但仅凭这一点可能无法保证其他成员可以访问由组中的一个成员创建的新文件。

感谢您介绍您迄今为止所做的工作,并提供了足够的详细信息,并说明了您共享git存储库的目标。

我们先来看看在Unix和Linux上一般是如何实现组文件共享的,然后再看看git.

基本组文件共享配置

以下是 Unix 和 GNU 等中此类文件共享的一些基础知识。这是一种设置一个或多个目录的简单方法,其中一个组的所有成员都对组中其他用户创建的文件具有读写权限.

假设您的公共用户组为gitusers,目录为repo.

  1. 将共享成员放入一个公共组(例如gitusers)。

  2. umask 002为组内所有用户设置,表示默认大多数文件将创建为组可写的。这可以在各种 shell 启动文件(例如/etc/bash.bashrc)中设置。在 GNU/Linux 系统上,请参阅man 8 pam_umaskman umask以获得更多更好的信息。

  3. -R在所有共享文件上递归设置组所有权 ( ):

    chgrp -R gitusers repo
    
    Run Code Online (Sandbox Code Playgroud)
  4. 对所有文件递归设置组读写权限:

    chmod -R g+rw repo
    
    Run Code Online (Sandbox Code Playgroud)
  5. 设置repo 和所有子目录的set group id on execution bit( setgid)。在setgid表明新创建的文件和子目录该目录中继承同一组所有权父目录。新的子目录也setgid设置了位,用于递归效果:

    find repo -type d -exec chmod g+s {} \;
    
    Run Code Online (Sandbox Code Playgroud)

完成上述步骤后,您应该可以顺利让gitusers示例中的同一组中的所有用户读取和写入彼此的文件,同时禁止不在gitusers共享组中的用户的写入权限。您可以在任意数量的目录上复制chown,chmodfind命令,用于您希望的任何共享目的,而不仅仅是git.

共享git存储库

似乎git仅通过上述配置更改就可以正常工作。但是git也知道共享和组权限(并且实际上可能会为您执行上述一些操作)。

如果您要创建共享git存储库,请考虑以下选项:

git init --bare --shared=group  repo
Run Code Online (Sandbox Code Playgroud)

如果您有现有存储库,请考虑以下设置:

  1. 核心.裸
  2. core.sharedRepository=组

请参阅git-init手册页git-config手册页了解更多详情。

笔记

虽然裸的、组共享的git存储库将处理与一般示例中相同的一些步骤,但我建议也执行一般示例中的步骤以确保一致性并易于设置任何其他共享目录。


Tom*_*ych 6

有些点似乎是必要的(尽管我坦率地承认我不是这些问题的专家),而 RobertL 令人钦佩的彻底回答中没有涵盖这些点。

  1. 确保其他用户已实际登录组admin

A$ newgrp admin

由于用户已经在一组,我想你会不会需要设置一组密码。如果你这样做:

A$ sudo chgpasswd
admin:secret (输入标准输入)

  1. 确保D的主目录在组中admin并且可以组搜索。

D$ chgrp admin ~
D$ chmod g+x ~
D$ ls -lad ~
drwx--x--- 3 D admin 4096 Nov 24 19:25 /home/D

该目录需要可搜索以允许用户输入它或其子目录project。它不需要是组可读的,所以D自己的文件名仍然是私有的。为了让其他用户project轻松访问,让他们创建指向它的符号链接;否则,他们每次都必须输入整个路径(自动完成将不起作用,因为 shell 无法读取路径名,它只能转到它)。