Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Skrypt zmiany hasła w roundcube
kolaborek
post
Post #1





Grupa: Zarejestrowani
Postów: 44
Pomógł: 0
Dołączył: 12.10.2010

Ostrzeżenie: (0%)
-----


Witajcie.

Od razu przepraszam, jeżeli nie można umieszczać tutaj tego typu wątków i ewentualnie proszę o zadziałanie moderatora.

Mam zainstalowany serwer pocztowy na macierzy Synology. Doinstalowałem tam Roundcube'a aby mieć panel www. W roundcubie chciałem włączyć plugin do zmiany haseł przez użytkowników, ale nie działa. Od kilkunastu dni się z tym męczę. Przeglądnąłem fora dotyczące mojej macierzy, roundcubea i ogólnie googla. Nie udało się. Z uwagi na to, że plugin jest w PHP pomyślałem, że najlepiej będzie uderzyć tutaj. A więc.

Jest to plugin, który poprzez wykonanie polecenia systemowego ma zmieniać użytkownikom hasła. W konfiguracji ustawiającej plugin mam polecenie, które ma być wykonywane na macierzy:
  1. // chpasswd Driver options
  2. // ---------------------
  3. // Command to use
  4. $rcmail_config['password_chpasswd_cmd'] = 'sudo /usr/syno/sbin/synouser --setpw';


Natomiast driver obsługujący to polecenie jest poniżej:
  1. <?php
  2.  
  3. /**
  4.  * chpasswd Driver
  5.  *
  6.  * Driver that adds functionality to change the systems user password via
  7.  * the 'chpasswd' command.
  8.  *
  9.  * For installation instructions please read the README file.
  10.  *
  11.  * @version 2.0
  12.  * @author Alex Cartwright <acartwright@mutinydesign.co.uk>
  13.  */
  14.  
  15. class rcube_chpasswd_password
  16. {
  17. public function save($currpass, $newpass)
  18. {
  19. $cmd = rcmail::get_instance()->config->get('password_chpasswd_cmd');
  20. $username = $_SESSION['username'];
  21.  
  22. $handle = popen($cmd, "w");
  23. fwrite($handle, "$username $newpass\n");
  24.  
  25. if (pclose($handle) == 0) {
  26. return PASSWORD_SUCCESS;
  27. }
  28. else {
  29. raise_error(array(
  30. 'code' => 600,
  31. 'type' => 'php',
  32. 'file' => __FILE__, 'line' => __LINE__,
  33. 'message' => "Password plugin: Unable to execute $cmd"
  34. ), true, false);
  35. }
  36.  
  37. return PASSWORD_ERROR;
  38. }
  39. }
  40.  


Gdy wejdę na użytkownika nobody (bo na takim działa Apache) i wydam polecenie
sudo /usr/syno/sbin/synouser --setpw użytkownik hasło
To następuje poprawna zmiana hasła.
Natomiast z poziomu roundcuba wyskakuje błąd:
PHP Error in /volume1/web/roundcube/plugins/password/drivers/chpasswd.php (32): Password plugin: Unable to execute sudo synouser --setpw
Wygląda na błędne uprawnienia, ale już nie wiem komu i jakie mam ponadawać, aby to działało... Bardzo proszę o pomoc.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 8)
mar1aczi
post
Post #2





Grupa: Zarejestrowani
Postów: 731
Pomógł: 141
Dołączył: 9.05.2011
Skąd: śląskie

Ostrzeżenie: (0%)
-----


Skonfiguruj sudo tak, aby użytkownik nobody miał prowo do uruchamiania polecenia
Kod
/usr/syno/sbin/synouser
bez podawania hasła.

Ten post edytował mar1aczi 20.02.2013, 20:35:37


--------------------
Szanuj innych czas! Kliknij , gdy pomocną wskazówkę otrzymasz.
Go to the top of the page
+Quote Post
kolaborek
post
Post #3





Grupa: Zarejestrowani
Postów: 44
Pomógł: 0
Dołączył: 12.10.2010

Ostrzeżenie: (0%)
-----


Dzięki za zainteresowanie smile.gif

Poprzez visudo dodałem wcześniej już komendy:

nobody ALL=NOPASSWD:/usr/syno/sbin/synouser
nobody ALL=NOPASSWD:/opt/bin/sudo

Gdy jestem na nobody to nie muszę podawać hasła roota do uruchomienia polecenia sudo. W poniższej komendzie wydawanej z konta nobody:
sudo /usr/syno/sbin/synouser --setpw użytkownik hasło
podaje nazwę użytkownika któremu chcę zmienić hasło, no i hasło jakie chcę mu ustawić.

Z poziomu konsoli to działa. Przez www nie ....
Go to the top of the page
+Quote Post
mar1aczi
post
Post #4





Grupa: Zarejestrowani
Postów: 731
Pomógł: 141
Dołączył: 9.05.2011
Skąd: śląskie

Ostrzeżenie: (0%)
-----


Co pojawia się w logach serwera www podczas próby zmiany hasła?


--------------------
Szanuj innych czas! Kliknij , gdy pomocną wskazówkę otrzymasz.
Go to the top of the page
+Quote Post
kolaborek
post
Post #5





Grupa: Zarejestrowani
Postów: 44
Pomógł: 0
Dołączył: 12.10.2010

Ostrzeżenie: (0%)
-----


Przepraszam, że tak długo nie odpowiadałem, ale miałem gorący czas w pracy i nie mogłem się zająć tematem.
Wracając do sedna. Apache wyrzuca coś takiego
Cytat
172.24.96.9 - - [04/Mar/2013:11:40:55 +0100] "POST /roundcube/?_task=settings&_action=plugin.password-save HTTP/1.1" 200 2623 "http://172.24.96.18/roundcube/?_task=settings&_action=plugin.password-save" "Opera/9.80 (Windows NT 6.1) Presto/2.12.388 Version/12.14"
172.24.96.9 - - [04/Mar/2013:11:41:55 +0100] "GET /roundcube/?_task=settings&_action=keep-alive&_remote=1&_unlock=0&_=1362393715444 HTTP/1.1" 200 52 "http://172.24.96.18/roundcube/?_task=settings&_action=plugin.password-save" "Opera/9.80 (Windows NT 6.1) Presto/2.12.388 Version/12.14"


Zauważyłem jeszcze, że gdy dodam polecenie "echo" do linii w konfigu wywołującej polecenie
  1. // chpasswd Driver options
  2. // ---------------------
  3. // Command to use
  4. $rcmail_config['password_chpasswd_cmd'] = 'echo sudo /usr/syno/sbin/synouser --setpw';

to wyskakuje komunikat o poprawnie zapisanym haśle. Oczywiście jest to zmyłka, bo hasło zostaje stare....
Go to the top of the page
+Quote Post
mar1aczi
post
Post #6





Grupa: Zarejestrowani
Postów: 731
Pomógł: 141
Dołączył: 9.05.2011
Skąd: śląskie

Ostrzeżenie: (0%)
-----


Zapisz poniższy kod do pliku i sprawdź czy nie ma na liście funkcji popen
Kod
error_reporting(E_ALL);
$disabled_functions = ini_get('disable_functions');
if ($disabled_functions!='')
{
$arr = explode(',', $disabled_functions);
sort($arr);
echo 'Disabled Functions:
';
for ($i=0; $i&lt;count($arr); $i++)
{
echo $i.' - '.$arr[$i].'&lt; br&gt;';
}
}
else
{
echo 'No functions disabled';
}


--------------------
Szanuj innych czas! Kliknij , gdy pomocną wskazówkę otrzymasz.
Go to the top of the page
+Quote Post
kolaborek
post
Post #7





Grupa: Zarejestrowani
Postów: 44
Pomógł: 0
Dołączył: 12.10.2010

Ostrzeżenie: (0%)
-----


Poprawiłem nawiasy w skrypcie (jak poniżej) i w przeglądarce wyświetliło mi "No functions disabled".

  1. $disabled_functions = ini_get('disable_functions');
  2. if ($disabled_functions!='')
  3. {
  4. $arr = explode(',', $disabled_functions);
  5. sort($arr);
  6. echo 'Disabled Functions:';
  7. for ($i=0; $i<count($arr); $i++)
  8. {
  9. echo $i.' - '.$arr[$i].'< br&gt;';
  10. }
  11. }
  12. else
  13. {
  14. echo 'No functions disabled';
  15. }


Zastanawiam się, czy to Synology nie zrobiło jakiegoś brzydkiego zabezpieczenia, któro teraz daje o sobie znać ...
Go to the top of the page
+Quote Post
mar1aczi
post
Post #8





Grupa: Zarejestrowani
Postów: 731
Pomógł: 141
Dołączył: 9.05.2011
Skąd: śląskie

Ostrzeżenie: (0%)
-----


Mnie już nic nie przychodzi, gdzie może być przyczyna.

Ten post edytował mar1aczi 5.03.2013, 13:37:51


--------------------
Szanuj innych czas! Kliknij , gdy pomocną wskazówkę otrzymasz.
Go to the top of the page
+Quote Post
kolaborek
post
Post #9





Grupa: Zarejestrowani
Postów: 44
Pomógł: 0
Dołączył: 12.10.2010

Ostrzeżenie: (0%)
-----


W każdym razie dzięki wielkie za zaoferowaną pomoc i chęci wink.gif
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 21.08.2025 - 18:25