Python 强制移动(未复制)的文件继承同一文件系统上父文件夹的权限
我希望在同一个文件系统中从一个共享目录(“源”)到一个处理目录(“目标”)并最终到存储,能够Python 强制移动(未复制)的文件继承同一文件系统上父文件夹的权限,python,bash,permissions,chmod,Python,Bash,Permissions,Chmod,我希望在同一个文件系统中从一个共享目录(“源”)到一个处理目录(“目标”)并最终到存储,能够mv非常大(10s GB到1TB)的视频文件(以及成批的视频文件)。这些文件来自我们网络上的各种来源,但通常是执行任务的用户(www-data)不会自动拥有对这些文件的写入权限 源目录和目标目录都在RAID上,我正在运行Ubuntu 16.04,将来可能会在Mac上运行 我(在Ubuntu上)有: 设置源目录和目标目录的ACL,使新文件获得777权限,并将所有者/组设置为www-data 设置mask以
mv
非常大(10s GB到1TB)的视频文件(以及成批的视频文件)。这些文件来自我们网络上的各种来源,但通常是执行任务的用户(www-data
)不会自动拥有对这些文件的写入权限
源目录和目标目录都在RAID上,我正在运行Ubuntu 16.04,将来可能会在Mac上运行
我(在Ubuntu上)有:
- 设置源目录和目标目录的ACL,使新文件获得777权限,并将所有者/组设置为
李>www-data
- 设置
以对创建的任何文件授予mask
rwx
chown
源和目标到chgrp
www-data
- 我可以使用
cp--no preserve=all
- 我可以使用rsync[…]chmod=ugo+rwx[…]
- 每次我有东西需要转移时,我都可以
sudo chmod
www-data
user)后面mv
似乎无法在移动文件时更改文件的权限(我知道为什么您希望将其作为默认行为),但是否有其他方法需要我探索
webapp是python(使用Flask)的,是否有一些python方法我可能没有见过(os.chmod()
get permission denied)
谢谢
编辑:
下面是源目录上的getfacl
:
# file: raid_share/
# owner: root
# group: www-data
# flags: ss-
user::rwx
group::rwx
mask::rwx
other::rwx
default:user::rwx
default:user:myuser:rwx
default:group::rwx
default:group:www-data:rwx
default:mask::rwx
default:other::rwx
# file: test_05034/
# owner: myuser
# group: www-data
# flags: -s-
user::rwx
user:myuser:rwx #effective:r-x
group::rwx #effective:r-x
group:www-data:rwx #effective:r-x
mask::r-x
other::r-x
default:user::rwx
default:user:myuser:rwx
default:group::rwx
default:group:www-data:rwx
default:mask::rwx
default:other::rwx
以下是由SFTP(用户将文件发布到服务器的合理方式)发送到服务器源目录的目录上的getfacl
:
# file: raid_share/
# owner: root
# group: www-data
# flags: ss-
user::rwx
group::rwx
mask::rwx
other::rwx
default:user::rwx
default:user:myuser:rwx
default:group::rwx
default:group:www-data:rwx
default:mask::rwx
default:other::rwx
# file: test_05034/
# owner: myuser
# group: www-data
# flags: -s-
user::rwx
user:myuser:rwx #effective:r-x
group::rwx #effective:r-x
group:www-data:rwx #effective:r-x
mask::r-x
other::r-x
default:user::rwx
default:user:myuser:rwx
default:group::rwx
default:group:www-data:rwx
default:mask::rwx
default:other::rwx
和getfacl
在该目录中的文件上:
# file: test_05034_r1.mov
# owner: myuser
# group: www-data
user::rw-
user:myuser:rwx #effective:rw-
group::rwx #effective:rw-
group:www-data:rwx #effective:rw-
mask::rw-
other::rw-
我的大脑快融化了 如果我正确理解了您的问题和详细信息,那么当您将它们直接移动到目标时,您似乎真的希望确保它们具有写访问权限 假设这是正确的,而不仅仅是移动文件,移动和设置可写如何?比如:
$ chmod 664 "$file"
$ mv "$file" new folder/.
那么ACL方法有什么问题呢?如果设置正确,即使使用
mv
也应该可以。@l'l我在mv
上看到的所有内容都表明它将保留源文件权限,而不考虑任何ACL条目。那不是真的吗?我当然不能让它采用目的地掩码
或其他ACL设置。也许可以查看一下,这可能会提供一些有用的信息。我看到了,但我不确定它是否适用,我必须更仔细地查看它。它似乎与在目录中创建而不是移动的文件有关。我用各种文件/dir的getfacl
输出更新了这个问题。谢谢先更改文件的权限,然后修改它们,怎么样?从您的getfacls输出来看,问题似乎在于它们只是带有owner/group/other的read和execute权限,而您确实需要读写。是这样吗?。。。是的,但是www-data
用户不能只对其没有写访问权限的文件执行chmod
。我真正关心的是www-data
用户或组在文件复制(或FTPed)到服务器时具有写访问权限(因为在我的脚本中,稍后他们将对所有内容执行chmod 664)。任何不存储我的脚本根密码就可以到达的东西都可以。@camposquinn您所有的文件都是通过SFTP来的,还是仅仅通过FTP、http等?也就是说,是什么在处理那个片段呢?www数据是运行脚本的用户吗?也就是说,试图进行移动?文件传输可能是通过SFTP进行的。我正在考虑放弃它,转而使用一个rsync
守护进程,它可以在传输过程中设置权限:rsync--chmod=ugo+rw[etc]
。这就是说,能够mv
服务器上已有的文件,并让它们根据ACL规则继承权限将是理想的。。。。是的www-data
正在运行脚本。