从非 root Web 应用程序安全地创建帐户

从非 root Web 应用程序安全地创建帐户

我有一个以非特权用户身份运行的 Web 应用程序,需要创建 Linux 帐户。

我不希望以 root 身份运行它,因此我想到的唯一方案是创建一个简单的 C suid 程序,该程序接受一个参数并运行 adduser 来创建帐户。作为附加的安全性,该程序将对运行 Web 应用程序的用户帐户进行 700 的授权。

还有其他想法/方法可以做到这一点吗?

答案1

让网站仅在必要时使用 sudo 实用程序调用受保护的脚本来获取 root 权限。

答案2

如果你不需要立即的帐户创建,大约1分钟的延迟是可以接受的,您可以使用以下想法。

  1. Web 应用程序应有 2 个可写入目录:www-tmp、www-job

  2. 每次 Web 应用收到创建帐户请求时,它都会在目录 web-tmp 中创建一个文件。然后将该文件移动到 web-job。不直接在 www-job 中创建文件的原因是为了防止 cron 作业(参见下一步)读取不完整的文件。

  3. 创建一个具有所需权限的 cron 作业,每分钟运行一次。每次运行时,它将处理 www-job 中的所有文件,创建帐户,然后删除文件。继续检查和处理,直到 www-job 为空。使用 pid 锁防止并行运行。

通过上述流程,您的 Web 应用程序不需要任何额外的权限。

Web app 是订单台。Cron job 是生产线。www-job 是排队区。不同的部门,不同的权限。

可以使用数据库表代替文件/目录进行排队。

PS:您的 cron 作业,无论是 bash、php 还是 perl,都应该在将参数传递给系统调用之前进行最后的检查。

用户名应该只包含字母(如果希望用户名不区分大小写,则可全部小写或大写)数字,或许还可以添加句点(.)。

对于密码,检查其最小长度。确保(双重检查,三重测试)脚本将其作为一个字符串传递给系统调用,系统调用将其作为一个字符串。

相关内容