linux - 如何在 Perl 中以 root 身份运行句子
问题描述
我制作了一个使用 apache2 将用户添加到系统的 perl 程序。当我以 root 身份运行时它可以工作,但我在 html 的寄存器中使用它,因此该程序由该用户运行(我认为)并且它不起作用。/var/log/apache2/error.log 中的错误是:"AH1215: can't open_a /etc/passwd Permission denied at /usr/lib/cgi-bin/registro.cgi line 60"
该行如下
Linux::usermod->add($user,$password)
一种解决方案必须是使用 chmod +s 向 registro.cgi 授予权限 +s,但不允许使用这种方式。
解决方案
您的问题的前提表明对系统安全性缺乏适当的关注,但是如果您真的想为 Web 应用程序提供这种特权,那么合理的方法是让单独的setuid
程序以提升的特权运行以执行少数 root级动作。
这些setuid
程序的功能有限,您可以进行额外的输入验证和验证,以确保它们不会被劫持做坏事。然后,Web 脚本可以setuid
根据需要调用该程序。
我想强调关于允许 CGI 脚本操作/etc/passwd
. 对于 Web 应用程序来说,这是非常可疑的行为,您应该在继续设计之前仔细考虑。
推荐阅读
- r - 定义双向条形图中不同类型的颜色
- javascript - 如何在 Laravel 5.8 中使 chart.js 动画/增长/活着?
- python - 为什么不能复制列表并丢失列表的第一个索引?
- openlayers - 使用包含 LineStrings 的矢量源在 OpenLayers 中创建热图
- scala - Spark Structured Streaming Databricks 事件中心架构定义问题
- iis - 未创建 stdoutLog
- javascript - 如何确保在 safari、firefox 和 chrome 中以相同方式处理 tinymce 5 编辑器区域的模糊事件?
- racket - 为什么我的函数总是返回一个空列表?
- java - 如何使用 ProcessLifecycleOwner 捕获生命周期事件?
- python - 带依赖项的 Siblig 导入