我使用Windows Server 2012 R2作为FTP服务器。 我添加了一个FTP站点MyFtpServer。 它使用的应用程序池是MyFtpServerAppPool。 AppPool使用ApplicationPoolIdentity作为标识。 如果我使用ftp从命令行login,我得到以下结果:
530-User cannot log in. Win32 error: Access is denied. Error details: Filename: \\?\C:\Windows\system32\inetsrv\config\redirection.config Error: Cannot read configuration file due to insufficient permissions
当我通过添加networking服务身份与读访问权限添加到\ windows \ system32 \ inetsrv \ config文件夹的权限时,则FTPlogin进行时没有错误。
但是我所读到的有关使用networking服务的内容是,安全性方面,这将会退后两步。 我find的“最佳实践”解决scheme是使用IIS AppPool \ MyFtpServerAppPool标识添加权限。 但是,如果我这样做,然后FTPlogin失败,同样的错误消息。
所以我的问题是,解决这个问题最好的办法是什么? 显然,我希望FTPfunction可以正常工作,但是我不想回到那些不再被认为是安全性最好的措施。 有任何想法吗?
补充:我正在使用IISpipe理员用户
默认情况下IIS FTP服务器运行在Network Service ,我认为改变应用程序池标识是没有用的,因为FTP服务甚至不使用应用程序池或w3wp.exe进程。
有人build议使用特定的帐户来运行FTP服务,然后为该帐户分配权限。
您在Component Services mmc中执行此操作,请参阅Microsoft博客post ,我尝试过,但是我甚至没有看到COM+ Applications下的FTP...节点
花了一段时间才发现我必须在服务器pipe理器中安装FTP Extensibility Windowsfunction。
之后,您应该看到Microsoft FTP Publishing Service Extensibility Host节点。 打开属性并将标识更改为自定义帐户。
我刚刚写了一个PowerShell脚本来启用FTP,创build一个站点和一个用户,并设置FTP服务的身份。 在configuration文件和ftp根目录下为新帐户设置ACL。
新DemoFTPSite.ps1