4

我一直在尝试使用 .ebextensions container_commands 授予 IIS APPPOOL\DefaultAppPool 用户对 wwwroot 文件夹下两个文件夹的写入权限。

我需要涵盖两种情况:

  1. 发布到新的 EBS 环境时,能够授予 DefaultAppPool 用户写入权限,其中 wwwroot 文件夹在 .ebextensions 运行时不包含我的解决方案。
  2. 能够重新发布到现有的 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

因此我问:

  1. 有没有办法授予 DefaultAppPool 用户对这两个文件夹的写入权限,这两个文件夹在发布到新 EBS 环境和重新发布到现有环境时都有效?

  2. 有没有办法在应用程序部署到 wwwroot 之后运行命令,但不能像 container_commands 那样运行?

  3. 当我查看 .ebextensions .config 文件中的日志时,我发现它们运行了两次,这正常吗?

4

0 回答 0