我们公司有一个用于开发的网络服务器,我们的每个开发人员都有一个用户帐户。服务器还有一个用户帐户'应用程序'。用户“应用程序”不属于一个人——它是一个共享帐户,任何开发人员都可以使用它来部署准备进行质量检查的代码。准备测试的代码已上传到 /home/app/public_html/
我们正在尝试找出一种有效的系统来管理对此共享帐户的访问。目前,我们都只是共享“应用程序”用户的密码——出于多种原因,这很糟糕。
我们希望有一个系统,开发人员仍然可以使用 SFTP 或 FTP 将文件直接上传到“应用程序”用户帐户。我们考虑修改 /home/app 和子文件夹上的组,以便“wheel”组的成员也有权添加、修改和删除文件。但是,您会遇到这样的问题:用户上传到 /home/app 的文件不属于“app”所有,而是属于上传这些文件的用户所有。
是否有管理共享帐户访问的最佳实践?
答案1
管理共享帐户的最佳做法是锁定共享帐户。
您应该将所有开发人员添加到一个组(即app_development
),将测试人员添加到另一个组(即app_testing
),等等,而不是管理对共享帐户的访问 - 这由于多种原因而不好。是仅供一个人使用)根据当前正在执行的作业和/或任务放置在组中,授予组对文件的适当权限。
对于此示例,受雇开发 Web 应用程序的软件开发人员将属于software_development
和web_development
(开发本地应用程序的开发人员可能属于application_development
而不是web_development
)。团队的测试员/QA 成员将属于software_testing
和web_testing
组。
组中的用户wheel
始终有权通过 root 进行读写(除非您使用 SELinux 直接限制他们的访问权限)。
sudo -i
groupadd software_development
groupadd web_development
groupadd software_testing
groupadd web_testing
mkdir -p /home/software_development/web_development/staging`
POSIX 访问控制列表
制定协作目录结构,为组授予最低权限
chown -R root:software_development /home/software_development
chmod 550 /home/software_development
setfacl -m g:software_development:r-x /home/software_development
setfacl -m g:software_testing:r-x /home/software_development
chown -R root:web_development /home/software_development/web_development
chmod -R 2570 /home/software_development/web_development
setfacl -R -m g:web_development:rwx /home/software_development/web_development
setfacl -R -m d:g:web_development:rwx /home/software_development/web_development
setfacl -m g:web_testing:r-x /home/software_development/web_development
setfacl -m d:g:web_testing:0 /home/software_development/web_development
setfacl -m d:g:web_testing:r-x /home/software_development/web_development/staging
setfacl -R -m d:u:root:r-x /home/software_development
root
群组中的任何人software_development
都software_testing
可以进入/home/software_testing
并查看其内容。- 所有人都
web_developers
可以查看和修改所有子目录的内容/home/software_development/web_development
(当前存在的以及将来可能创建的所有子目录)。 - 所有人都
web_testers
可以看到 的直接内容/home/software_development/web_development
,但看不到除 之外的任何子目录staging
。 - 请注意,
web_testing
并且software_testing
没有任何写入权限 - 因为他们不需要它来完成他们的工作。
Web 开发人员了解他们的项目应该放在一个子目录of web_development
(通常是项目名称:ie. web_development/project_1
,从而拒绝测试人员访问当前正在开发的源代码。当准备好进行测试/QA 时,他们会将其复制到 staging 子目录。