在 Windows 10 笔记本电脑上,我有一个管理员帐户Admin
、一个非管理员帐户User.Name
和一个默认Public
帐户。
从Admin
或User.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.Name
或Admin
,如果我在
/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.zip
Admin
zip
/c/Users/Public/tmp/Test.zip
User.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
.确认这一推理的正确性将不胜感激(如果有人希望将其作为答案发布,则将构成答案)。