【问题标题】:Copy restricted files using shutil.copyfile without being root in Python使用 shutil.copyfile 复制受限文件,而无需在 Python 中成为 root
【发布时间】:2012-12-21 17:10:26
【问题描述】:

我的 python 脚本执行的任务之一是提取整个 Linux Root FS tarball,然后将文件从中复制到目标目录。这样做时,如果出现以下特殊受限文件(如 gshadow),我会收到错误消息:

File "script.py", line 553, in copy_rootfs
shutil.copy(sourceFileName,targetFileName)
File "/usr/lib/python2.6/shutil.py", line 88, in copy
copyfile(src, dst)
File "/usr/lib/python2.6/shutil.py", line 52, in copyfile
fsrc = open(src, 'rb')
IOError: [Errno 13] Permission denied: '/home/myuser/temp/home/embeduser/NFS/LinuxFS/etc/gshadow'

从 tarball 中提取的文件 gshadow 的权限如下:

myuser@host temp]$ ls -l home/embeduser/NFS/LinuxFS/etc/gshadow 
---------- 1 myuser myuser 271 Nov  5 08:54 home/embeduser/NFS/LinuxFS/etc/gshadow 

有没有一种方法可以实现这一点,而无需以 root 身份运行我的 python 脚本?

【问题讨论】:

  • 不。不允许任何人读取该文件。
  • @MartijnPieters,不一定——如果权限的设置可以与文件本身的复制分开,则可以在所有复制完成后设置权限。我对shutil 的了解还不够,不知道这是否可能。
  • 发布你的代码,@modest?

标签: python shutil


【解决方案1】:

shutil 无法做到这一点,但想出一些自定义解决方案很容易。诀窍是gshadow 没有权限,但属于本地用户。因此,您可以使用os.chmod() 更改其权限,阅读它,然后(如有必要)将权限更改回来。

【讨论】:

  • 好的,我明白了。 Python中有没有办法检测这些文件?通过名称显式检查特殊文件会非常麻烦。
  • 您对它们调用os.lstat() 并检查您获得的权限是否包含表示“用户可读”的位。
猜你喜欢
  • 2014-07-25
  • 1970-01-01
  • 1970-01-01
  • 2012-08-12
  • 2018-06-08
  • 2016-02-12
  • 2021-12-13
  • 2014-02-16
  • 2013-04-11
相关资源
最近更新 更多