我正在为 nginx 编写一个 systemd 服务文件,以 root 身份运行的面向 Internet 的服务是一个坏主意,但是我需要 nginx 访问每个用户主目录中的某个目录。
例如
/主页/用户1/静态 /主页/用户2/静态
但是我不希望除了 nginx(和 root)之外的任何人能够访问用户目录。
这里面有一个两难的境地。
/home/user1 及其子目录需要归 user1:user1 所有,以防某个用户受到威胁。
这意味着,除非我遗漏了什么,否则 nginx 需要以 root 身份运行。转到 10。
因此,它需要访问某些目录。在本例中,它的配置目录例如是 /etc/nginx。但也包括其他目录。我的问题是这些目录是哪些?
答案1
Nginx 需要读取 /home/user#/static。
每个用户都应负责确保 nginx 能够读取该目录。
默认情况下,nginx 读取
/etc/nginx 及其子目录
nginx 仅在配置的位置进行写入,例如配置的日志文件(通常在 /var/log/nginx 中)。
记得检查你的启动脚本中的‘-g’参数,它可能包含一些额外的选项(比如要使用的 PID 文件)
此外,nginx 通常以 root 身份启动,稍后再转为配置的用户。
答案2
作为一种解决方法,您可以:
为每个用户的 /home/user1、/home/user2 等目录以及 ~/static 目录设置 750 个权限。
如果 nginx 工作程序在 nginx:nginx 下运行,则可以将所有用户添加到组 nginx,这样 nginx 就可以访问 /home/user1/static、/home/user2/static 等
当然,在主目录上设置 750 不是一个好的做法,但在这种情况下你别无选择,因为如果你在 root 下运行 nginx,它将能够访问整个系统,而不仅仅是你的用户目录,也许还有一些私钥和其他关键的东西。
还有另一种方法可以做到这一点:
- 在其他地方创建目录,例如 /srv/user1、/srv/user2,为它们设置权限 750 和 user1:nginx、user2:nginx 所有者:groups。这样 nginx 就可以轻松地从这些目录中读取数据。
创建到此目录的符号链接:
/home/user1/静态-> /srv/user1
/home/用户2/静态-> /srv/用户2
因此用户可以轻松访问和修改它们,同时用户主目录的权限还剩下 700。
所以这不是权宜之计,而是解决方案。而且您不必以 root 身份运行 nginx。