【问题标题】:Best way to run script to modify nginx server configurations运行脚本修改 nginx 服务器配置的最佳方式
【发布时间】:2017-05-22 15:24:54
【问题描述】:

我需要能够提供一个按钮或链接来运行一个 cgi 脚本,该脚本依次创建/修改 /etc/nginx 目录站点可用的文件。我可以想到两种方法:

  1. 以某种方式授予脚本 root 权限以制作文件 mods。
  2. /etc/nginx/sites-available 目录组更改为www-data 并使其可按组写入。

用户将无法输入任何文本。该脚本具有服务器变量所需的一切。

运行这样的脚本最安全的方法是什么?除了建议的两个之外,还有其他选择吗?是否有需要避免的安全隐患?

【问题讨论】:

标签: php linux security nginx cgi


【解决方案1】:

可以通过多种方式限制对特定 HTTP 请求的访问。我认为“最好的”方式是最适合您的需求/偏好的方式。我将只列出我认为最有用的选项。

基于网络的身份验证系统

使用自定义身份验证系统,您可以将访问限制为仅具有足够权限的授权用户(就该系统而言)。例如,对/vhost.php 的请求只能为属于 "Web Server Admins" 组的用户处理。

防火墙

您可以维护一个允许向 Web 服务器主机发送请求的源 IP 地址的白名单,例如:

iptables -A INPUT -p tcp --dport 80 -s AllowedIP -j ACCEPT
iptables -A INPUT -p tcp --dport 80 -j DROP

例如,查看this 问题的答案。

HTTPS

我会推荐configuring HTTPS 以保护流量不被拦截。注意,防火墙应该做相应的调整。例如,您可以丢弃端口 80 上的所有流量,并允许端口 443 上针对特定 IP 地址的请求。

文件系统权限

我认为允许Web服务器的用户对/etc/nginx/sites-available的读/写权限就足够了。

你也可以

1) 仅为root 打开目录权限,2) 仅为root 创建可执行脚本,以及 3) 仅允许 Web 服务器用户通过“无密码”sudo 执行脚本/group via /etc/sudoers,例如:

Cmnd_Alias  WWW_HOST_CONFIG = /path/to/script
%www-data ALL=(ALL) NOPASSWD: WWW_HOST_CONFIG

注意,如果您使用代理(例如 PHP-FPM 或 Apache2),您需要为代理进程的用户授予适当的权限。顺便说一句,PHP-FPM 允许通过配置文件设置进程用户/组,例如:

[my_project]
listen = /tmp/php-fpm-my_project.sock
listen.mode = 0660
listen.owner = username
listen.group = www
user = username
group = www

【讨论】:

  • 感谢您的彻底回复。由于您认为这两种方法都是同等安全的(在我正在运行的 https 下),因此更改读/写权限的更简单方法似乎更可取。
猜你喜欢
  • 1970-01-01
  • 2011-09-09
  • 1970-01-01
  • 2014-09-15
  • 1970-01-01
  • 2014-11-24
  • 1970-01-01
  • 2017-05-12
  • 1970-01-01
相关资源
最近更新 更多