Jan*_*rgs 6 linux windows permissions active-directory likewise-open
请参阅下面的编辑,因为事实证明问题出在 uid/gid 到 sid 的映射上,并显示了一个有助于更快理解问题的解决方法。
我们有一台 Ubuntu 11.04 服务器机器(我们称之为数据),使用由likewise-open提供的工具加入了 Windows 域 到目前为止一切顺利,因为我能够:
因此,计算机本身了解我属于哪些域组并可以正确处理权限。
但问题是当我想从 samba 共享访问文件时。Windows 似乎不明白我们在谈论相同的“域管理员”或任何其他域用户/组。
主文件夹已启用 acl
我在 smb.conf 中的分享:
[home]
path = /home/local/MYDOMAIN
browsable = yes
guest ok = no
read only = no
writeable = yes
valid users = MYDOMAIN\Administrator, @MYDOMAIN\"Domain Users", @MYDOMAIN\"Domain Admins"
write list = @MYDOMAIN\"Domain Users", @MYDOMAIN\"Domain Admins"
nt acl support = yes
create mask = 700
directory mask = 700
hide dot files = yes
Run Code Online (Sandbox Code Playgroud)
到目前为止一切顺利,鉴于该文件夹为“其他人”设置了读取/执行权限位,我可以访问该共享
因此,让我们尝试使用域权限集访问 test_directory。我删除了任何 unix 权限:
janis.veinbergs@data:/home/local/MYDOMAIN$ whoami
janis.veinbergs
janis.veinbergs@data:/home/local/MYDOMAIN$ id janis.veinbergs
...1319633408(domain^admins)...
janis.veinbergs@data:/home/local/MYDOMAIN$ cd /home/local/MYDOMAIN
janis.veinbergs@data:/home/local/MYDOMAIN$ sudo chown root:root ./test_directory/
janis.veinbergs@data:/home/local/MYDOMAIN$ sudo chmod 700 ./test_directory/
Run Code Online (Sandbox Code Playgroud)
所以在机器上,如果我尝试
ls ./test_directory/
Run Code Online (Sandbox Code Playgroud)
显然,我得到
ls: cannot open directory ./test_directory/: Permission denied
Run Code Online (Sandbox Code Playgroud)
所以我为“域管理员”添加了所有权限。(我可以跳过 MYDOMAIN\ 事情,因为 MYDOMAIN 是机器的默认域)
$ sudo setfacl -m g:MYDOMAIN\\"Domain Admins":rwx ./test_directory/
Run Code Online (Sandbox Code Playgroud)
我可以在目录中做事
$ echo "yay" >> ./test_directory/test.txt
$ ls ./test_directory/
test.txt
Run Code Online (Sandbox Code Playgroud)
到目前为止一切顺利,数据可以理解域组。
但是,如果我尝试在Windows 机器上访问该共享(来自 powershell):
PS> whoami
mydomain\janis.veinbergs
PS> gci \\data\home\test_directory
Get-ChildItem : Access to the path '\\data\home\test_directory' is denied.
Run Code Online (Sandbox Code Playgroud)
现在,根据数据,我将为其他人添加权限,以便我可以从 Windows 访问该文件夹:
$ sudo chmod o+rx ./test_directory/
Run Code Online (Sandbox Code Playgroud)
现在,从 Windows 中,我可以看到文件:
PS> gci \\data\home\test_directory
Directory: \\data\home\test_directory
Mode LastWriteTime Length Name
---- ------------- ------ ----
----- 2012.02.06. 14:56 4 test.txt
Run Code Online (Sandbox Code Playgroud)
现在我可以在属性窗口中查看权限(本地化,但你可以理解)

我想知道为什么它显示 Unix Group\domain^admins 而不是 MYDOMAIN\domain^admins ?我在这里缺少什么以及如何使其工作?
我找到了一种解决方法和可能的原因,但不知道如何解决 事实证明 id 之间发生了一些错误的映射。
如果我使用 MYDOMAIN\Domain Admins 组的 wbinfo 查找 sid 到 gid 映射,我发现映射的 unix gid 是 10010。如果我使用 gid 设置权限,而不是名称,则权限有效并且 windows 理解它们:
$ sudo setfacl -m g:10010:rwx ./test_directory/
Run Code Online (Sandbox Code Playgroud)
当我以数字形式枚举权限以查看 gid 和 sid 时,我看到当设置像 MYDOMAIN\"Domain Admins" 这样的权限时,它实际上使用了不同的 GID
$ getfacl -n ./test_directory/
# file: test_directory/
# owner: 0
# group: 0
user::rwx
group::r-x
group:10010:rwx <-- this is the actual GID mapping for MYDOMAIN\\"Domain Admins" group (setfacl -m g:10010:rwx) and it works when browsing share with windows
group:1319633408:rwx <-- this entry is when setting permission like setfacl -m g:MYDOMAIN\\"Domain Admins":rwx
mask::rwx
other::---
Run Code Online (Sandbox Code Playgroud)
然后我查看了 smb.conf 中的 idmap 配置:
idmap domains = ALL
idmap config ALL:backend = lwicompat_v4
idmap config ALL:default = yes
idmap config ALL:readonly = yes
idmap uid = 10000-33554431
idmap gid = 10000-33554431
Run Code Online (Sandbox Code Playgroud)
我看到来自 ACL 条目 1319633408 的 gid 没有进入定义的范围。所以我尝试将范围扩展到 10000-3355443100,重新启动 smbd,但它仍然不起作用。
所以现在我有一个解决方法,使用 gid 和 sid 设置权限,但这对用户不友好。我该怎么做才能解决这个问题?
事实证明我仍然需要安装同样的 cifs 支持。
这是执行这些命令的问题:
$ /opt/likewise/bin/samba-interop-install --install
$ service smbd restart
$ service winbind restart
Run Code Online (Sandbox Code Playgroud)
归功于同样的 Open 6 和 Samba - 更好的开源文件服务器
现在,当将 SID 映射到 GID 时,我会得到同样使用的正确 GID,而不是短的 10010:
sudo wbinfo -n "Domain Admins"
<i get long SID: S-...-512>
wbinfo -Y S-...-512
1319633408
Run Code Online (Sandbox Code Playgroud)