我使用 Codeship AWS部署系统,通过CodeDeploy部署 Node.js 应用程序。
我正在使用 appspec.yml 文件来设置其中一个已部署目录的所有者和权限。
对于将在部署的指定文件夹中创建的任何文件,我想允许读/写。 Web应用程序开始运行后将创建文件。
目前我的appspec.yml包含以下内容:
version: 0.0
os: linux
files:
- source: /
destination: /var/www/APPLICATION_NAME
permissions:
- object: /var/www/APPLICATION_NAME/tmpfiles
mode: 644
owner: ec2-user
type:
- directory
答案 0 :(得分:11)
我发现appspec.yml文件真的难以处理。
我有非常大而复杂的文件夹结构,尝试使用appspec.yml文件设置权限很头疼。由于这个原因,我使用“hooks”来调用小bash脚本来设置我的权限
以下是我的示例appspec.yml文件:
version: 0.0
os: linux
files:
- source: /
destination: /var/www
hooks:
AfterInstall:
- location: scripts/set-permissions.sh
以下是set-permissions.sh文件的示例:
#!/bin/bash
# Set ownership for all folders
chown -R www-data:www-data /var/www/
chown -R root:root /var/www/protected
# set files to 644 [except *.pl *.cgi *.sh]
find /var/www/ -type f -not -name ".pl" -not -name ".cgi" -not -name "*.sh" -print0 | xargs -0 chmod 0644
# set folders to 755
find /var/www/ -type d -print0 | xargs -0 chmod 0755
答案 1 :(得分:4)
如果在文件系统上启用了访问控制列表(ACL),则可以在目录中使用默认ACL,以允许对该目录中新创建的文件的所有者/组/其他人具有读/写权限。
AWS CodeDeploy允许您在appspec.yml中为文件指定ACL。可以将任何有效的ACL条目传递给setfacl [1]
例如,在您的情况下,为所有新创建的文件设置读取,写入和执行权限,您可以执行类似
的操作version: 0.0 os: linux files:
- source: /
destination: /var/www/APPLICATION_NAME permissions:
- object: /var/www/APPLICATION_NAME/tmpfiles
mode: 644
acls:
- "d:u::rwx"
- "d:g::rwx"
- "d:o::rwx"
owner: ec2-user
type:
- directory
创建新文件的应用程序可以限制权限。您还可以设置默认ACL掩码以设置掩码位以强制某些权限。例如,“d:m :: rw”将掩盖执行权限。您可以在此处了解有关ACL和屏蔽的更多信息http://www.vanemery.com/Linux/ACL/POSIX_ACL_on_Linux.html