使用 ACL 和 umask 设置共享目录中的默认文件权限

使用 ACL 和 umask 设置共享目录中的默认文件权限

我们有一个运行 Ubuntu 10.04 的 Linux 机器。它的主要功能是 Web 服务器,并且配置了(我认为)传统的 LAMP 堆栈。

开发人员可以访问一个公共目录“dev”,其中包含一个用作 Web 根目录的子目录。所有开发人员都有单独的 SSH 访问权限。

当开发人员在“dev”目录树中创建文件,或从存储库将文件拉入“dev”时,我们希望文件权限为 rwxrwxr-x。相反,新创建的文件具有 rw-r--r-- 的权限。通过修改 ACL 并在“dev”上设置带有粘性位的组和用户 ID 等,我已设法使新创建的文件具有 rw-rw-r-- 的权限。

我认为问题出在 umask 配置上,目前该配置使用 /etc/profile 中的全局值 022 进行设置。我不想全局更改 umask 或为每个开发人员更改 umask,以允许更宽松的默认权限。

除非我遗漏了什么,否则我看不出有办法通过 ACL 和 umask 实现我们想要的效果。对于从事共享项目的 Web 开发人员来说,这肯定是一个相当普遍的要求。

是否有首选或推荐的方法?

最初我在“dev”上设置了 gid,如下所示。

chmod g+s dev
ls -l
drwxrwsr-x  8 755 admin 4096 Jan 19 13:24 dev

“dev” 上的默认 ACL 如下。

getfacl dev

# file: dev
# owner: 755
# group: admin
# flags: -s-
user::rwx
group::rwx
other::r-x

我为“管理员”组(开发人员所属)应用了 ACL。

setfacl -Rm d:g:admin:rwX

getfacl dev

# file: dev
# owner: 755
# group: admin
# flags: -s-
user::rwx
group::rwx
other::r-x
default:user::rwx
default:group::rwx
default:group:admin:rwx
default:mask::rwx
default:other::r-x

我创建一个文件并检查文件权限。

touch dev/foo

ls -l dev

-rw-rw-r--+  1 duncmc admin    0 Jan 19 16:03 foo

这次我为我的用户“duncmc”添加了一个 ACL

setfacl -Rm u:duncmc:rwX dev

getfacl dev
# file: dev
# owner: 755
# group: admin
# flags: -s-
user::rwx
user:duncmc:rwx
group::rwx
mask::rwx
other::r-x
default:user::rwx
default:group::rwx
default:group:admin:rwx
default:mask::rwx
default:other::r-x

我创建了一个新文件并检查权限。

touch dev/bar

ls -l dev

-rw-rw-r--+  1 duncmc admin    0 Jan 19 16:07 bar
-rw-rwxr--+  1 duncmc admin    0 Jan 19 16:03 foo

为我的用户添加 ACL 似乎更改了现有文件“foo”的组权限(原为 rw-,现在为 rwx)。新创建的文件继承了不同的权限。这对我来说毫无意义,表明其中存在一些我不理解的基本工作原理。

答案1

事实证明,文件权限 rw-rw-r--(或 644)足以满足我们的要求。

相关内容