我试图创建一个python shell脚本来在Ubuntu Linux中创建许多目录。我正在尝试创建目录的主目录受到写访问的保护。有没有办法允许Python脚本允许在那里创建目录,就好像它是根用户一样,但不必通过su运行脚本,因为其他用户可能需要运行脚本,但不应该有su访问权限?如何允许Python脚本在受保护的目录中访问mkdir而不在Linux中进行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
- 1. Python中的“受保护”访问 - 如何?
- 2. 允许PHP脚本在受保护的目录中
- 3. 如何允许Facebook访问受保护的内容
- 4. C++:允许访问受保护的类的成员,而不是私人成员
- 5. 密码保护,只允许一个IP地址访问目录?
- 6. 从python脚本访问受密码保护的url
- 7. symfony2:允许cronjob访问fosuserbundle受保护的控制器动作
- 8. 允许php文件访问受.htpasswd保护的文件夹?
- 9. 允许PHP文件访问受保护的文件夹?
- 10. 如何保护从php访问目录?
- 11. 受保护的访问
- 12. C++受保护的访问
- 13. mod_rewrite不允许访问现有目录
- 14. 允许前端用户访问受保护文件
- 15. 如何访问受保护的成员
- 16. 访问受保护的变量在googletest
- 17. 如何在URL中允许/ X /而不是?ID = X访问?
- 18. 不能访问受保护的特性
- 19. 如何在Debian Linux中允许用户www-data访问i2c?
- 20. 允许在目录中访问文件的安全字符
- 21. IP允许子目录访问NGINX
- 22. .htaccess允许脚本在我的域中访问
- 23. 受保护的成员不能在派生类中访问
- 24. 受登录保护的页面不需要登录访问
- 25. 如何阻止脚本访问其在PHP中的父目录?
- 26. 拒绝http访问目录,允许从WordPress插件访问
- 27. 如何通过路径访问而不是仅在当前目录中访问?
- 28. 在Azure中保护Web应用程序不受访问
- 29. 的Web.config窗体身份验证>保护根,但允许访问子目录
- 30. 从网络访问保护目录
相关:http://stackoverflow.com/questions/567542/running-a-command-as-a -Super-用户从-A-Python的脚本 –