As Good A Place As Any
Tim Thomas's Blog
Solaris CIFS Windows SID 映射初探
本文承接在 Domain 模式下配置 OpenSolaris CIFS 服务器一文。映射共享时,系统询问我在 Workgroup 模式下的用户 ID 和密码..所以,如何处理文件和文件夹所有权和权限呢?
Solaris CIFS 实现包括 ID Mapping Services。这些服务允许您显式地将 Windows Security IDentifiers 映射到所需的 Solaris User ID 和 Group ID,但如果您没有设置显式的映射,则 ID Mapping Service 将为 Windows User 生成 Ephemeral Solaris User ID 和 Group ID。Solaris CIFS Administrators Guide 中讨论了 Identity Mapping 战略。
上一个练习结尾时创建的文件和目录的权限在 Solaris 中列出时如下所示...
root@isv-x4500b # pwd
/tank/cifs1
root@isv-x4500b # ls -l
total 10
d---------+ 2 2147483649 2147483650 2 Apr 8 05:49 user1
----------+ 1 2147483649 2147483650 0 Apr 8 05:57 user1.txt
d---------+ 2 2147483650 2147483650 3 Apr 8 05:50 user2
----------+ 1 2147483650 2147483650 0 Apr 8 05:51 user2.txt
这看起来有一点奇怪,因为 OpenSolaris CIFS 服务使用 ZFS ACL,但它们没有显示在上述列表中。我们可以转储当前的 ID Mapping,如下所示...
root@isv-x4500b # idmap dump
usid:S-1-5-21-500772251-2770406677-2360070262-1125 == uid:2147483650
usid:S-1-5-21-500772251-2770406677-2360070262-1113 == uid:2147483649
gsid:S-1-5-21-500772251-2770406677-2360070262-513 == gid:2147483650
gsid:S-1-5-21-500772251-2770406677-2360070262-512 == gid:2147483651
gsid:S-1-5-11 == gid:2147483652
gsid:S-1-5-2 == gid:2147483653
gsid:S-1-5-32-544 == gid:2147483654
我们可以看到,Windows SIDs 已经映射到 Solaris User 和 Group ID。用户的映射已经动态创建 (Ephemeral ID Mapping);Windows Group SID 映射由系统级交互生成,您可以使用此处的列表将其解码。我们可以看到:
Windows Group SID xxxxxx-513 = Domain Users = Solaris GID 2147483650
Windows Group SID xxxxxx-512 = Domain Admins = Solaris GID 2147483651
Windows Group SID xxxxxx-11 = Authenticated Users = Solaris GID 2147483653
Windows Group SID xxxxxx-2 = Network (Users logged in via the Network) = Solaris GID 2147483651
Windows Group SID xxxxxx-544= Administrators = Solaris GID 2147483654
现在我们可以知道,创建的文件和目录在映射到 Solaris GID 2147483650 时位于 Domain Users 组中。
不久,我将深入探讨所有内容,本文只是初探。
更多信息
OpenSolaris Project:CIFS Server 主页
Open Solaris CIFS Documentation,包括 Solaris CIFS Administrators Guide & Troubleshooting Information
此外,请考虑加入 Open Solaris Storage Discuss Forum
Posted at 09:00AM May 02, 2008 in Storage |
为通过 CIFS 和 NFSv4 客户机访问的 ZFS 配置 OpenSolaris 病毒扫描服务
OpenSolaris 具有对 CIFS 和 NFSv4 客户机访问的文件进行病毒扫描的功能。您可以在 OpenSolaris Project:VSCAN Service 主页中阅读有关项目的内容。扫描模型类似于这篇文章讨论的模型,即将文件发送(使用 ICAP 协议)到运行反病毒软件的外部服务器中进行扫描...NAS 设备的通用模型。
根据此处所述的方式设置了 OpenSolaris CIFS 服务器之后,我将试用这些服务。我在 Sun 的部分工作是使用我们的 NAS 产品验证反病毒软件,所以我体验了这种测试。
与以前一样,我的工作环境是安装了 Solaris Nevada build 86 的 Sun Fire X4500....
root@isv-x4500b # uname -a
SunOS isv-x4500b 5.11 snv_86 i86pc i386 i86pc
大部分我所使用的命令我都会按原样展示..但有时候必须编辑字段。
我在实验室的 Windows 服务器(主机名:scanengine)上安装了 Symantec Scan Engine Version 5.1 的副本,以提供必要的扫描服务。Symantec Scan Engine 使用 ICAP 协议接口作为标准,以便 OpenSolaris VSCAN 服务能够与之通信。
我将 Symantec Scan Engine 配置为 "Scan Only" 模式,这意味着它将通知 VSCAN 服务文件是否被感染..它将不会尝试修复被感染的文件(即不会删除病毒)。VSCAN 服务在收到文件被感染的通知时,将在文件上设置属性以便拒绝访问,即隔离文件。
VSCAN 服务使用 vscanadm 命令进行管理。vscan 服务守护进程 vscand 与扫描引擎交互以扫描文件;通过 ICAP 协议将文件内容发送到扫描引擎。
我想在名为 cifs2 的 CIFS 共享上启用病毒扫描,此共享是对 ZFS 文件系统 tank/cifs2 的共享。过程如下:
1. 启用 VSCAN 服务
root@isv-x4500b # svcadm enable vscan
root@isv-x4500b # svcs vscan
STATE STIME FMRI
online 7:38:08 svc:/system/filesystem/vscan:icap
2. 在 ZFS 文件系统上启用病毒扫描
root@isv-x4500b # zfs set vscan=on tank/cifs2
注意:在接下来的步骤中,您应该用运行反病毒软件的服务器主机名替换 scanengine。
3. 添加扫描引擎
root@isv-x4500b # vscanadm add-engine scanengine
root@isv-x4500b # vscanadm get-engine scanengine
scanengine:enable=on
scanengine:host=scanengine
scanengine:port=1344
scanengine:max-connection=32
注意:端口 1344 是 ICAP 的默认值,可以更改。如果将其更改,您还需要更改反病毒软件所使用的端口。
4. 可选步骤 - 设置要发送进行扫描的最大文件大小
扫描非常大的文件时效率很低。在此,我们将要扫描的最大文件大小设置为 100 MB。如果需要扫描的文件大小为 100MB 以上,则会出现一个选项,可以选择允许访问还是拒绝访问:两种情况下都不会扫描文件。
root@isv-x4500b # vscanadm set -p max-size=100M
root@isv-x4500b # vscanadm set -p max-size-action=deny
root@isv-x4500b # vscanadm show
max-size=100M
max-size-action=deny
types=+*
scanengine:enable=on
scanengine:host=scanengine
scanengine:port=1344
scanengine:max-connection=32
5. 可选步骤 - 修改要扫描的文件类型列表
默认情况下扫描所有文件类型。在此,我们从要扫描的文件类型列表中删除以 jpg 结尾的文件。
root@isv-x4500b # vscanadm set -p types=-jpg,+*
root@isv-x4500b # vscanadm show
max-size=10M
max-size-action=deny
types=-jpg,+*
scanengine:enable=on
scanengine:host=scanengine
scanengine:port=1344
scanengine:max-connection=32
6. 检查扫描是否正常运行
可以从 EICAR 中获得文件以测试病毒扫描程序。这些文件在扫描程序看来很像病毒,但可以安全使用。
我在 Windows 服务器上安装了 cifs2 共享,并在共享上创建了一些文件和文件夹,没有遇到任何问题。然后,我将 EICAR 文件从 Window 服务器未受保护的驱动器拖放到共享中。当我尝试在共享上打开 EICAR 文件时,访问被拒绝。
系统日志中将显示如下消息。
Apr 9 08:13:09 isv-x4500b vscand:[ID 540744 daemon.warning] quarantine /tank/cifs2/eicar.com.txt 11101 - EICAR Test String
回到运行 OpenSolaris 的服务器,我查看文件是否真的进行过扫描,方法如下
root@isv-x4500b # vscanadm stats
scanned=13
infected=6
failed=0
scanengine:errors=0
文件正在扫描,没有任何扫描错误!
最后,我还查看了 Symantec Scan Engine GUI 上的统计数据,也确认了文件正在扫描。注意,从之后的截屏��以看到,下列数字与上述 vscanadm 的输出不匹配。
对受感染文件的访问被拒绝,因为设置了隔离位。可以检查隔离位 q,方法如下...
root@isv-x4500b # ls -/c eicar.com.txt
----------+ 1 2147483649 2147483650 68 Apr 9 08:13 eicar.com.txt
{A------mq-}
更多信息
OpenSolaris Project:VSCAN Service 主页
Posted at 09:00AM Apr 30, 2008 in Storage |
在 Domain 模式下配置 OpenSolaris CIFS Server
最近的博客中,我发表了在 Workgroup 模式下配置 OpenSolaris CIFS Server 的文章。现在,我将介绍在 Active Directory 环境中完成本操作的过程。
与以前一样,我的工作环境是安装了 Solaris Nevada build 86 的 Sun Fire X4500....
root@isv-x4500b # uname -a
SunOS isv-x4500b 5.11 snv_86 i86pc i386 i86pc
大部分我所使用的命令和系统实际文件我都会按原样展示..但有时候必须编辑字段。
1. 将 OpenSolaris 服务器配置为 Active Directory Domain Server 的 DNS 客户机
要执行此操作,请创建/修改文件 /etc/resolv.conf,以对 Active Directory Domain Controller 执行查询。
root@isv-x4500b # cat /etc/resolv.conf
domain sspg.central.sun.com
nameserver 192.168.2.1
search sspg.central.sun.com central.sun.com
现在,设置 /etc/nsswitch.conf,以便通过 DNS 解析该主机。可以修改现有的 /etc/nsswitch.conf 文件,或者直接将 /etc/nsswitch.dns 复制到 /etc/nsswitch.conf 中。
要检查 DNS 是否可以正常运行,可以使用 nslookup 查询已知主机,运行一些简单的测试。
2. 设置 Kerberos
编辑文件 /etc/krb5/krb5.conf 并设置如下字段,请根据您的环境自行调整。下面只是 /etc/krb5/krb5.conf 文件的一部分。手册在第 42 和 43 页中详细介绍了此步骤。
<--snip-->
[libdefaults]
default_realm = SSPG.CENTRAL.SUN.COM
[realms]
SSPG.CENTRAL.SUN.COM = {
kdc = domaincontroller.sspg.central.sun.com
admin_server = domaincontroller.sspg.central.sun.com
kpasswd_server = domaincontroller.sspg.central.sun.com
kpasswd_protocol = SET_CHANGE
}
[domain_realm]
.sspg.central.sun.com = SSPG.CENTRAL.SUN.COM
<--snip-->
3. 同步 Server 与 Domain Controller 的时钟
这一步很容易漏掉..您以后可能会由于 Kerberos 初始化问题而无法连接域.....我的亲身经历!!!
手册在第 43 页描述了同步时钟的各种方式....我使用的方式如下:
root@isv-x4500b # ntpdate domaincontroller.sspg.central.sun.com
4. 启动 CIFS 服务
root@isv-x4500b # svcadm enable -r smb/server
svcadm:svc:/milestone/network depends on svc:/network/physical, which has multiple instances.
可以忽略该消息。
5. 连接 Domain
要完成此步骤,您需要知道具有域管理员权限的 Active Directory 用户(本例中为 aduser)的用户名和密码。
这部分流程曾一度让我困惑,而手册在第 43 页中介绍了一些使用 sharectl 的明显多余的步骤,而且这种方式也是无效的..以下方式可以成功:
root@isv-x4500b # smbadm join -u aduser sspg.central.sun.com
Enter domain password:
Joining 'sspg.central.sun.com' ... this may take a minute ...
Successfully joined domain 'sspg.central.sun.com'
如果失败,请确保您没有跳过步骤 3。如果服务器之间的时间差异太大,当您尝试连接 Domain 时,您将在系统日志中看到 Kerberos 消息。如果不是这个问题,请查询故障排除指南。
6. 停止和启动 CIFS Server
root@isv-x4500b # svcadm enable -r smb/server
svcadm:svc:/milestone/network depends on svc:/network/physical, which has multiple instances.
7. 创建 ZFS 文件系统
我已经具有称为 tank 的 ZFS 存储池。
root@isv-x4500b # zfs create -o casesensitivity=mixed tank/cifs1
8. 通过 SMB 共享 ZFS 文件系统和自定义共享名称
root@isv-x4500b # zfs sharesmb=on tank/cifs1
默认的共享名称是 tank_cifs1..我们可以用以下方式将其更改为 cifs1 ..
root@isv-x4500b # zfs sharesmb=name=cifs1 tank/cifs1
可以使用 sharemgr 进行检查:
root@isv-x4500b # sharemgr show -vp
default nfs=()
zfs
zfs/tank/cifs1 smb=()
cifs1=/tank/cifs1
9. 设置共享目录的权限
我将使用 Active Directory 注册用户从两个 Windows 客户机中访问共享。我公开共享目录的权限,以避免将来可能遇到的任何访问问题。
root@isv-x4500b # chmod 777 /tank/cifs1
正如 Solaris CIFS Administrators Guide 所述,我需要使用 ZFS ACL(也可能是 Identity Mapping)进行试验,从而能够轻松地处理此操作;以后将介绍这些内容。
10. 访问共享
我从运行 Microsoft Windows Server 2003 的两个客户机(client 1 和 client 2)中访问共享。
两个服务器都是同一个作为 CIFS 服务器的 Active Directory Domain 的成员。我作为不同的 Active Directory 注册用户登录每个服务器:user1 登录 client1;user2 登录 client2。
我将共享映射到两个客户机中。

映射共享时,系统询问我在 Workgroup 模式下的用户 ID 和密码,但我可以在系统日志中看到认证已经发生,对共享的 rw 访问权限已经授予用户 [SSPG\user1] 和 [SSPG\user2]...
Apr 8 05:49:30 isv-x4500b smbsrv:NOTICE:smbd[SSPG\user1]:cifs1 rw access granted
Apr 8 05:49:53 isv-x4500b smbsrv:NOTICE:smbd[SSPG\user2]:cifs1 rw access granted
两个客户机可以看到相同的共享目录,而且我在两个客户机中的共享上创建了一些文件和文件夹,没有遇到任何问题。
更多信息
OpenSolaris Project:CIFS Server 主页
Open Solaris CIFS Documentation,包括 Solaris CIFS Administrators Guide & Troubleshooting Information
此外,请考虑加入 Open Solaris Storage Discuss Forum
Posted at 09:00AM Apr 28, 2008 in Storage |
在 Workgroup 模式下配置 OpenSolaris CIFS Server
本文介绍一个快速简单的过程,演示如何在 Workgroup 模式下配置 OpenSolaris CIFS Server。
我的工作环境是安装了 Solaris Nevada build 86 的 Sun Fire X4500....
root@isv-x4500b # uname -a
SunOS isv-x4500b 5.11 snv_86 i86pc i386 i86pc
我已经创建了一个名为 "tank" 的 ZFS 存储池,现在执行下列步骤:
1. 启用 CIFS 服务器
root@isv-x4500b # svcadm enable -r smb/server
svcadm:svc:/milestone/network depends on svc:/network/physical, which has multiple instances
我在 google 上搜索了这条诊断消息,发现可以将其忽略。
2. 创建 ZFS 文件系统
root@isv-x4500b # zfs create -o casesensitivity=mixed tank/cifs0
3. 通过 SMB 共享新文件系统并检查操作的状态
root@isv-x4500b # zfs set sharesmb=on tank/cifs0
root@isv-x4500b # sharemgr show -vp
default nfs=()
zfs
zfs/tank/cifs0 smb=()
tank_cifs0=/tank/cifs0
4. 更改共享的名称
我不喜欢默认的共享名称 tank_cifs0,所以我将其更改为 cifs0
root@isv-x4500b # zfs set sharesmb=name=cifs0 tank/cifs0
root@isv-x4500b # sharemgr show -vp
default nfs=()
zfs
zfs/tank/cifs0 smb=()
cifs0=/tank/cifs0
5. 设置工作组的名称
默认情况下,工作组名称为 "workgroup",但我想将其更改为 "solcifs"。
root@isv-x4500b # smbadm join -w solcifs
Successfully joined workgroup 'solcifs'
6. 安装 SMB PAM 模块
将下列行添加到 /etc/pam.conf 的结尾:
other password required pam_smb_passwd.so.1 nowarn
在整个过程中,这是惟一需要编辑文件的地方,而且这是一次性的。
7. 设置/更改在连接到 CIFS 共享时将用于验证的 Solaris 用户密码
我将使用管理员用户,但实际上我们可以使用服务器知道的任何 Solaris 用户。
root@isv-x4500b # passwd root
New Password:
Re-enter new Password:
passwd:password successfully changed for root
安装了 SMB PAM 模块之后,将生成可由 Windows 以及 Solaris 使用的密码。这是一个必需步骤。
8. 在 Windows 中映射共享
在 windows 中,共享通过其 UNC 路径访问:\\isv-x4500b\cifs0。OpenSolaris CIFS 不支持未验证用户对共享的访问:它没有类似于 SAMBA 的 "guest mode" 的模式。在本例中,我以 root 的身份通过验证。
映射后的共享如下所示...

在 Windows 中创建的文件将由验证时使用的用户在 Solaris 服务器上拥有。如果此用户没有对共享目录的正确 UNIX 权限,则一些文件操作将失败。使用 chmod 可以轻松修复此问题。
我还可以在 Windows 中浏览 OpenSolaris CIFS 服务器...

更多信息
OpenSolaris Project:CIFS Server 主页
Open Solaris CIFS Documentation 包括 Solaris CIFS Administrators Guide & Troubleshooting Information
此外,请考虑加入 Open Solaris Storage Discuss Forum
Posted at 09:00AM Apr 26, 2008 in Storage |