【发布时间】: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