CentOS 6.8
PHP 7.0.7
Git 1.7.1
Dans le catalogue/home/work/repositories/
下创建了一个裸仓test.git
git clone
到网站根目录/home/work/www/
PHP
运行用户为www-data
,/home/work/www/
目录的权限为755
,属于www-data
用户和www-data
Groupe d'utilisateurs
Configuré post-receive
钩子,开发环境执行git push
的时候,自动到/home/work/www/test
目录下执行git pull
Opération
#!/bin/sh
cd /home/work/www/test
sudo -u www-data env -i git pull
Lorsque la configuration ci-dessus est terminée et que l'environnement de développement est exécutégit push
, l'erreur suivante apparaît
Counting objects: 3, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (3/3), done.
Writing objects: 100% (3/3), 790 bytes | 0 bytes/s, done.
Total 3 (delta 1), reused 0 (delta 0)
remote: sudo: no tty present and no askpass program specified
remote: Gogs: Internal error
To ssh://xxx/test.git
6250615..3e4555d master -> master
Suivez le tutoriel en ligne et ajoutez cette ligne dans /etc/sudoers
%git ALL=(ALL) NOPASSWD: ALL
Après avoir configuré de cette manière, l'opération git pull
sera effectuée dans le répertoire /home/work/www/test
à chaque fois git push
之后也都会到/home/work/www/test
目录下执行git pull
, obtenant les résultats attendus.
Je voudrais demander à tout le monde, selon la configuration ci-dessus, y a-t-il des risques de sécurité ou des failles de configuration ?
Merci !
Personnellement, je pense qu'il n'est pas bon de mettre du code (y compris le référentiel git) sur le serveur de production, surtout s'il est placé dans le répertoire Web. Une fois qu'il y a des problèmes d'autorisation, le code est susceptible d'être déplacé
.En fait, vous pouvez séparer le fichier d'entrée php et le dossier .git, et c'est tout.
Comme Laravel, le fichier d'entrée est public et .git est hors public, donc cela ne l'affectera pas du tout.