我已经build立了Cerberus FTP服务器。 默认情况下,Cerberus FTP服务在SYSTEM ACCOUNT下运行。 另外我有一些控制台应用程序作为计划任务运行。 他们在一个专门的“工具”用户帐户下运行,该用户帐户具有“作为批处理作业login”权限。 这些控制台应用程序将上传的FTP文件,处理它们,然后将其移动到一些专用的归档文件夹。
问题是我的控制台应用程序试图访问上传的文件时抛出安全exception。 我试图给我的“实用工具”帐户的ftproot文件夹的完全控制权限,我已经检查“用所有的子对象权限replace此对象的可inheritance权限”checkbox,但它只影响当前的文件。 上传新文件时,我的“实用工具”帐户无法访问这些文件。
我试图另辟蹊径,并将Cerberus FTP服务放在“Utilities”帐户下。 然后我还需要在ProgramData中的Cerberus Data文件夹上给“Utilities”帐户权限。 仍然没有运气 – 在此操作之后,Cerberus内部SOAP Web服务停止工作(尽pipe一切似乎工作)。 我需要该SOAP服务可用,所以在“Utilities”帐户下运行Cerberus FTP似乎不是一种select。 除非我知道,否则我还需要为这个“Utilities”帐户设置什么来阻止Cerberus抱怨。
我猜,Cerberus正在将file upload到某个临时文件夹,因此这些文件将获得该文件夹的权限,并且即使移到ftproot后也保留相同的权限。
什么是正确的解决scheme,这将授予Cerberus FTP服务器和“实用工具”帐户访问ftproot文件夹的内容所需的最低限度的权限?
更多信息:
经过这里推荐的一些调查后,我可以转储icacls的输出。
以下是上传文件所在文件夹的输出:
C:\ftproot>icacls C:\ftproot\UserFolders\56 C:\ftproot\UserFolders\56 martinpc\Utilities:(I)(OI)(CI)(F) BUILTIN\Administrators:(I)(F) BUILTIN\Administrators:(I)(OI)(CI)(IO)(F) NT AUTHORITY\SYSTEM:(I)(F) NT AUTHORITY\SYSTEM:(I)(OI)(CI)(IO)(F) BUILTIN\Users:(I)(OI)(CI)(RX) NT AUTHORITY\Authenticated Users:(I)(M) NT AUTHORITY\Authenticated Users:(I)(OI)(CI)(IO)(M) Successfully processed 1 files; Failed processing 0 files
一切似乎都不错,martinpc \ Utilities有(I)(OI)(CI)(F)权限,所以这个用户应该有权访问所有的内部文件夹和文件,对不对?
但是当我看到文件,当访问martinpc \实用程序抛出“访问被拒绝”,这是我看到:
C:\ftproot>icacls C:\ftproot\UserFolders\56\uploaded.zip C:\ftproot\UserFolders\56\uploaded.zip BUILTIN\Administrators:(I)(F) NT AUTHORITY\SYSTEM:(I)(F) BUILTIN\IIS_IUSRS:(I)(S,RD) martinpc\martin:(I)(F) martinpc\SQLServerReportServerUser$MARTINPC$MSRS10_50.MSSQLSERVER:(I)(RX,D,WD,AD) NT SERVICE\ReportServer$SQLEXPRESS12:(I)(RX,WD,AD) Successfully processed 1 files; Failed processing 0 files
这个文件没有更多的martinpc \ Utilities用户。 如果您对这些ReportServer和IIS_IUSRS感到好奇,我的开发PC上有IIS和SQL Reporting服务。 但有趣的是,这些用户不知何故获得了该文件的自动权限,而我的专用martinpc \ Utilities用户却没有。
然后我开始追踪,这些上传的文件从哪里来。 我启动了Sysinternals Procmon,这是我在上传文件的时候看到的CerberusGUI.exe过程。 首先是调用CreateFilepathC:\ Windows \ Temp \ unq26B7.tmp然后上传完成后,我看到SetRenameInformationFile ReplaceIfExists:False FileName:C:\ ftproot \ UserFolders \ 56 \ uploaded.zip
现在我试着看看C:\ Windows \ Temp有哪些ACL:
C:\ftproot>icacls C:\Windows\Temp C:\Windows\Temp CREATOR OWNER:(OI)(CI)(IO)(F) NT AUTHORITY\SYSTEM:(OI)(CI)(F) BUILTIN\Administrators:(OI)(CI)(F) BUILTIN\Users:(CI)(S,WD,AD,X) BUILTIN\IIS_IUSRS:(OI)(CI)(S,RD) martinpc\martin:(OI)(CI)(F) martinpc\SQLServerReportServerUser$MARTINPC$MSRS10_50.MSSQLSERVER:(OI)(CI)(RX,D,WD,AD) NT SERVICE\ReportServer$SQLEXPRESS12:(OI)(CI)(RX,WD,AD) Successfully processed 1 files; Failed processing 0 files
也许这个临时文件是inheritance该Temp文件夹的权限,当Cerberus调用SetRenameInformationFile时,尽pipe文件被移动/重命名到C:\ ftproot文件夹中,该文件仍然保留了大部分旧的inheritance权限。
如果我在C:\ Windows \ Temp上授予martinpc \ Utilities用户权限,那足够了吗? 或者,也许有更好的解决scheme?
文件夹上的ACL具有一些属性,决定每个子项目如何inheritance每个权限。 通过使用Powershell的icalcs列出文件夹的ACL,您将看到如下所示的内容:
icacls foldername NT-AUTORITÄT\SYSTEM:(I)(OI)(CI)(IO)(F) ...
您必须检查文件夹是否启用(OI)(CI)。 你可以用icalcs来设置它,参见“icacls /?” 在这一点上,并检查这篇文章: http : //support.microsoft.com/kb/318754/en-us