我们有一个运行 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)足以满足我们的要求。