PHP ejabberd kullanıcı oluştur

3 Cevap php

Ben bir PHP komut dosyası bir ejabberd kullanıcı oluşturmanız gerekir. Ben de önceden tanımlanmış bir ortak liste için yeni kullanıcı eklemek için gerekiyor.

Ben sadece ejabberdctl exec() veya daha iyi bir yolu var çağırayım mı?

3 Cevap

ejabberdctl kadar bu özel durumda kolay değildir. Diğer seçenekler şunlardır:

  • PHP tam bir istemci XMPP uygulamak (!)

  • Istekleri ve proxy Erlang bir modül uygulamak: - (!) <> PHP dahil olacağını Erlang iletişim dizme bir soket ve daha yoluyla olması gerekir

Here's my final solution:

jldupont's advice o ejabberdctl kolay çözüm olurdu sayesinde, ben koştu ve bir çalışma çözüm var engellerin üzerinden bastırılır.

Varsayılan olarak, apache kullanıcı başarıyla ejabberdctl çalıştırın (ve iyi bir nedenle) için doğru ayrıcalıklara sahip değil. Yani çalışmak için sırayla, sudo ile aramak zorunda. Ama ... sudo 2 sorunları sunan bir parola gerektirir:

  1. Apache kullanıcı parolası yoktur.
  2. Eğer olsaydı bile, PHP girmek için hiçbir yolu yoktur.

(Ubuntu için) Çözüm - sonunda bu satırı eklemek /etc/sudoers:

www-data ALL= (ejabberd) NOPASSWD: /usr/sbin/ejabberdctl

Sudoers dosyası ve ejabberdctl yolu, diğer Linux dağıtımlar için değişebilir. Bu apache kullanıcı (www-data), sadece ejabberdctl yükseltilmiş ayrıcalıklarla ve bir şifre gerektirmeden çalıştırmak için izin verir.

Kalan tüm PHP kodu:

<?php
    $username = 'tester';
    $password = 'testerspassword';
    $node = 'myserver.com';
    exec('sudo -u ejabberd /usr/sbin/ejabberdctl register '.$username.' '.$node.' '.$password.' 2>&1',$output,$status);
    if($output == 0)
    {
        // Success!
    }
    else
    {
        // Failure, $output has the details
        echo '<pre>';
        foreach($output as $o)
        {
            echo $o."\n";
        }
        echo '</pre>';
    }
?>

Security

Bu sadece tek bir komut www-data ile çalıştırmak için izin konum olsa bile, bu önemli bir güvenlik riski gelmez dikkat etmek önemlidir. Bu yaklaşımı kullanırsanız, sadece herkes bunu yürütmek yapamaz böylece kimlik çeşit arkasında PHP kodu korumak emin olmak gerekir. Bariz güvenlik riskleri ötesinde, Service saldırısı Reddi için sunucu açabilir.

Eğer XMPP protokolü içinde PHP kullanarak bunu yapmanın bir temiz ve güvenli bir şekilde istiyorsanız, bu örnek komut ile çalışma tavsiye edecek register_user.php. Bu Jaxl PHP Kütüphanesi içinde bulunabilir bir örnektir.

Jaxl kütüphane indirin ve aşağıdaki gibi kullanın:

JAXL $ php examples/register_user.php localhost
Choose a username and password to register with this server
username:test_user
password:test_pass
registration successful
shutting down...
JAXL $