我一直在尝试使用 .ebextensions container_commands 授予 IIS APPPOOL\DefaultAppPool 用户对 wwwroot 文件夹下两个文件夹的写入权限。
我需要涵盖两种情况:
- 发布到新的 EBS 环境时,能够授予 DefaultAppPool 用户写入权限,其中 wwwroot 文件夹在 .ebextensions 运行时不包含我的解决方案。
- 能够重新发布到现有的 EBS 环境,并在 .ebextensions 运行时在 wwwroot 文件夹包含我的解决方案的位置保留 DefaultAppPool 写入权限 。
我已经能够执行后者,但不能执行前者。前者失败是因为我指定了 wwwroot 下文件夹的路径,我想更改谁的权限,但解决方案尚未部署到 wwwroot,导致出现错误消息:“系统找不到指定的文件。”
我尝试了另一种方法,我将 DefaultAppPool 写入权限授予整个 wwwroot 文件夹,希望在提取项目时,新添加的文件夹将继承 wwwroot 的权限。当我这样做并将 icacls 命令的输出记录到文件时,我可以验证确实为 wwwroot 添加了写权限。尽管能够验证 .ebextensions 运行时是否添加了写权限,但它们在部署过程的后期会以某种方式更改回其原始状态(只读),可能是通过:
c:\Program Files\Amazon\ElasticBeanstalk\Tools\Deploy.exe
这是我用来验证权限是否更改的 .config 文件:
container_commands:
00_dir:
command: dir c:\inetpub\wwwroot >> c:\cfn\perms.log 2>&1
waitAfterCompletion: 0
01_what_perms:
command: icacls.exe c:\\inetpub\\wwwroot >> c:\\cfn\\perms.log 2>&1
waitAfterCompletion: 0
02_changeperm:
command: icacls.exe c:\\inetpub\\wwwroot /grant "IIS AppPool\DefaultAppPool":(OI)(CI)W >> c:\\cfn\\perms.log 2>&1
waitAfterCompletion: 0
03_what_perms:
command: icacls.exe c:\\inetpub\\wwwroot >> c:\\cfn\\perms.log 2>&1
waitAfterCompletion: 0
04_dir:
command: dir c:\inetpub\wwwroot >> c:\cfn\perms.log 2>&1
waitAfterCompletion: 0
因此我问:
有没有办法授予 DefaultAppPool 用户对这两个文件夹的写入权限,这两个文件夹在发布到新 EBS 环境和重新发布到现有环境时都有效?
有没有办法在应用程序部署到 wwwroot 之后运行命令,但不能像 container_commands 那样运行?
当我查看 .ebextensions .config 文件中的日志时,我发现它们运行了两次,这正常吗?