如何允许Python脚本访问受保护目录中的mkdir,而不需要在Linux中使用su访问



我正在尝试创建一个python shell脚本,在Ubuntu Linux中创建一些目录。我试图在其中创建目录的主目录受到写访问保护。是否有一种方法可以允许Python脚本在那里创建目录,就好像它是根用户一样,但不必通过su运行脚本,因为其他用户可能需要运行脚本,但不应该有su访问权限?

这个问题实际上与Python无关。Python脚本只是一个进程,就像任何其他进程一样,需要有正确的权限才能执行操作。通常的方法是创建一个组,并将该组的父目录设置为g+ws。然后将适当的用户作为补充组添加到该组。

很遗憾没有。在*nix环境中,进程的权限总是小于或等于触发它的人的权限。这实际上是有意义的——允许进程超出用户自己的能力是一个巨大的安全风险。

这将需要访问该目录的人——通过他们的一个组或通过sudo。无论哪种方式,它都需要在运行脚本的每台机器上进行人工交互。

就最简单的方法而言,您将需要具有该权限的人将其授予另一个用户,或者直接使用sudo

您可以为该任务添加一个用户,然后赋予该用户对您希望在其中创建子目录的目录的权限,并以该用户的身份执行脚本。

可能有更简单的解决方案,但这是我第一眼想到的

您可以创建一个单独的命令来创建目录,并将其设置为setuid root(或者,更安全的是,设置为父目录的所有者的setuid或setgid)。确保命令不能做任何你想让它做的事情(例如,不要让它把参数传递给system())。然后从Python脚本调用该命令。

当然,这也将使任何其他具有新命令执行权限的进程能够创建子目录。

您可以将Python脚本标记为setuid,这将使它以root身份运行,而不管哪个用户运行它。但请注意,这可能是一个主要的安全风险,因为如果用户找到一种方法让脚本做一些它不打算做的事情,那么他们可能会对root权限造成危害。如果让脚本设置为setuid,请确保它非常简单,并且只做一件事,并使用大量的错误检查来防止意外输入。(查阅setuid获取更多信息;您需要使用chmod来标记可执行文件的setuid位。)

通常更好的解决方案是在您想要创建新目录的目录上赋予一个组权限,然后为运行脚本的用户添加该组。

您也可以通过将脚本设置为setuid来折衷这两种解决方案,但是在脚本开始时让它使用其root权限来承担另一个用户的身份。然后,使用其他用户的特权创建目录,您已经向其授予了适当的权限。通过这种方式,您仍然以用户没有直接执行操作的权限(因此他们必须使用脚本)的方式执行操作,但是您可以最大限度地降低他们可能利用您的脚本执行您没有预料到的各种其他操作的风险。

我在这里找到了一篇关于编写setuid程序的不错的文章:

http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.124.384

相关内容

最新更新