![保护 Perl 写入的全球可写的 .shtml 文件的最佳方法是什么?](https://linux22.com/image/752858/%E4%BF%9D%E6%8A%A4%20Perl%20%E5%86%99%E5%85%A5%E7%9A%84%E5%85%A8%E7%90%83%E5%8F%AF%E5%86%99%E7%9A%84%20.shtml%20%E6%96%87%E4%BB%B6%E7%9A%84%E6%9C%80%E4%BD%B3%E6%96%B9%E6%B3%95%E6%98%AF%E4%BB%80%E4%B9%88%EF%BC%9F.png)
Perl 脚本
我在旧的 Debian 6 服务器上运行了一个 Perl 脚本(直到我搬到新服务器),它在 .shtml 文件中打开一个可编辑窗格,只接受克里奥尔语单个用户的标记输入,并写入两个用户可编辑的 .shtml 文件,并在保存已编辑的 .shtml 文件时对每个文件进行备份。.shtml 文件权限为606
或-rw----rw-
。
编辑后,不懂技术的用户必须输入密码才能触发脚本,并且(尽管他不太可能这样做)“脚本”标签会以纯文本形式显示出来。
在切换服务器之前,这些服务器曾经在其下运行suEXEC
(我没有设置并且不想使用),但它们现在需要权限更改才能运行。
可写文件
这两个可编辑的 .shtml 文件是 SSI,且 virtualHost 块设置为IncludesNoExec
。
用户目录中没有.htaccess 文件public_html
,唯一的其他用户只进行简单的 HTML 编辑并且没有其他知识,我管理文件夹上方的脚本cgi-bin
,public_html
用户目录中的所有文件都是所有者/组用户名。
考虑到上述情况,我的问题是:
606
如果文件权限为/ ,我应该注意什么-rw----rw-
?- 目前我还能做些什么来进一步保护这样旧的 Debian 服务器?
我考虑过将服务器端口从 22 改为更高的端口,我在另一台服务器上也这么做过,但对于在这台旧服务器上运行的几个网站,我目前无法访问它们的 DNS 或远程登录设置,所以这还不是一个选择。和许多人一样,我并不是真正的服务器管理员,但由于我的合作开发人员去世,我不得不维护一些东西。
答案1
最重要的问题是:
- 谁运行该脚本?
- 谁可以修改脚本?
从您的描述来看,该应用程序是一个 HTML 表单,而您的程序是一个 CGI 脚本。因此,当用户单击“提交”按钮时,该脚本由 HTTP 服务器守护进程用户启动。
如果此 CGI 脚本或其他脚本受到攻击,您不希望脚本被修改。因此,脚本必须仅由 HTTP 守护进程用户读取+执行,并且文件的所有者必须是另一个用户,这样守护进程用户就无法更改权限。
.shtml 文件必须由守护进程读写,并且不属于守护进程所有。脚本绝不能删除它们,而只能重写它们的内容。
存储脚本和 .shtml 文件的目录不得是可写的,也不归 HTTP 守护进程用户所有。