小编cod*_*oob的帖子

非特权,非root用户,用于启动或重新启动webserver服务器,例如没有root或sudo的nginx

我正在使用capistrano来部署rails web应用程序.我想尽可能少地为网络服务器上的部署用户提供权限.除了重启网络服务器之外,我能够以非特权用户的身份做我需要做的一切.

我在ubuntu服务器上这样做,但是这个问题并不是我的用例(rails,capistrano,部署)所特有的,而且我已经看到很多解决这个问题的方法似乎涉及不良的安全实践.想知道其他人是否可以审查我的解决方案并建议它是否安全?

首先,没有必要,但我不知道为什么/etc/init.d/nginx需要其他用户进行任何(甚至读取)访问.如果他们需要阅读它,让它们成为root(通过sudo或其他方式),所以我:

chmod 750 /etc/init.d/nginx
Run Code Online (Sandbox Code Playgroud)

由于所有权是所有者root,组root(或者可以设置为chown root:root /etc/init.d/nginx)只有root,或者用户正常sudo'ed,可以读取,更改或运行/ etc/init .d/nginx,我不打算给我的部署用户任何这样广泛的权利.相反,我只是给部署用户提供特定的sudo权限来运行控制脚本/etc/init.d/nginx.他们将无法运行编辑器来编辑它,因为他们只能执行该脚本.这意味着,如果有人以部署用户的身份访问我的盒子,他们可以重新启动和停止等nginx进程,但是他们不能做更多的事情,比如改变脚本来做很多其他的,邪恶的事情.

具体来说,我这样做:

visudo
Run Code Online (Sandbox Code Playgroud)

visudo是用于编辑sudoers文件的特定工具,您必须具有sudoer权限才能访问它.

使用visudo,我补充说:

# Give deploy the right to control nginx
deploy ALL=NOPASSWD: /etc/init.d/nginx
Run Code Online (Sandbox Code Playgroud)

检查sudo手册页,但据我了解,第一列是给予sudo权限的用户,在本例中为"deploy".ALL提供来自所有类型的终端/登录的部署访问(例如,通过ssh).最后,/ etc/init.d/nginx,ONLY赋予部署用户root权限以运行/etc/init.d/nginx(在这种情况下,NOPASSWD意味着没有密码,这是我无人值守部署所需的) .部署用户无法编辑脚本以使其变得邪恶,他们需要FULL sudo访问才能执行此操作.事实上,没有人可以,除非他们有root权限,在这种情况下,有一个更大的问题.(我测试过用户部署在执行此操作后无法编辑脚本,所以你应该这样做!)

你们有什么感想?这有用吗?有没有更好的方法来做到这一点?我的问题是类似这个这个,但提供了比我在那里发现,如果对不起它太重复,如果是的话,我会删除它,虽然我也要求不同的方法更多的解释.

permissions ubuntu sudo capistrano ruby-on-rails

7
推荐指数
1
解决办法
5267
查看次数

Rails加密列仍然允许搜索

我有一个rails应用程序,需要我加密数据库中的一些列.

基于许多示例,我已经拥有加密的用户密码和电子邮件.即使像我这样的菜鸟,这似乎也很容易.

具体的挑战是我正在为律师开发一个应用程序(实际上是一个atty),我想加密他们客户的名字和地址,这样如果数据库被盗,那么这些数据是不可读的.问题是最终用户(律师)希望通过客户端进行搜索.

我假设基于我的要求,尽管存在争议(尽管可能缺乏知识),但数据库中的加密是正确的方法.我认为否则在应用程序中搜索将非常困难.似乎可以设置数据库,以便密钥可以在启动时从其他位置传递到数据库中,这样密钥就不在服务器上的某个文件中.

实际上,我甚至确信我正在寻找的那种加密是可行的还是实用的.我读了一下并搜索过,但到目前为止,我找不到明确的解决方案.以下是我看过的最有前途的事情.所有这些似乎都是强大而有创意 请帮助我纠正任何错误的印象,并指出,如果存在,可能会有效的解决方案.一如既往,谢谢.

attr_encrypted

应用程序加密,但我不认为实际搜索是可能的.

pgcrypto

使用postgresql的数据库加密,但它不是Rails 4.0,我似乎无法做到这一点.不确定它会做我想做的事情.

jmazzi/crypt_keeper

使用postgresql的数据库加密,但不允许搜索可行的客户端数据.

database encryption search ruby-on-rails

5
推荐指数
1
解决办法
1716
查看次数

Ruby类方法设置

我正在浏览Ruby Koans Ruby Koans并且我在"about_class_methods.rb"中的一个地方,其中讨论了设置类方法,Koans谈论了三种方法.

编写类方法的两种主要方法是:

1:

class Demo (define/open class)
  def self.method
end
Run Code Online (Sandbox Code Playgroud)

2:

  class << self
    def class_methods
    end
  end
Run Code Online (Sandbox Code Playgroud)

公案还谈到第三种方法,我从未见过(我记得):

def Demo.class_method_third_way
end
Run Code Online (Sandbox Code Playgroud)

Q1第三种方式对我来说实际上比任何其他方式更清晰.有什么理由我不明白为什么没有人使用它?

Q2为什么我认为2的语法应该是"self << def name end"?那就是"为什么语法是这样的呢?" 类Object是否包含对所有类的引用,这是否适用于自我类的方法?

一如既往,感谢您的帮助和耐心!

ruby methods syntax class

4
推荐指数
1
解决办法
489
查看次数