【问题标题】:Getting admin password while copy file using shutil.copy?使用shutil.copy复制文件时获取管理员密码?
【发布时间】:2011-04-18 04:38:33
【问题描述】:

我正在使用 python 中的 shutil.copy 来复制文件列表。但是当我将文件复制到 /usr/lib/ 位置时,我的权限被拒绝,因为我需要成为管理员才能做到这一点。

那么我怎样才能复制具有管理员权限的文件或 我如何从用户那里获取管理员密码来复制文件?

想法将不胜感激

【问题讨论】:

  • 不属于超级用户;这是用 Python(脚本语言)编写复制命令的方法。

标签: python file-permissions


【解决方案1】:

让用户以管理员身份运行脚本:

sudo python-script.py

Unix 已经有了身份验证和密码管理。你不需要自己写,如果你尝试肯定会出现安全漏洞。

【讨论】:

  • 这应该是公认的答案。
【解决方案2】:

补充一下 katrielalex 所说的话:如果需要,您可以通过 sudo 使脚本自行运行。这是一个概念证明:

import sys, os, subprocess

def do_root_stuff():
    print('Trying to list /root:')
    for filename in os.listdir('/root'):
        print(filename)

if __name__ == '__main__':
    print('Running as UID %d:' % os.geteuid())

    if os.geteuid() == 0:
        do_root_stuff()
    else:
        subprocess.check_call(['sudo', sys.executable] + sys.argv)

【讨论】:

    【解决方案3】:

    以允许在此处编写的用户启动您的程序。例如先登录到 root (su) 或使用 sudo myscript.py 运行脚本。

    【讨论】:

      【解决方案4】:

      我来找她是为了寻找另一种做事方式。 我使用的一个快速而肮脏的 hack,因为我不希望我的整个脚本以 root 身份运行:

      try:
          shutil.os.remove(file1)
      except PermissionError:
          shutil.os.system('sudo chown $USER "{}"'.format(file1))  
          # try again
          try:
              shutil.os.remove(file1)
          except:
              print('Giving up on'.format(file1))
      

      这可能不是完全容易出错,但它们适用于我一起破解的快速脚本

      糟糕,我看到你在请求复制权限。 但是你可以应用相同的逻辑

      try:
         shutil.os.copy(file1,destination)
      except PermissionError:
         shutil.os.system('sudo cp "{}" "{}"'.format(file1,destination))
      

      【讨论】:

        猜你喜欢
        • 2018-12-26
        • 1970-01-01
        • 2016-05-08
        • 1970-01-01
        • 1970-01-01
        • 2016-12-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多