故障排除

故障排除

在 Windows 10 笔记本电脑上,我有一个管理员帐户Admin、一个非管理员帐户User.Name和一个默认Public 帐户。

AdminUser.Name帐户中,在~/ 树中创建的文件具有读/写权限用户但不是团体。该命令ls -l显示该组为None。在以下示例中,命令的发出顺序与此处所示的顺序不同,因此时间戳的信息量不大。

~/tmp帐户示例User.Name

User.Name@Laptop-Hostname ~/tmp
$ echo "Hello" > Test.txt

User.Name@Laptop-Hostname ~/tmp
$ zip Test.zip Test.txt
  adding: Test.txt (stored 0%)

User.Name@Laptop-Hostname ~/tmp
$ ls -l Test.{txt,zip}
-rw------- 1 User.Name None   6 2023-08-11 00:42 Test.txt
-rw------- 1 User.Name None 172 2023-08-11 01:05 Test.zip

~/tmp帐户示例Admin

Admin@Laptop-Hostname ~/tmp
$ echo "Hello" > Test.txt

Admin@Laptop-Hostname ~/tmp
$ zip Test.zip Test.txt
  adding: Test.txt (stored 0%)

Admin@Laptop-Hostname ~/tmp
$ ls -l Test.{txt,zip}
-rw------- 1 Admin None   6 2023-08-11 00:44 Test.txt
-rw------- 1 Admin None 172 2023-08-11 01:02 Test.zip

但是,从帐户User.NameAdmin,如果我在 /c/Users/Public/树中创建文件,则用户该组有读/写权限。

~/tmp帐户示例User.Name

User.Name@Laptop-Hostname ~/tmp
$echo "Hello" > /c/Users/Public/tmp/TestFromUser.Name.txt

User.Name@Laptop-Hostname ~/tmp
$zip /c/Users/Public/tmp/TestFromUser.Name.zip Test.txt
  adding: Test.txt (stored 0%)

User.Name@Laptop-Hostname ~/tmp
$ls -l /c/Users/Public/tmp/TestFromUser.Name.{txt,zip}
-rw-rw----+ 1 User.Name None   6 2023-08-11 00:52 /c/Users/Public/tmp/TestFromUser.Name.txt
-rw-rw----+ 1 User.Name None 172 2023-08-11 00:53 /c/Users/Public/tmp/TestFromUser.Name.zip

~/tmp帐户示例Admin

Admin@Laptop-Hostname ~/tmp
$ echo "Hello" > /c/Users/Public/tmp/TestFromAdmin.txt

Admin@Laptop-Hostname ~/tmp
$ zip /c/Users/Public/tmp/TestFromAdmin.zip Test.txt
  adding: Test.txt (stored 0%)

Admin@Laptop-Hostname ~/tmp
$ ls -l /c/Users/Public/tmp/TestFromAdmin.{txt,zip}
-rw-rw----+ 1 Admin None   6 2023-08-11 00:47 /c/Users/Public/tmp/TestFromAdmin.txt
-rw-rw----+ 1 Admin None 172 2023-08-11 00:47 /c/Users/Public/tmp/TestFromAdmin.zip

/c/Users/Public/tmp/Test.zip我通过从帐户创建 zip 文件来确认更开放的权限 User.Name。随后我可以使用 Cygwin 的命令从帐户zip添加文件 。此外,我随后可以使用 Cygwin 的命令从帐户添加文件 。/c/Users/Public/tmp/Test.zipAdminzip/c/Users/Public/tmp/Test.zipUser.Name

这是我发现最方便的行为,但由于我没有使用 Windows 资源管理器,我想知道Cygwin 如何知道使 /c/User/Public 文件树中的文件可供用户和组读写? 我应该关注文档中的哪些位置来理解这一点?

我浏览了有关的文档POSIX 帐户、权​​限和安全性,但坦率地说,其中大部分内容都深入到了我没有基础去理解的很多细节。我想知道是否可能有更简单的高级行为描述,例如“Cygwin 在某个级别与 Windows 交互,以继承跨帐户创建和修改文件的安全行为”。设计行为的简洁表达将帮助用户了解不同跨账户操作下的期望。

故障排除

为了使故障排除易于管理,我注意到,差异似乎在于用户自己的文件空间与 Public的文件空间中写入的文件之间。因此,我将User.Name写入 的 User.Name文件空间与User.Name写入 的Public文件空间进行比较,即,我省去了与 的比较Admin

基于G-Man的建议,我测试了不同的权限是否是由于在以 为根的 Cygwin 文件树/home而不是以 为根的更大的 Windows 文件树 中写入文件所致/c/Users。它似乎是不相关的,这证实了不同的权限是由于写入帐户Public 而不是写入/c/Users树与/home 树而造成的。

User.Name@Laptop-Hostname ~/tmp
$ # Permissions of one's Cygwin home directory.
$ # Not sure how relevant this is.
$ ls -ld ~
drwxr-xr-x 1 User.Name None 0 Aug 12 13:13 /home/User.Name

User.Name@Laptop-Hostname ~/tmp
$ # Permissions of one's own current directory.
$ # Not sure how relevant this is.
$ ls -ld ~/tmp
drwx------ 1 User.Name None 0 Aug 12 02:20 /home/User.Name/tmp

User.Name@Laptop-Hostname ~/tmp
$ # Permissions of file created in one's own Windows file tree.
$ # Only "User" has read/write access.
$ ls > /c/Users/User.Name/Documents/List.txt
$ ls -l /c/Users/User.Name/Documents/List.txt
-rw-------+ 1 User.Name None 414 2023-08-12 13:19 /c/Users/User.Name/Documents/List.txt

User.Name@Laptop-Hostname ~/tmp
$ # Permissions of file created in Public's Windows file tree
$ # Both "User" and "Group" have read/write access.
$ ls > /c/Users/Public/Documents/List.txt
$ ls -l /c/Users/Public/Documents/List.txt
-rw-rw----+ 1 User.Name None 414 2023-08-12 13:20 /c/Users/Public/Documents/List.txt

还建议我应用于包含getfacl正在比较的文件的文件夹。以下是getfacl用户的 Cygwin“tmp”文件夹、用户的 Windows“文档”文件夹和 Public的“文档”文件夹的结果:

User.Name@Laptop-Hostname ~/tmp
$ # FACL for user's Cygwin "tmp" folder
$ getfacl ~/tmp
# file: /home/User.Name/tmp
# owner: User.Name
# group: None
user::rwx
group::---
other::---
default:user::rwx
default:group::r-x
default:other::r-x

User.Name@Laptop-Hostname ~/tmp
$ # FACL for user's Windows "Documents" folder
$ getfacl /c/Users/User.Name/Documents/
# file: /c/Users/User.Name/Documents/
# owner: User.Name
# group: None
user::rwx
group::---
group:SYSTEM:rwx        #effective:---
group:Administrators:rwx        #effective:---
mask::---
other::---
default:user::rwx
default:group::---
default:group:SYSTEM:rwx        #effective:---
default:group:Administrators:rwx        #effective:---
default:mask::---
default:other::---

User.Name@Laptop-Hostname ~/tmp
$ # FACL for Public's Windows "Documents" folder
$ getfacl /c/Users/Public/Documents/
# file: /c/Users/Public/Documents/
# owner: SYSTEM
# group: SYSTEM
user::rwx
group::---
group:BATCH:rwx
group:INTERACTIVE:rwx
group:SERVICE:rwx
group:Administrators:rwx
mask::rwx
other::---
default:user::rwx
default:user:SYSTEM:rwx
default:group::---
default:group:BATCH:rwx
default:group:INTERACTIVE:rwx
default:group:SERVICE:rwx
default:group:Administrators:rwx
default:mask::rwx
default:other::---

我阅读了有关 FACL 的内容 这里。我注意到“命名用户”和“命名组”两个都属于“团体班”。这有效的权限是具有 3 位“掩码”的指定用户/组权限位的最小值(按位 AND 运算)。这证实了上述的存在#effective:---。根据文本,组权限ls -l面具,这可能比任何特定的命名用户/组更宽松或更宽松。

与直觉相反的是,拥有组的权限是不是与掩码进行“与”运算(如果我正确理解了文本)。

我在解释文本时做了两个假设:(1)“拥有”组是所有者用户所属的组,(2)该组 None对应于以group::.

上面第一个getfacl是针对/home/User.Name/tmp.这些default 条目解释了为什么新创建的文件具有用户读/写权限,但是不是为什么新文件缺乏执行权限( x)。此外,这些default条目与新文件缺乏组/其他读取和执行权限的事实不一致。

下一个getfacl是为了/c/Users/User.Name/Documents/.默认---条目解释为什么组/其他没有新创建的文件的权限。

第三个也是最后一个getfacl是为了/c/Users/Public/Documents/。该default:user::rwx条目确实解释了为什么诸如此类的用户对 由以下 User.Name命令创建的文件具有读/写访问权限:User.Name假设指user的是文件而不是目录的所有者/创建者。default:group:Administrators:rwx条目还解释了为什么该Admin帐户可以添加到由User.Name.确认这一推理的正确性将不胜感激(如果有人希望将其作为答案发布,则将构成答案)。

相关内容