cifs上的shutil.copy2只能以root身份运行

时间:2016-02-28 00:14:04

标签: python linux ntfs

- 当使用python 2.7 shutil以root身份从linux写入cifs共享时,没有问题

- 当使用cp作为普通用户手动编写文件时,没有问题

- 当使用python shutil.copy或copy2作为普通用户时:

File "/usr/lib64/python2.7/shutil.py", line 120, in copy
copymode(src, dst)
File "/usr/lib64/python2.7/shutil.py", line 91, in copymode
os.chmod(dst, mode)
OSError: [Errno 1] Operation not permitted: '/mnt/RW_H-drive/file.csv

1 个答案:

答案 0 :(得分:1)

在上面的评论中,Debian vs CentOS我错了,Debian系统驱动器死了,我在一个企业机箱上运行我的工作,唯一可能的是CentOS或SUSE,所以我无法比较/ etc / fstab文件。我试图使用dir_mode = 0777,file_mode = 0777而不使用uid = xxxx来挂载共享。我不明白为什么,但是当你指定dir_mode和file_mode时,你获得了你期望的权限,并且可以手动将文件写入共享,但使用shutil失败并出现上述错误。如果删除dir_mode和file_mode并使用用户uid = xxxx,其中xxxx是任何本地识别用户(本地,LDAP或NIS)的用户ID,则权限按预期手动(cp或触摸命令等)以及通过python与shutil一起工作。当我第一次设置fstab文件时,我可能和Debian有同样的问题,这就是为什么我有这个小铃铛告诉我尝试uid,没有别的。 Bizare的事情是fstab中的用户的UID和cifs用户是不相关的,据我所知,他们甚至不必具有相同的名称。当您以root用户身份更改共享上的文件时,两个挂载行也会起作用。

示例:

//nasx/sharex/ /mnt/RW_H-drive/   cifs    credentials=/root/smbcredentials,_netdev,uid=4321       0 0

而不是:

//nasx/sharex/ /mnt/RW_H-drive/   cifs    credentials=/root/smbcredentials,_netdev,file_mode=0777,dir_mode=0777       0 0