这就是多用户系统的问题,尤其是如果您拥有多个系统。;)没有真正好的方法来做您想要的事情。我想到的方法是
- 在使用外部驱动器的每台计算机上为您的帐户使用相同的UID(实际上不可行,因为并非所有的计算机都在您的控制之下)
- 使用不知道所有者/组概念的文件系统(想到的是FAT或NTFS,但是……aaah,不)
最有效的方法将是恢复常规做法。在大多数(至少)Linux系统上,存在一些通常具有通用GID的组。例如users
,它将100
在大多数Linux发行版中具有GID 。如果您可以设法在该组中拥有各自的用户帐户,则可以
- 使驱动器上的所有文件和目录归该组所有
- 以某种方式设法对那些文件和目录具有适当的组权限
- 设法以适当的组所有权方式创建新文件。权限。
第一点和第二点很容易实现(chown
,chmod
)。第三点有点棘手。
“组所有权”部分相对容易:您可以在驱动器上的所有目录上设置SGID位。应用于目录的SGID位告诉内核以BSDish方式工作:BSD使得在特定目录组下创建的每个文件/目录都归拥有该文件/目录的进程的主要组所拥有(而不是像Linux那样)。由父目录的所有者。
权限位有点难。新创建的文件/目录的权限(除其他因素外)受的影响umask
,该位掩码指示未明确声明未设置的位。umask
例如022
,一个通用值是,表示通常不应该设置»group«和»others«的写位。您可以将更umask
改为002
,告诉您不希望清除该组的写许可权,但不利之处是您无法基于目录设置此值,并且通常不希望拥有该许可权。您为创建的每个文件设置的主要组。
可以使用ACL解决此问题:在ACL中,您可以设置mask
和default
权限集,该权限集适用于使用此ACL集在目录内创建的所有文件和目录。因此,您的问题的一种可能的解决方案是
- 确保您是要在其上使用外部驱动器的所有系统上的公共组的成员
- 使驱动器上的所有文件和目录归该组所有,并在所有目录上将SGID位置1
- 更改所有目录的ACL以包括掩码和默认权限,这些权限和默认权限告诉内核创建具有该组写入权限的每个新文件/目录。
请参阅setfacl(1)
和,acl(5)
以获取更多详细信息。