运行脚本修改nginx服务器配置的最佳方式
Best way to run script to modify nginx server configurations
我需要能够提供一个按钮或 link,它将 运行 一个 cgi 脚本,该脚本又 creates/modifies 目录 sites-available 中的 creates/modifies 个文件.我可以想到两种方法来做到这一点:
- 以某种方式授予脚本根权限以制作文件模组。
- 将
/etc/nginx/sites-available
目录组更改为 www-data
并使其可按组写入。
用户将无法输入任何文本。该脚本具有服务器变量所需的一切。
运行 这样的脚本最安全的方法是什么?除了建议的两个之外还有其他选择吗?是否有任何安全隐患需要避免?
可以通过多种方式限制对特定 HTTP 请求的访问。我认为 "the best" 方式是最适合您 needs/preferences 的方式。我将只列出我认为最有用的选项。
基于 Web 的身份验证系统
使用自定义身份验证系统,您可以限制仅具有足够权限(就此系统而言)的授权用户的访问权限。例如,只能为属于 "Web Server Admins" 组的用户处理对 /vhost.php
的请求。
防火墙
您可以维护一个允许向 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 服务器的用户 read/write 对 /etc/nginx/sites-available
的权限就足够了。
或者,您可以
1) 仅为 root
打开目录权限,2) 仅为 root
创建一个可执行脚本,以及 3) 允许通过 "passwordless" sudo
仅用于 Web 服务器的 user/group 通过 /etc/sudoers
,例如:
Cmnd_Alias WWW_HOST_CONFIG = /path/to/script
%www-data ALL=(ALL) NOPASSWD: WWW_HOST_CONFIG
注意,如果您使用代理(例如PHP-FPM,或Apache2),您需要为代理进程的用户提供适当的权限。顺便说一下,PHP-FPM 允许通过配置文件设置进程 user/group,例如:
[my_project]
listen = /tmp/php-fpm-my_project.sock
listen.mode = 0660
listen.owner = username
listen.group = www
user = username
group = www
我需要能够提供一个按钮或 link,它将 运行 一个 cgi 脚本,该脚本又 creates/modifies 目录 sites-available 中的 creates/modifies 个文件.我可以想到两种方法来做到这一点:
- 以某种方式授予脚本根权限以制作文件模组。
- 将
/etc/nginx/sites-available
目录组更改为www-data
并使其可按组写入。
用户将无法输入任何文本。该脚本具有服务器变量所需的一切。
运行 这样的脚本最安全的方法是什么?除了建议的两个之外还有其他选择吗?是否有任何安全隐患需要避免?
可以通过多种方式限制对特定 HTTP 请求的访问。我认为 "the best" 方式是最适合您 needs/preferences 的方式。我将只列出我认为最有用的选项。
基于 Web 的身份验证系统
使用自定义身份验证系统,您可以限制仅具有足够权限(就此系统而言)的授权用户的访问权限。例如,只能为属于 "Web Server Admins" 组的用户处理对 /vhost.php
的请求。
防火墙
您可以维护一个允许向 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 服务器的用户 read/write 对 /etc/nginx/sites-available
的权限就足够了。
或者,您可以
1) 仅为 root
打开目录权限,2) 仅为 root
创建一个可执行脚本,以及 3) 允许通过 "passwordless" sudo
仅用于 Web 服务器的 user/group 通过 /etc/sudoers
,例如:
Cmnd_Alias WWW_HOST_CONFIG = /path/to/script
%www-data ALL=(ALL) NOPASSWD: WWW_HOST_CONFIG
注意,如果您使用代理(例如PHP-FPM,或Apache2),您需要为代理进程的用户提供适当的权限。顺便说一下,PHP-FPM 允许通过配置文件设置进程 user/group,例如:
[my_project]
listen = /tmp/php-fpm-my_project.sock
listen.mode = 0660
listen.owner = username
listen.group = www
user = username
group = www