3

是否可以在不存储在我的脚本内存中的情况下请求 root pw 并以 root 身份运行一些 os.* 命令?

我的剧本

  1. 扫描一些文件夹和文件以检查它是否可以完成这项工作
  2. 在 /etc/... 中进行一些更改
  3. 创建应该由运行脚本的用户拥有的文件夹和文件

(1) 可以作为普通用户完成。我可以通过 sudo 脚本来执行 (2),但是 (3) 中的文件夹和文件将是 root 的。

问题是我使用了很多 os.makedirs、os.symlink 等,这阻止了我让它可由普通用户运行。

Tanks 2 所有的建议

到目前为止的解决方案是:

# do all in sudo
os.chown(folder, int(os.getenv('SUDO_UID')), int(os.getenv('SUDO_GID')))

感谢gnibbler的提示。

4

5 回答 5

2

yourscript.py

run_part_1()
subprocess.call(['sudo', sys.executable, 'part2.py'])
run_part_3()

part2.py

run_part_2()
于 2009-10-28T10:29:24.180 回答
2

也许你可以把 (2) 放在一个单独的脚本中,比如说,然后在你用?script2.py调用的主脚本中。sudo script2.pypopen

这样,只有 (2) 将作为 root 执行。

于 2009-10-28T10:02:39.987 回答
1

gnibbler暗示os.chown. 然后问题是要知道 sudo 背后的用户 ID。该信息存储在环境变量中SUDO_*

os.chown, (some_path, int(os.getenv('SUDO_UID')), int(os.getenv('SUDO_GID')))

将代码拆分为 3 个文件可能是一种解决方案,但代码已经混合,因此不适合。

于 2009-11-06T07:40:53.830 回答
1

你会考虑使用Linux PAM吗?您可能想查看Linux-PAM 应用程序开发人员指南Python API for PAM

于 2009-10-28T10:03:07.363 回答
1

您应该以 root 身份执行您的脚本,并使用 os.chmod 和 os.chown 对 (3) 的权限进行适当的更改。

您可以通过 sudo 执行另一个具有 root 权限的脚本,但这也需要将您的用户密码存储在脚本中以传递给 sudo,从安全角度来看,这是一个糟糕的主意。

因此,您的问题是关于获得某些文件/文件夹的正确权限。首先,传入或硬编码普通用户的 UID/用户名。然后使用 os.chown 更改所有者,使用 os.chmod 更改权限。您应该查看 os 包中的其他 chown/chmod 方法:http: //docs.python.org/library/os.html

最后一点:您不必担心符号链接的权限。他们拥有他们所指向的权限。

于 2009-10-28T13:43:48.310 回答