这是主机上的/ 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脚本。同样的错误。
请帮忙。感谢
答案 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的行为方式。然后使用您的自定义脚本或您所在的脚本,并查看差异。