【发布时间】:2020-06-26 08:58:25
【问题描述】:
我正在使用 capistrano 部署 Rails Web 应用程序。我想给网络服务器上的部署用户尽可能少的权限。除了重新启动网络服务器之外,我能够以非特权用户的身份完成所有我需要做的事情。
我在 ubuntu 服务器上执行此操作,但此问题并非特定于我的用例(rails、capistrano、部署),而且我已经看到很多解决此问题的方法似乎涉及不良的安全实践.想知道其他人是否可以审查我的解决方案并建议它是否安全?
首先,没有必要,但我不知道为什么 /etc/init.d/nginx 需要其他用户的任何(甚至读取)访问权限。如果他们需要阅读,让他们成为 root(通过 sudo 或其他方式),所以我:
chmod 750 /etc/init.d/nginx
由于所有权是所有者 root,组 root(或可以使用 chown root:root /etc/init.d/nginx 设置)只有 root 或正确 sudo'ed 的用户可以读取、更改或运行 / etc/init.d/nginx,我不会给我的部署用户任何如此广泛的权利。相反,我只会给部署用户特定的 sudo 权限来运行控制脚本 /etc/init.d/nginx。他们将无法运行编辑器来编辑它,因为他们只能执行该脚本。这意味着如果有人以部署用户的身份访问我的盒子,他们可以重新启动和停止 nginx 进程等,但他们不能做更多的事情,比如更改脚本来做很多其他邪恶的事情。
具体来说,我正在这样做:
visudo
visudo 是用于编辑 sudoers 文件的特定工具,您必须具有 sudoer 权限才能访问它。
使用 visudo,我添加:
# Give deploy the right to control nginx
deploy ALL=NOPASSWD: /etc/init.d/nginx
查看sudo man 页面,但据我了解,第一列是授予用户 sudo 权限的用户,在本例中为“部署”。 ALL 允许从所有类型的终端/登录(例如,通过 ssh)进行部署访问。最后,/etc/init.d/nginx,仅授予部署用户 root 访问权限以运行 /etc/init.d/nginx(在这种情况下,NOPASSWD 表示没有密码,我需要无人值守部署) .部署用户无法编辑脚本以使其变得邪恶,他们需要 FULL sudo 访问权限才能做到这一点。事实上,除非他们有 root 访问权限,否则没有人可以,在这种情况下会有一个更大的问题。 (我测试了用户部署后无法编辑脚本,你也应该这样做!)
大家怎么看?这行得通吗?有没有更好的方法来做到这一点?我的问题与this 和this 类似,但提供的解释比我在那里找到的要多,如果重复,对不起,如果是这样,我会删除它,尽管我也要求不同的方法。
【问题讨论】:
标签: ruby-on-rails ubuntu permissions capistrano sudo