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

本文涉及的产品
对象存储 OSS,20GB 3个月
对象存储 OSS,恶意文件检测 1000次 1年
对象存储 OSS,内容安全 1000次 1年
简介: SYSTEM身份挂载文件卷可以解决IIS日志写入、SQLServer使用文件卷的问题,还可以解决类似的Windows服务访问NAS SMB的问题。只有以SYSTEM身份挂载文件卷后,Windows Service才能够正常访问NAS SMB。

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

SYSTEM账号能解决的NAS SMB场景

1. 需要创建全局挂载

一般用户登录然后挂载SMB盘,这时的挂载只存在于这个用户的登录会话中,另外一个用户登录时无法看到这个盘。
如果需要全局挂载,需要使用SYSTEM账号挂载,或者对于Windows Server 2019,可以使用New-SmbGlobalMapping挂载。

2. IIS日志写入

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

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

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

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

failure

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

使用阿里云控制台ECS云助手进行SYSTEM账号挂载

阿里云控制台的ECS控制台(https://ecs.console.aliyun.com)有云助手功能。该功能执行Windows cmd命令时使用SYSTEM权限执行。
该工具使用简单,创建类似下图的net use挂载命令进行挂载即可。
SystemNetUse.png

使用脚本自动完成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卷

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卷,并且会输出是以何种身份挂载。

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

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

schtasks /run /tn "my_mount"

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

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

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

将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

其他步骤相同。

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

5.1. 打开任务计划程序

1_5_1

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

1_5_2

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

1_5_3

5.4. 选择 启动程序

1_5_4

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

1_5_5

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

1_5_6

5.7. 在活动任务中找到 my_mount

1_5_7

5.8. 双击进入,选择 运行

1_5_8

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

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

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

将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

总结

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

参考文档

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

相关实践学习
基于ECS和NAS搭建个人网盘
本场景主要介绍如何基于ECS和NAS快速搭建个人网盘。
阿里云文件存储 NAS 使用教程
阿里云文件存储(Network Attached Storage,简称NAS)是面向阿里云ECS实例、HPC和Docker的文件存储服务,提供标准的文件访问协议,用户无需对现有应用做任何修改,即可使用具备无限容量及性能扩展、单一命名空间、多共享、高可靠和高可用等特性的分布式文件系统。 产品详情:https://www.aliyun.com/product/nas
目录
相关文章
|
15天前
|
存储 负载均衡 Java
如何配置Windows主机MPIO多路径访问存储系统
Windows主机多路径(MPIO)是一种技术,用于在客户端计算机上配置多个路径到存储设备,以提高数据访问的可靠性和性能。本文以Windows2012 R2版本为例介绍如何在客户端主机和存储系统配置多路径访问。
57 13
如何配置Windows主机MPIO多路径访问存储系统
|
1月前
|
应用服务中间件 Shell PHP
windows系统配置nginx环境运行pbootcms访问首页直接404的问题
windows系统配置nginx环境运行pbootcms访问首页直接404的问题
|
30天前
|
Apache 数据中心 Windows
将网站迁移到阿里云Windows系统云服务器,访问该站点提示连接被拒绝,如何处理?
将网站迁移到阿里云Windows系统云服务器,访问该站点提示连接被拒绝,如何处理?
|
30天前
|
域名解析 缓存 网络协议
Windows系统云服务器自定义域名解析导致网站无法访问怎么解决?
Windows系统云服务器自定义域名解析导致网站无法访问怎么解决?
|
1月前
|
弹性计算 关系型数据库 网络安全
阿里云国际版无法连接和访问Windows服务器中的FTP服务
阿里云国际版无法连接和访问Windows服务器中的FTP服务
|
4月前
|
存储 运维 Serverless
函数计算产品使用问题之遇到NAS已经挂载但显示未挂载的情况时,该怎么办
函数计算产品作为一种事件驱动的全托管计算服务,让用户能够专注于业务逻辑的编写,而无需关心底层服务器的管理与运维。你可以有效地利用函数计算产品来支撑各类应用场景,从简单的数据处理到复杂的业务逻辑,实现快速、高效、低成本的云上部署与运维。以下是一些关于使用函数计算产品的合集和要点,帮助你更好地理解和应用这一服务。
函数计算产品使用问题之遇到NAS已经挂载但显示未挂载的情况时,该怎么办
|
3月前
|
存储 Linux Windows
【应用服务 App Service】App Service For Windows 如何挂载Storage Account File Share 示例
【应用服务 App Service】App Service For Windows 如何挂载Storage Account File Share 示例
|
3月前
|
Python Windows
【Azure 应用服务】App Service For Windows 环境中部署Python站点后,如何继续访问静态资源文件呢(Serving Static Files)?
【Azure 应用服务】App Service For Windows 环境中部署Python站点后,如何继续访问静态资源文件呢(Serving Static Files)?
|
3月前
【Azure 应用服务】App Service 配置 Application Settings 访问Storage Account得到 could not be resolved: '*.file.core.windows.net'的报错。没有解析成对应中国区 Storage Account地址 *.file.core.chinacloudapi.cn
【Azure 应用服务】App Service 配置 Application Settings 访问Storage Account得到 could not be resolved: '*.file.core.windows.net'的报错。没有解析成对应中国区 Storage Account地址 *.file.core.chinacloudapi.cn
|
3月前
|
Python Windows 内存技术
【Azure 应用服务】Azure App Service (Windows) 使用Flask框架部署Python应用,如何在代码中访问静态文件呢?如何设置文件路径?是相对路径还是绝对路径呢?
【Azure 应用服务】Azure App Service (Windows) 使用Flask框架部署Python应用,如何在代码中访问静态文件呢?如何设置文件路径?是相对路径还是绝对路径呢?

相关产品

  • 文件存储 NAS