我在一台CentOS主机上有一个nginx和git服务器,我在bitbucket上有我的git repo。我想做的是在从Bitbucket收到特定的POST请求时执行bash脚本。
我有什么:
1)专用用户nginx-script-runner
。
2) nginx config:
location / {
rewrite ^(.*)$ /main.php?$1;
}
3) main.php:
exec('/bin/bash /script.sh')
4) /script.sh:
sudo -u nginx-script-runner /bin/bash /pull.sh
5) sudoers:
nginx-script-runner ALL=NOPASSWD: /pull.sh
pull.sh
会自动从远程来源拉出并运行' build'程序。构建过程取决于npm
,bower
,composer
,grunt
等(我还使用nvm
进行节点版本管理)。这些工具是在真实用户登录时运行的。事情是 - 我只通过PKA登录CentOS,没有密码,所以我的pull.sh
需要能够运行它多个用户(我和nginx-script-user
)。由于它是一个git repo,它有node_modules
,bower_components
,作曲家的vendor
文件夹我应该以某种方式管理权限。
第一个问题:我无法与不同的用户一起运行pull.sh
。即使我有:
DIR='/repo.git'
#chgrp -R tactic "$DIR"
#chmod -R g+w "$DIR"
#find "$DIR" -type d -exec chmod g+s {} \;
setfacl -R -m g:common-group:rwX "$DIR"
find "$DIR" -type d | xargs setfacl -R -m d:g:common-group:rwX
我仍然有大量的" chgrp / chown权限被拒绝"错误。
第二个问题:我无法与pull.sh
的任何一位用户真正执行main.php
。
非常感谢任何帮助。
P.S。
nginx-script-runner
(仅限密码身份验证,无外部SSH访问)都属于公共组common-group
。git config core.sharedRepository true
对其进行配置并运行权限修复。