保护 Perl 写入的全球可写的 .shtml 文件的最佳方法是什么?

保护 Perl 写入的全球可写的 .shtml 文件的最佳方法是什么?

Perl 脚本

我在旧的 Debian 6 服务器上运行了一个 Perl 脚本(直到我搬到新服务器),它在 .shtml 文件中打开一个可编辑窗格,只接受克里奥尔语单个用户的标记输入,并写入两个用户可编辑的 .shtml 文件,并在保存已编辑的 .shtml 文件时对每个文件进行备份。.shtml 文件权限为606-rw----rw-

编辑后,不懂技术的用户必须输入密码才能触发脚本,并且(尽管他不太可能这样做)“脚本”标签会以纯文本形式显示出来。

在切换服务器之前,这些服务器曾经在其下运行suEXEC(我没有设置并且不想使用),但它们现在需要权限更改才能运行。

可写文件

这两个可编辑的 .shtml 文件是 SSI,且 virtualHost 块设置为IncludesNoExec

用户目录中没有.htaccess 文件public_html,唯一的其他用户只进行简单的 HTML 编辑并且没有其他知识,我管理文件夹上方的脚本cgi-binpublic_html用户目录中的所有文件都是所有者/组用户名。

考虑到上述情况,我的问题是:

  1. 606如果文件权限为/ ,我应该注意什么-rw----rw-
  2. 目前我还能做些什么来进一步保护这样旧的 Debian 服务器?

我考虑过将服务器端口从 22 改为更高的端口,我在另一台服务器上也这么做过,但对于在这台旧服务器上运行的几个网站,我目前无法访问它们的 DNS 或远程登录设置,所以这还不是一个选择。和许多人一样,我并不是真正的服务器管理员,但由于我的合作开发人员去世,我不得不维护一些东西。

答案1

最重要的问题是:

  • 谁运行该脚本?
  • 谁可以修改脚本?

从您的描述来看,该应用程序是一个 HTML 表单,而您的程序是一个 CGI 脚本。因此,当用户单击“提交”按钮时,该脚本由 HTTP 服务器守护进程用户启动。

如果此 CGI 脚本或其他脚本受到攻击,您不希望脚本被修改。因此,脚本必须仅由 HTTP 守护进程用户读取+执行,并且文件的所有者必须是另一个用户,这样守护进程用户就无法更改权限。

.shtml 文件必须由守护进程读写,并且不属于守护进程所有。脚本绝不能删除它们,而只能重写它们的内容。

存储脚本和 .shtml 文件的目录不得是可写的,也不归 HTTP 守护进程用户所有。

相关内容