【问题标题】:Web administration of Ejabberd with virtual box and external authentication使用虚拟盒和外部身份验证的 Ejabberd 的 Web 管理
【发布时间】:2018-10-24 16:27:49
【问题描述】:

对不起,我的长问题。只是为了弄清楚场景。 我有一台安装了 VirtualBox 的 Ubuntu 主机和一个 Ubuntu 来宾 VM 盒。来宾的 IP 地址为 192.168.56.101。这里我安装了一个 LAMP 服务器,带有一个用 PHP 编写的 Web 平台,以及 Ejabberd 16.01

这是我在主机上的 /etc/hosts:

192.168.56.101  localmessage.my.website

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

之后,我尝试利用Web平台的mySQL数据库进行Ejabberd的外部认证。我从https://github.com/leesherwood/ejabberd-php-auth 开始实现了一个PHP 文件(check_mysql.php)。我将它保存到客户机的 /var/www 目录中,我将它的所有者设置为 ejabberd:ejabberd 并启用 execute 权限。 当我通过命令行测试解决方案时(通过运行 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 的 cmets。我已经为所有者、组和其他用户设置了+x。在@Badlop 建议之后,我将 loglevel 设置为 5,并尝试了 ejabberdctl 命令。这是结果(不幸的是,我必须在我的 GoogleDrive 上链接屏幕截图):https://drive.google.com/open?id=1_jWJeulge_q6XYeM3hTGzbavRjjWp19s 请问有大神知道原因吗?

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

ejabberdctl check_password user1 localhost mypass11

我遇到了与之前在 Edit 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 脚本。同样的错误。

请帮忙。谢谢

【问题讨论】:

    标签: ejabberd


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

      而且,如果你用这个命令检查 auth,它是被接受(返回 0)还是被拒绝(返回 1)?

      $ ejabberdctl check_password user1 localhost mypass11
      $ echo $?
      0
      

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

      【讨论】:

      • Badlop,感谢您的回复。我已经为所有者、组和其他用户设置了+x。我已将 loglevel 设置为 5,并尝试了建议的命令。这是结果(不幸的是,我必须在我的 GoogleDrive 上链接屏幕截图):drive.google.com/open?id=1_jWJeulge_q6XYeM3hTGzbavRjjWp19s
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-09-30
      • 2015-07-29
      • 1970-01-01
      • 2015-06-04
      • 2015-10-03
      • 2013-12-20
      • 2023-03-19
      相关资源
      最近更新 更多