我已经设置了一个脚本来进行跨两个服务器的颠覆更新--本地主机和远程服务器--由www-data用户运行的后提交钩子调用。
/srv/svn/mysite/hooks/post包含:
sudo -u cli /usr/local/bin/svn_deploy/usr/local/bin/svn_deploy由cli用户拥有,并包含:
#!/bin/sh
svn update /srv/www/mysite
ssh cli@remotehost 'svn update /srv/www/mysite'为了使这个工作有效,我必须将以下内容添加到sudoers文件中:
www-data ALL = (cli) NOPASSWD: /usr/local/bin/svn_deploy
cli ALL = NOEXEC:NOPASSWD: /usr/local/bin/svn_deploy为了避免错误,必须输入www-data和cli:
post commit hook failed: no tty present and no askpass program specified我对赋予www-数据任何更高的权利持谨慎态度。我还应该做些什么来减少或消除任何安全风险吗?
发布于 2012-12-05 19:02:47
您可以做的是使用类似svnsync之类的东西。
来自他们的站点:
svnsync是Subversion远程存储库镜像工具。简单地说,它允许您将一个存储库的修订重放到另一个存储库中。
因此,您可以做的是将这样的条目放在挂钩部分中:
/usr/bin/svnsync同步svn://X.X/-用户名XXXX -密码'XXXXXX‘-非交互式
这将同步到远程服务器的更新,并且您也不需要向任何用户提供任何特殊特权。
希望这能帮上忙。
发布于 2012-12-05 16:39:01
我不会使用非特权用户(www-data)来执行管理任务。svn更新似乎更多的是根的工作。因此,我不会为www-data添加额外的特权。在使用SSH连接时,可以使用密钥身份验证进行连接,并创建一个强制命令,将root执行的操作限制为“svn更新”。要保存在/root/..ssh/authorized_ key上的公钥如下所示:
command='svn update /srv/www/mysite',ssh-rsa dedllrfflr[...]这样,您的连接将被限制在这个特定的命令,而www-数据不会获得额外的权限。
在客户端,启动更新的命令是:
ssh -i /path/to/private/key root@server whatEverCommandYouMayImagine如果身份验证成功,只有强制命令中包含的命令才会启动。
然后,您可以处理上载文件的Unix组/权限。对于apache,它通常打开:
find /srv/www/mysite -type f -print0 | xargs -0 chmod 640
find /srv/www/mysite -type d -print0 | xargs -0 chmod 750
find /srv/www/mysite -print0 | xargs -0 chown root:www-datahttps://serverfault.com/questions/455353
复制相似问题