我想编写一个代表不受信任方接收和执行代码的服务器。
为了使这更安全,我希望以专门为运行此代码而创建的用户身份运行代码,然后将其删除。
如何授予非 root 用户创建、模拟和删除其他用户的权限?
也许您可以使用 sudo 和 /etc/sudoers 向非 root 用户授予权限,但这种方式似乎不安全且非线性。我不知道你需要什么,但也许你可以预先创建一些用户然后使用它们。
可以想象的唯一方法是使用 setuid root 的代理程序(即 chown root my-proxy-process; chmod 47nn my-proxy-process。该 setuid 代理程序负责处理安全考虑,setuid'ing给指定用户等
但是,与此相关的安全问题应该是相当清楚的。一种可能受到限制的方法是确保您的非特权进程与名称组中的用户一起运行。然后使用 root:myprivategroup chown thet proxy 命令并将其 chown 为 4710,这样只有属于 myprivategroup 成员的用户才能执行它。
这可能是尽可能安全的。主要的是确保代理过程良好、安全并被锁定,因此只有相关用户才能通过组成员身份运行它。
如果您知道有任何其他限制可以应用于用户提供的进程,那么代理程序可以验证该进程是否符合这些规则。请注意,虽然这可能是一个权宜之计,但制作一个通过测试的“坏”程序并不超出技术范围。
为了增加安全性(推荐),请使用 mark4o 提到的沙箱或 chroot 监狱。
你会想要使用某种沙盒或虚拟化;至少至少有一个chroot环境。另请参阅Linux 中的沙盒。
这是一个问题,因为您不能在没有终端的情况下使用 su vie 脚本(可能是安全功能)。我相信你可以通过这个破解你的方式,但这可能是有充分理由的。