开发者社区> 问答> 正文

一台 Web 用途 Python 的Linux 服务器的目录结构、用户分组应该是怎样的?

一台运行编译安装配置 CentOS 系统、用于处理 Web 请求的服务器应该怎样处理一下关系:

目录结构
多个磁盘的挂载点
多个用户(系统管理员用户、ftp 用户、代码管理用户、普通用户)之间的用户组、权限关系
各个主要目录(如 wwwroot 等)的权限设置
SELinux 的文件权限

展开
收起
a123456678 2016-06-20 10:56:11 2568 0
1 条回答
写回答
取消 提交回答
  • 我在之前以及现在,在编写一套虚拟主机面板,因此对权限控制略有想法。在这里分享一下我设计的权限控制方案,应该算是比较严格的,当然,这可能并不是主流方案。

    下文服务指的是数据库这类软件,应用是指自己编写的程序。

    所有数据都放在 /home, 例如 mysql 的数据放在 /home/mysql/data; 应用的文件放在 /home/myapp/web, 每个应用用单独的用户,以隔离权限。因为数据都在 /home, 只单独挂载 /home 就可以了。

    每个服务都用单独的用户来跑,各种服务不监听本地端口,而是监听 unix socket, 因为这样可以用文件系统来进行更灵活的权限控制。

    大部分文件都用 750 的权限,即自己有完整权限,同组用户可以读取和运行,其他用户不可读。当一个服务需要读取另一个应用的文件的时候,把服务的用户加到被用到文件的应用的组。例如 nginx 需要读取 myapp 的静态文件,那么就把 http 加到 myapp 组里。

    unix socket 略有不同,例如 myapp(Python App) 监听了一个 unix socket 提供 HTTP 服务,Nginx 需要反代这个服务,那么这个 unix socket 文件的权限需要是 770 才行,不然 Nginx 没法写这个文件就没法反代请求。

    在使用数据库的时候,每个应用都要用不同的帐号,例如 MySQL 自带的非常好的权限系统。
    而对于 memcached 这类没有权限控制的服务,应该为每个应用跑一个单独的实例,然后用 unix socket 做权限控制。

    至于源代码的部署,我个人倾向于先将代码 push 到一个单独的源代码服务器(可以是 Github 或者自建的 GitLab), 然后发布时手动从服务器 pull. 这样的好处是生产环境有独立的历史,源码服务器上不必包含一些如帐号密码等敏感信息,这些信息只存在于生产环境的历史中。

    SELinux 没用过。

    2019-07-17 19:43:52
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
Web应用系统性能优化 立即下载
高性能Web架构之缓存体系 立即下载
PWA:移动Web的现在与未来 立即下载