Python 如何以root用户身份执行os.*方法?

Python 如何以root用户身份执行os.*方法?,python,root,sudo,Python,Root,Sudo,是否可以在不存储在脚本内存中的情况下请求root pw,并以root身份运行一些os.*命令 我的剧本 扫描一些文件夹和文件以检查它是否可以完成此任务 在/etc/…中进行一些更改 创建运行脚本的用户应拥有的文件夹和文件 (1) 可以作为普通用户完成。我可以通过执行脚本来执行(2),但是(3)中的文件夹和文件将是root的 问题是我使用了大量的os.makedir、os.symlink等,这使我无法让普通用户运行它 储罐2全部用于建议 目前的解决办法是: # do all in sudo os.

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

我的剧本

  • 扫描一些文件夹和文件以检查它是否可以完成此任务
  • 在/etc/…中进行一些更改
  • 创建运行脚本的用户应拥有的文件夹和文件
  • (1) 可以作为普通用户完成。我可以通过执行脚本来执行(2),但是(3)中的文件夹和文件将是root的

    问题是我使用了大量的os.makedir、os.symlink等,这使我无法让普通用户运行它

    储罐2全部用于建议

    目前的解决办法是:

    # do all in sudo
    os.chown(folder, int(os.getenv('SUDO_UID')), int(os.getenv('SUDO_GID')))
    
    感谢gnibbler的提示。

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


    此方法仅(2)将作为根执行。

    你会考虑使用吗?您可能需要查看和

    yourscript.py

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

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

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

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

    因此,您的问题是如何获得某些文件/文件夹的正确权限。首先,传入或硬编码常规用户的UID/用户名。然后使用os.chown更改所有者,使用os.chmod更改权限。在操作系统软件包中,您还可以查看其他chown/chmod方法:

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

    给出了
    os.chown
    的提示。问题是要知道sudo背后用户的ID。该信息存储在环境变量
    SUDO.*
    中:

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

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

    您必须以root用户身份创建文件夹和文件,然后使用
    os.chown
    将所有权更改为正确的用户!os.chown(path,pwd.getpwnam(os.getenv('SUDO_USER'))[2])如果没有其他方法,我会尝试,但现在(1)和(2)有点混合。有趣的事情,谢谢,但在这种情况下太复杂了,我也很好奇。但无论如何,你可能会记住更复杂的需求。感谢+1。无需硬编码我可以从os.getenv('SUDO_UID')获得什么。