浏览器访问服务器php脚本自动提交git出错的解决方案

报错信息:fatal: unable to get credential storage lock in 1000 ms: Permission denied

又是凭据存储被锁了,最近常常出现权限报错

由于目录在A用户文件夹下,用A用户和root账号git pull是没问题的

直接用网页工具访问脚本相当于sudo -u www-data bash后使用www-data账户执行git pull

ssh打印也是:

error: cannot open .git/FETCH_HEAD: Permission denied

用了一个曲线救国的办法允许www-data用户以 A用户的身份无需密码执行特定脚本

sudo visudo

编辑

www-data ALL=(A用户的名字) NOPASSWD: /usr/bin/php /home/wwwroot/xxx/scripts/a.php
www-data ALL=(A用户的名字) NOPASSWD: /usr/bin/php /home/wwwroot/xxx/xxxx/b.php
www-data ALL=(A用户的名字) NOPASSWD: /usr/bin/php /home/wwwroot/xxxx/xxx/c.php

输入sudo -u www-data sudo -l校验保存已成功

而git操作后还需写入文件的权限

检查:ls -ld /home/A用户名字/项目地址

发现drwxr-sr-x 而非drwxrwsr-x,组也错了

*当前失败的地址是【drwxr-sr-x 14 A用户名 A用户名 /home/A用户名/项目地址】

*正确的预期应该是【drwxrwsr-x 10 A用户名 www /home/A用户名/项目地址】

执行:

# 1. 修改目录组

sudo chgrp -R www /home/A用户名/项目地址

# 2. 设置 setgid 位,确保新文件继承组权限

sudo chmod g+s /home/A用户名/项目地址

# 3. 给组添加写权限

sudo chmod g+w /home/A用户名/项目地址

# 4. 递归修改目录内文件的权限

sudo chmod -R g+w /home/A用户名/项目地址

 

还有最后一个项目会出现报错,打印认证方式:

git config --local --list | grep -E "(url|helper)" | grep -v http
出现的是credential.helper=store --file=/home/A用户名/.git-credentials

发现去掉credential能正常

sudo -u zhangxt git config --local --unset credential.helper

现在laravel项目里和nginx普通网页触发的脚本都正常执行了

posted @ 2025-12-04 15:03  南宫煎饼  阅读(5)  评论(0)    收藏  举报