使用虚拟盒和外部身份验证对Ejabberd进行Web管理

时间:2018-05-14 22:44:35

标签: ejabberd

抱歉,我的问题很长。只是想弄清楚这个场景。 我有一台Ubuntu主机,我在其中安装了VirtualBox和一个Ubuntu guest VM框。来宾的IP地址是192.168.56.101。在这里,我安装了一个LAMP服务器,其中包含一个用PHP编写的Web平台和Ejabberd 16.01

这是主机上的/ etc / hosts:

192.168.56.101  localmessage.my.website

当Ejabberd使用内部授权时,我没有任何问题。主机可以通过魅力(通过URL https://localmessage.my.website:5280/admin)访问Ejabberd Web管理面板。

之后,我尝试利用Web平台的mySQL数据库进行Ejabberd的外部身份验证。我从https://github.com/leesherwood/ejabberd-php-auth开始实现了一个PHP文件(check_mysql.php)。我将它保存到来宾机的/ var / www目录中,我将其所有者设置为ejabberd:ejabberd并启用执行权限。 当我通过命令行测试解决方案时(通过运行 php /var/www/check_mysql.php 然后写入提示 00auth:username:servername:password ,通过获取来自https://github.com/leesherwood/ejabberd-php-auth/tree/master/examples/Collection)的灵感,它的确有效。 但是,当我尝试从主机访问Ejabberd的Web管理面板时,我收到授权错误和请求管理员凭据的循环。 以下是来宾计算机上的/etc/ejabberd/ejabberd.yml配置文件:

loglevel: 4

log_rotate_size: 0
log_rotate_date: ""

log_rate_limit: 100

hosts:
  - "localhost"
  - "localmessage.my.website"

listen: 
  - 
    port: 5222
    ip: "::"
    module: ejabberd_c2s
    certfile: "/etc/ejabberd/ejabberd.pem"
    starttls: true
    protocol_options:
      - "no_sslv3"
    ##   - "no_tlsv1"
    max_stanza_size: 65536
    shaper: c2s_shaper
    access: c2s
    zlib: true
    resend_on_timeout: if_offline
  - 
    port: 5269
    ip: "::"
    module: ejabberd_s2s_in
  - 
    port: 5280
    ip: "::"
    module: ejabberd_http
    request_handlers:
      "/websocket": ejabberd_http_ws
    ##  "/pub/archive": mod_http_fileserver
    web_admin: true
    http_bind: true
    ## register: true
    captcha: true
    tls: true
    certfile: "/etc/ejabberd/ejabberd.pem"

disable_sasl_mechanisms: "digest-md5"

s2s_use_starttls: optional
s2s_certfile: "/etc/ejabberd/ejabberd.pem"
s2s_protocol_options:
  - "no_sslv3"

auth_password_format: plain
auth_method: external
extauth_program: "/var/www/check_mysql.php"

shaper:
  normal: 1000
  fast: 50000

max_fsm_queue: 1000

acl:
  admin:
     user:
         - "admin": "localhost"
  local: 
    user_regexp: ""
  loopback:
    ip:
      - "127.0.0.0/8"
access:
  max_user_sessions: 
    all: 10
  max_user_offline_messages: 
    admin: 5000
    all: 100
  local: 
    local: allow
  c2s: 
    blocked: deny
    all: allow
  c2s_shaper: 
    admin: none
    all: normal
  s2s_shaper: 
    all: fast
  announce: 
    admin: allow
  configure: 
    admin: allow
  muc_admin: 
    admin: allow
  muc_create: 
    local: allow
  muc: 
    all: allow
  pubsub_createnode: 
    local: allow
  register: 
    all: allow
  trusted_network: 
    loopback: allow

language: "en"

modules: 
  mod_adhoc: {}
  mod_admin_extra: {}
  mod_announce: # recommends mod_adhoc
    access: announce
  mod_blocking: {} # requires mod_privacy
  mod_caps: {}
  mod_carboncopy: {}
  mod_client_state: {}
  mod_configure: {} # requires mod_adhoc
  mod_disco: {}
  mod_echo: {}
  mod_irc: {}
  mod_http_bind: {}
  ## mod_http_fileserver:
  ##   docroot: "/var/www"
  ##   accesslog: "/var/log/ejabberd/access.log"
  mod_last: {}
  mod_muc: 
    ## host: "conference.@HOST@"
    access: muc
    access_create: muc_create
    access_persistent: muc_create
    access_admin: muc_admin
  ## mod_muc_log: {}
  mod_muc_admin: {}
  ## mod_multicast: {}
  mod_offline: 
    access_max_user_messages: max_user_offline_messages
  mod_ping: {}
  ## mod_pres_counter:
  ##   count: 5
  ##   interval: 60
  mod_privacy: {}
  mod_private: {}
  ## mod_proxy65: {}
  mod_pubsub: 
    access_createnode: pubsub_createnode
    ignore_pep_from_offline: true
    last_item_cache: false
    plugins: 
      - "flat"
      - "hometree"
      - "pep" # pep requires mod_caps
  mod_register: 
    welcome_message: 
      subject: "Welcome!"
      body: |-
        Hi.
        Welcome to this XMPP server.
    ip_access: trusted_network
    access: register
  mod_roster: {}
  mod_shared_roster: {}
  mod_stats: {}
  mod_time: {}
  mod_vcard:
    search: false
  mod_version: {}
allow_contrib_modules: true

请问你能弄明白这个错误的原因吗?

编辑1 我检查了@Badlop的评论。我已经为所有者,群组和其他用户设置了+x。在@Badlop建议之后,我将loglevel设置为5,并尝试了 ejabberdctl 命令。结果如下(不幸的是,我必须在我的GoogleDrive上链接屏幕截图):https://drive.google.com/open?id=1_jWJeulge_q6XYeM3hTGzbavRjjWp19s 有人能找出原因吗?

编辑2 使用Ejabberd提供的Perl脚本以及我的脚本,我运行命令

ejabberdctl check_password user1 localhost mypass11

我获得了与之前在编辑1 中描述的相同的错误。 显然,我分配了ejabberd:ejabberd拥有,并为每个脚本启用了+ x用户,组和其他人。 我检查了/var/log/ejabberd/error.log和/var/log/ejabberd.log。两者报告相同的错误:

@extauth:loop:142 extauth script has exitted abruptly with reason 'normal'

我在文件夹/ etc / ejabberd中移动了Perl以及我的PHP脚本。同样的错误。

请帮忙。感谢

2 个答案:

答案 0 :(得分:0)

  

当我通过命令行[...]测试解决方案时,它可以工作。

并且,如果使用此命令检查auth,是接受(返回0)还是拒绝(返回1)?

$ ejabberdctl check_password user1 localhost mypass11
$ echo $?
0

请注意,ejabberd不执行" php yourscript.php",它直接执行" yourscript.php"。这意味着您的脚本必须是可执行文件,并且运行ejabberd的系统用户必须具有执行该文件的权限。对于测试,您可以授予每个人执行该文件的权限。另外,将ejabberd loglevel设置为5,它可能会提供一些关于你的问题的线索。

答案 1 :(得分:0)

脚本中存在一些问题,或者至少是ejabberd如何连接它。尝试使用elabberd附带的小示例脚本,用Perl编写。如果可行,请查看脚本和ejabberd的行为方式。然后使用您的自定义脚本或您所在的脚本,并查看差异。