首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >sudoers安全

sudoers安全
EN

Server Fault用户
提问于 2012-12-05 15:59:24
回答 2查看 237关注 0票数 0

我已经设置了一个脚本来进行跨两个服务器的颠覆更新--本地主机和远程服务器--由www-data用户运行的后提交钩子调用。

/srv/svn/mysite/hooks/post包含:

代码语言:javascript
复制
sudo -u cli /usr/local/bin/svn_deploy

/usr/local/bin/svn_deploy由cli用户拥有,并包含:

代码语言:javascript
复制
#!/bin/sh

svn update /srv/www/mysite
ssh cli@remotehost 'svn update /srv/www/mysite'

为了使这个工作有效,我必须将以下内容添加到sudoers文件中:

代码语言:javascript
复制
www-data ALL = (cli) NOPASSWD: /usr/local/bin/svn_deploy
cli ALL = NOEXEC:NOPASSWD: /usr/local/bin/svn_deploy

为了避免错误,必须输入www-data和cli:

代码语言:javascript
复制
post commit hook failed: no tty present and no askpass program specified

我对赋予www-数据任何更高的权利持谨慎态度。我还应该做些什么来减少或消除任何安全风险吗?

EN

回答 2

Server Fault用户

发布于 2012-12-05 19:02:47

您可以做的是使用类似svnsync之类的东西。

来自他们的站点

svnsync是Subversion远程存储库镜像工具。简单地说,它允许您将一个存储库的修订重放到另一个存储库中。

因此,您可以做的是将这样的条目放在挂钩部分中:

/usr/bin/svnsync同步svn://X.X/-用户名XXXX -密码'XXXXXX‘-非交互式

这将同步到远程服务器的更新,并且您也不需要向任何用户提供任何特殊特权。

希望这能帮上忙。

票数 0
EN

Server Fault用户

发布于 2012-12-05 16:39:01

我不会使用非特权用户(www-data)来执行管理任务。svn更新似乎更多的是根的工作。因此,我不会为www-data添加额外的特权。在使用SSH连接时,可以使用密钥身份验证进行连接,并创建一个强制命令,将root执行的操作限制为“svn更新”。要保存在/root/..ssh/authorized_ key上的公钥如下所示:

代码语言:javascript
复制
command='svn update /srv/www/mysite',ssh-rsa dedllrfflr[...]

这样,您的连接将被限制在这个特定的命令,而www-数据不会获得额外的权限。

在客户端,启动更新的命令是:

代码语言:javascript
复制
ssh -i /path/to/private/key root@server whatEverCommandYouMayImagine

如果身份验证成功,只有强制命令中包含的命令才会启动。

然后,您可以处理上载文件的Unix组/权限。对于apache,它通常打开:

代码语言:javascript
复制
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-data
票数 -1
EN
页面原文内容由Server Fault提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://serverfault.com/questions/455353

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档