python - cifs 共享上的 shutil.copy2 只能作为 root 使用

标签 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

最佳答案

我在上面的评论中对 Debian 和 CentOS 的看法是错误的,Debian 系统驱动器死机了,我在一个企业机器上运行我的工作,其中唯一的可能性是 CentOS 或 SUSE,所以我无法比较/etc/fstab 文件.我试图使用没有 uid=xxxx 的 dir_mode=0777,file_mode=0777 挂载共享。我不明白为什么,但是当您指定 dir_mode 和 file_mode 时,您会获得您期望的权限并且可以手动将文件写入共享但使用 shutil 失败并出现上述错误。如果您删除 dir_mode 和 file_mode 并使用用户 uid=xxxx,其中 xxxx 是任何本地可识别用户(本地、LDAP 或 NIS)的用户 ID,那么权限将按预期手动工作(cp 或 touch 命令等),也可以通过 python 和 shutil。当我第一次设置 fstab 文件时,我可能遇到了与 Debian 相同的问题,这就是为什么我有一个小铃铛告诉我尝试 uid,没有别的。奇怪的是,据我所知,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

关于python - cifs 共享上的 shutil.copy2 只能作为 root 使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35677133/

相关文章:

python - Selenium-ChromeDriver SSL 错误/握手失败

python - 如何使用 Python 实现用户身份验证和 session

c - 如何在不阻塞的情况下同步线程?

c++ - 在 C++ 中使用 system();不起作用

c++ - 如何使用C读取NTFS文件系统的图元文件

windows - 有没有办法从 NTFS 卷的 MFT 获取文件名/位置信息?

python - 导入错误: No module named <something>

python - 由于某些事件,例如,控制台程序是否有任何方法可以改变它们的执行方式按键或代码中的某些事件?

linux - Linux 镜像的版本控制/配置管理

c++ - Windows 获取卷上所有文件的大小列表