我需要能够提供一个按钮或链接来运行一个cgi脚本,该脚本反过来创建/修改/etc/nginx
目录中可用的文件。我可以想到两种方法:
/etc/nginx/sites-available
目录组更改为www-data
并使其可以按组写入。用户将无法输入任何文字。该脚本具有服务器变量所需的一切。
运行此类脚本最安全的方法是什么?除了两个建议之外还有其他选择吗?是否有任何安全隐患需要避免?
答案 0 :(得分:0)
可以通过多种方式限制对特定HTTP请求的访问。我认为"最好的"方式是最适合您的需求/偏好的方式。我将仅列出我认为最有用的选项。
基于网络的身份验证系统
使用自定义身份验证系统,您只能为具有足够权限的授权用户限制访问权限(就此系统而言)。例如,只能为属于" Web服务器管理员" 组的用户处理对/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服务器的用户对/etc/nginx/sites-available
具有读/写权限就足够了。
或者,你可以
1)仅针对root
打开目录的权限,2)仅为root
创建脚本可执行文件,并且3)允许通过&#34;无密码&#34;执行脚本。 sudo
仅适用于通过/etc/sudoers
的Web服务器用户/组,例如:
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