基本组文件共享配置

基本组文件共享配置

我有 3 个用户A,C在“管理员”组内。我有另一个用户'D' 在其主目录中,有一个project文件夹。我已经做了D作为该文件夹的所有者,并使用 指定“admin”作为组chgrp。组和所有者拥有所有权限,但仍然A,或者C无法访问该文件夹。我有两个问题:

  1. 其他用户是否可以访问其他用户目录中的任何内容

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

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

sudo chown -R D project
sudo chgrp -R admin project

我在尝试进入其中project的文件夹时遇到错误D的主目录(当登录时A

cd /home/D/project
-bash: cd: /home/D/project: Permission denied

这是命令的输出ls -la

drwxrwsr-x 7 D admin      4096 Nov 18 13:06 project

以下是该组的描述admin

getent group admin
admin_users:x:501:A,B,C

另请注意,当我从用户输入时,组admin未列出groupsD,但我使用时可见cut -d: -f1 /etc/group。我指的用户是D实际上是ec2-user(Amazon 服务器上的默认 Fedora 用户)

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

答案1

  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
    
  4. 对所有文件递归设置组读写权限:

    chmod -R g+rw repo
    
  5. 设置repo 和所有子目录的set group id on execution bit( )。setgid表示setgid该目录中新创建的文件和子目录继承与父目录相同的组所有权。新的子目录也设置了setgid位,以实现递归效果:

    find repo -type d -exec chmod g+s {} \;
    

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

共享git存储库

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

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

git init --bare --shared=group  repo

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

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

请参阅git-init手册页手册git-config更多细节。

笔记

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

答案2

有些观点似乎是必要的(尽管我坦率地承认我在这些问题上不是专家),但 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 无法读取路径名,只能转到路径名)。

相关内容