我正在处理一项任务,如果用户的主目录属于某个组,则应将其更新为某个值。所以,假设用户被添加到某个组X,现在他/她的主目录应该是/ home / X.我应该把它放在crontab上工作,我的问题是:
这是一种更安全的方法吗?或者我是否应该总是喜欢在shellcript中编写这种任务?我仍然不清楚我是否总能使用python来替换shell,因为处理它更简单。
如果某人有与使用python over shell的专业人士的链接,并且在生产群集中真正推荐的时候,我会非常感谢。
答案 0 :(得分:0)
与其他一些popen函数不同,这种实现永远不会 隐式调用系统shell。这意味着所有角色, 包括shell元字符,可以安全地传递给child 流程。如果显式调用shell,则通过shell = True,它是 应用程序有责任确保所有空白和 适当引用元字符以避免壳注入 漏洞。
使用shell = True时,可以使用shlex.quote()函数 正确地转义字符串中的空格和shell元字符 将用于构造shell命令。
是否需要使用shell取决于您如何调用它。来自the subprocess popen info:
所有调用都需要args,并且应该是字符串或序列 程序参数。通常提供一系列论证 首选,因为它允许模块处理任何所需的 转义和引用参数(例如,允许文件中的空格 名)。如果传递单个字符串,则任何一个shell都必须为True(请参阅 或者字符串必须简单地命名要执行的程序 没有指定任何参数。
因此,如果您可以使用元素列表调用子进程,而不是构建字符串,并且在python中比在shell脚本中更容易实现,那么它应该不是问题。
很抱歉这些链接是不同版本的python,它看起来更清晰,但是他们说了类似的东西,所以请检查你的python版本是否正确。