浏览 4315 次
锁定老帖子 主题:Erlang 的分布通讯安全策略
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2007-03-28
最后修改:2008-11-20
它的节点安全设置,是通过一个magic cookie来实现的。这个文件默认放到 $HOME/.erlang.cookie ,文件内容是字符串。 当启用分布通讯的时候,这个magic cookie就很重要了。如果在命令行里面带上 -setcookie ,则在当前节点使用这个cookie值,否则会使用 $HOME/.erlang.cookie 比如现在有两台机,192.168.0.2 & 192.168.0.3,分别叫做 foo 和 bar 在 foo 输入 引用 erl -name foo@192.168.0.2 -setcookie foofoo
输出 引用 Erlang (BEAM) emulator version 5.5.2 [source] [async-threads:0] [hipe] [kernel-poll:false]
Eshell V5.5.2 (abort with ^G) (foo@192.168.0.2)1> 在 bar 输入 引用 erl -name bar@192.168.0.3 -setcookie barbar
引用 net_adm:ping('foo@192.168.0.2').
由于两个节点的cookie不一致,因此无法直接通讯,bar输出 引用 pang
而 foo 会输出警告 引用 =ERROR REPORT==== 28-Mar-2007::18:00:00 ===
** Connection attempt from disallowed node 'bar@192.168.0.3' ** 要使得bar能够跟foo通讯,可以使用 引用 erl -name bar@192.168.0.3 -setcookie foofoo
启动shell,或者在shell里面输入 引用 erlang:set_cookie('foo@192.168.0.2', 'foofoo').
这时候就可以了 引用 (bar@192.168.0.3)2> net_adm:ping('foo@192.168.0.2').
pong 而且节点间会建立了连接 引用 (bar@192.168.0.3)3> nodes().
['foo@192.168.0.2'] 要注意,之所以All or None里面的“ALL”,是因为互相连接上的节点可以拥有全部的权限,比如 引用 (bar@192.168.0.3)4> rpc:call('foo@192.168.0.2', os, cmd, ['ls']).
"bin\nChangeLog\nerlang\nerlang.ico\nlib\nstart.sh\n" 如果不幸你是用root启动,太好了,通过rpc就可以拥有全部的操作权限。。。。 因此,使用分布式通讯,特别是有客户端节点部署在普通用户机上的系统,要非常留意权限问题。更好的方法是用Socket进行通讯,将请求封装为一个 tuple,比如 {login, Name, Password},然后用 term_to_binary 发送过去,只要两边都设置好 {packet ,4} 这样的参数,接收这个 tuple 是很方便的。 网上有人说,Joe的新书里面会对安全问题进行详细的介绍。 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2007-03-29
希望楼主继续努力啊...
|
|
返回顶楼 | |