以SYSTEM身份挂载文件卷支持Windows服务访问NAS SMB文件卷-阿里云开发者社区

开发者社区> 周沁> 正文

以SYSTEM身份挂载文件卷支持Windows服务访问NAS SMB文件卷

简介: SYSTEM身份挂载文件卷可以解决IIS日志写入、SQLServer使用文件卷的问题,还可以解决类似的Windows服务访问NAS SMB的问题。只有以SYSTEM身份挂载文件卷后,Windows Service才能够正常访问NAS SMB。
+关注继续查看

在Windows操作系统中,系统服务(Services)、计划任务(Scheduled Tasks)以及很多系统调用都是以SYSTEM系统账号进行操作的。如果在阿里云ECS用 net use 挂载,或者在文件管理器上直接挂载,挂载卷是以 Administrator 身份进行挂载的,而 SYSTEM 账号无法使用 Administrator 挂载的文件卷。

关于SYSTEM账号的更多内容请参考 How the SYSTEM account is used in Windows[1] 以及 SYSTEM account in Windows[2]。

SYSTEM账号能解决的NAS SMB场景

1. IIS日志写入

如果没有配置SYSTEM挂载,会出现写入错误。
iis-1.png
iis-2.png

按照以下SYSTEM账号挂载方式完成挂载时候,IIS日志可以写入成功。日志写入成功之后会生成W3SVC1的日志文件夹以及日志文件。
iis-3.png

2. SQLServer使用NAS SMB文件卷做存储

在没有以 SYSTEM 身份挂载文件卷之前,在SQLServer 2014中选择 Databases->Attach ,无法看到 Administrator 挂载的文件卷:
sql-1.png

在下面的方法使用SYSTEM账号挂载之后,可以看到NAS SMB卷(Y:)
sql-2.png

之后就可以将数据库文件存放到文件卷上了。

3. 某些服务(Services)无法启动

比如如果一个服务(Service)里面调用了文件卷里的执行程序,如果文件卷不是以 SYSTEM 身份挂载的,则服务无法执行,会返回程序无法加载。采用上述的 SYSTEM 身份挂载解决方案就可以让服务启动了。

failure

在碰到依赖文件卷的系统程序无法执行,并且抓包没有明显错误时,问题很可能出在卷需要用 SYSTEM 账号挂载,可以优先尝试上述的解决方案。

使用脚本自动完成SYSTEM账号挂载NAS SMB卷

在Powershell或者Powershell ISE中运行以下命令下载并运行挂载排查脚本。

Invoke-WebRequest https://code.aliyun.com/nas_team/nas-client-tools/raw/master/windows_client/alinas_smb_windows_inspection.ps1 -OutFile alinas_smb_windows_inspection.ps1
.\alinas_smb_windows_inspection.ps1 -MountAddress abcde-123.region-id.nas.aliyuncs.com -SystemMount $true -Locale zh-CN

对于Windows Server 2016或者以上版本,挂载时需要身份。可以使用以下参数完成SYSTEM账号挂载。

.\alinas_smb_windows_inspection.ps1 -MountAddress abcde-123.region-id.nas.aliyuncs.com -SystemMount $true -Username administrator -Password admin_password -Locale zh-CN

SYSTEM账号挂载NAS SMB卷步骤示例

以下我们就以SQLServer使用NAS SMB文件卷为例,介绍如何以SYSTEM账号挂载NAS SMB卷。

0. 安装 SQL Server Express 2014

我们的实验中使用的是 SQL Server Express 2014,下载地址:https://www.microsoft.com/en-in/download/details.aspx?id=42299

下载时请选择 ExpressAndTools 64BIT\SQLEXPRWT_x64_ENU.exe。
下载时请选择 ExpressAndTools 64BIT\SQLEXPRWT_x64_ENU.exe

1. 以SYSTEM身份挂载NAS SMB文件卷

1.1. 参考 Map network drive for the SYSTEM user in Windows[3] ,我们建立

c:\my_mount.bat 脚本,内容如下:

ECHO ON  
ECHO This will map the drive, but is being run by task scheduler AS the user SYSTEM  
ECHO which should make it accessible to the user SYSTEM  
ECHO List the existing drives first.  

net use >> c:\SystemNetUseOutput.txt  
net use y: \\xxx.nas.aliyuncs.com\myshare 

ECHO List the existing drives with the new mapping

net use >> c:\SystemNetUseOutput.txt  

ECHO See what user this batch job ran under  

whoami >> c:\SystemNetUseOutput.txt  

ECHO need to exit to allow the job to finish  
EXIT  

将脚本中的xxx改为您的卷挂载点。以上脚本会挂载NAS SMB卷,并且会输出是以何种身份挂载。

1.2. 可以在命令行运行以下命令生成 my_mount 任务并运行该任务

schtasks /create /tn "my_mount" /tr "c:\my_mount.bat" /sc onstart /RU SYSTEM /RL HIGHEST

schtasks /run /tn "my_mount"

1.3. 运行完之后的结果

C:\SystemNetUseOutput.txt 中应该能看到类似这样的结果

New connections will be remembered.
There are no entries in the list.
New connections will be remembered.

Status       Local     Remote                    Network
OK           y:     \\xxx.nas.aliyuncs.com\myshare    Microsoft Windows Network
The command completed successfully.
nt authority\system

挂载成功后文件管理器会显示类似这样的文件卷:
1_3

1.4. Windows Server 2016 及以上版本的注意事项

Windows Server 2016 及以上版本客户端不允许匿名访问。用户可以使用workshop\administrator身份进行挂载。

将1.1.中的脚本改为:

ECHO ON
ECHO This will map the drive, but is being run by task scheduler AS the user SYSTEM
ECHO which should make it accessible to the user SYSTEM
ECHO List the existing drives first.

net use >> c:\SystemNetUseOutput.txt
net use y: \\xxx.nas.aliyuncs.com\myshare /user:WORKGROUP\administrator PASSWORD

ECHO List the existing drives with the new mapping

net use >> c:\SystemNetUseOutput.txt

ECHO See what user this batch job ran under

whoami >> c:\SystemNetUseOutput.txt

ECHO need to exit to allow the job to finish
EXIT

其他步骤相同。

1.5. 也可以使用图形界面生成 my_mount 任务并运行该任务

1.5.1. 打开任务计划程序

1_5_1

1.5.2. 点击创建基本任务,写入任务名 my_mount

1_5_2

1.5.3. 点击下一步,选择 计算机启动时

1_5_3

1.5.4. 选择 启动程序

1_5_4

1.5.5. 程序或脚本写入:C:\my_mount.bat

1_5_5

1.5.6. 点击下一步,点击完成

1_5_6

1.5.7. 在活动任务中找到 my_mount

1_5_7

1.5.8. 双击进入,选择 运行

1_5_8

1.6. 运行完之后的结果

C:\SystemNetUseOutput.txt 中应该能看到类似这样的结果

New connections will be remembered.
There are no entries in the list.
New connections will be remembered.

Status       Local     Remote                    Network
OK           y:     \\xxx.nas.aliyuncs.com\myshare    Microsoft Windows Network
The command completed successfully.
nt authority\system

挂载成功后文件管理器会显示类似这样的文件卷:
1_6

1.7. Windows Server 2016 及以上版本的注意事项(同1.4.)

Windows Server 2016 及以上版本客户端不允许匿名访问。用户可以在本地创建一个专门用来挂载的用户,比如 mount_user
1_7

将1.1.中的脚本改为:

ECHO ON
ECHO This will map the drive, but is being run by task scheduler AS the user SYSTEM
ECHO which should make it accessible to the user SYSTEM
ECHO List the existing drives first.

net use >> c:\SystemNetUseOutput.txt
net use y: \\xxx.nas.aliyuncs.com\myshare /user:WORKGROUP\administrator PASSWORD

ECHO the /P switch makes the drive remain after reboot
ECHO List the existing drives with the new mapping

net use >> c:\SystemNetUseOutput.txt

ECHO See what user this batch job ran under

whoami >> c:\SystemNetUseOutput.txt

ECHO need to exit to allow the job to finish
EXIT

其他步骤相同。

2. SQLServer使用NAS SMB卷存储数据库

在没有以 SYSTEM 身份挂载文件卷之前,在SQLServer 2014中选择 Databases->Attach ,无法看到 Administrator 挂载的文件卷:
2

在采用上述方法挂载之后,可以看到NAS SMB卷(Y:)
2_2

之后就可以将数据库文件存放到文件卷上了。

总结

SYSTEM身份挂载文件卷不仅可以解决SQLServer使用文件卷的问题,还可以解决很多跟 SYSTEM 身份相关的问题

在碰到依赖文件卷的系统程序无法执行,并且抓包没有明显错误时,问题很可能出在卷需要用 SYSTEM 账号挂载,可以优先尝试上述的解决方案。

参考文档

1. SQL Server Express 2014下载地址:https://www.microsoft.com/en-in/download/details.aspx?id=42299

2. How the SYSTEM account is used in Windows: https://support.microsoft.com/en-us/help/120929/how-the-system-account-is-used-in-windows

3. SYSTEM account in Windows: https://security.stackexchange.com/questions/66743/system-account-in-windows

4. Map network drive for the SYSTEM user in Windows: https://superuser.com/questions/753400/map-network-drive-for-the-system-user-in-windows

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
在silverlight中利用socket发送图片或文件
silverlight中的socket通讯支持,让sl开发基于web的聊天工具成为了可能,后来OpenFileDialog,SaveFileDialog的出现,更使得边聊天边传送图片(文件)得以实现,最新的SL4中又加入了摄像头支持,也许不久真的可以用silverlight开发出功能强大的视频聊天系统,目前唯一还没有解决的是p2p问题,根据sl3的sdk文档所述:    Socket 类为网络通信提供了一组方法和属性。
828 0
从Windows以AD域用户身份挂载使用阿里云SMB协议文件系统
在完成AD域接入之后,用户即可开始以AD域用户身份挂载使用阿里云SMB协议文件系统了。本文介绍了几种SMB文件系统的挂在方式以及简单的ACL特性使用方法的演示。
5048 0
log4net 中错误 System.Web.HttpException (0x80004005): 文件不存在
用日志组件,Global 中配置的输出最后一个错误信息,总是出现下面的错误信息: 2014-04-01 14:35:41,757 级别:ERROR 信息:[Exception]:System.Web.HttpException (0x80004005): 文件不存在。
713 0
Fun 2.16.0 发布——资源部署、NAS 支持、镜像拉取等功能又又又增强啦!
Fun 2.16.0 发布——资源部署、NAS 支持、镜像拉取等功能又又又增强啦! Fun 是什么 Fun: Fun 是一个用于支持 Serverless 应用部署的工具,能帮助您便捷地管理函数计算、API 网关、日志服务等资源。
1244 0
使用阿里云容器服务 ACK 和文件存储 NAS 构建现代化企业应用
大规模构建容器化应用程序需要高可靠、弹性、共享且支持高性能数据处理的数据存储解决方案。通过迁移到公共云,企业可以获得更高的生产效率和更低的成本。阿里云文件存储可以为现代化应用提供强健的数据稳定性,可靠性,高性能和在线扩展能力。
1346 0
+关注
周沁
Unlimited storage for anything!
19
文章
0
问答
来源圈子
更多
阿里云存储基于飞天盘古2.0分布式存储系统,产品包括对象存储OSS、块存储Block Storage、共享文件存储NAS、表格存储、日志存储与分析、归档存储及混合云存储等,充分满足用户数据存储和迁移上云需求,连续三年跻身全球云存储魔力象限四强。
+ 订阅
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载