phpPgAdmin Probleme

Status
Für weitere Antworten geschlossen.

thedude

Benutzer
Mitglied seit
30. Nov 2009
Beiträge
2.244
Punkte für Reaktionen
2
Punkte
84
Ich hab mal ne generelle Frage. Müssen PHP Scripte die auf die PGSQL Datenbank der DS zugreifen wollen zwinged unterhalb von /usr/syno/synoman/phpsrc/ liegen (mit allem Zip Zap der im wiki beschrieben ist)? Sprich Scripte die über die "normale" Webstation laufen - in /volume1/web/ haben keinen Zugriff?

danke
dude
 

itari

Benutzer
Mitglied seit
15. Mai 2008
Beiträge
21.900
Punkte für Reaktionen
14
Punkte
0
Ich hab mal ne generelle Frage. Müssen PHP Scripte die auf die PGSQL Datenbank der DS zugreifen wollen zwinged unterhalb von /usr/syno/synoman/phpsrc/ liegen (mit allem Zip Zap der im wiki beschrieben ist)? Sprich Scripte die über die "normale" Webstation laufen - in /volume1/web/ haben keinen Zugriff?

Ja, das scheint man wohl nicht umgehen zu können. Ist in der PHP-Lib fest einkompiliert ... offensichtlich liegt es also am PHP, nicht am Postgres. Ich behelfe mir im Moment damit, dass ich in /usr/syno/synoman/phpsrc ein PHP-Datenbank-Zugriffs-Skript (DB-Treiber) abgelegt habe und dieses per symbolische Link in mein Anwendungsverzeichnis hineinverlinke.

Itari
 

Hruendel

Benutzer
Mitglied seit
14. Jun 2008
Beiträge
374
Punkte für Reaktionen
1
Punkte
24
PHPPgAdmin funktioniert auch aus /volume1/web/, nur einloggen kann man sich dann als root nicht. Teils ist das durch Konfiguration am PHPPgAdmin bediengt - seine Sicherheitsparanoja, könnte man umgehen. Teils werden in der PgSQL conf-Dtei die Zugrieffsrechte (Quellen) eingestellt. Unter Debian ist es die Datei /etc/postgresql/8.3/main/pg_hba.conf.

Unter Debian sieht der Abschnitt in etwa so aus:

# TYPE DATABASE USER CIDR-ADDRESS METHOD

# "local" is for Unix domain socket connections only
local all all ident sameuser
# IPv4 local connections:
host all all 127.0.0.1/32 md5
# IPv6 local connections:
host all all ::1/128 md5
Es ist etwas umständlicher und gefährlicher da etwas zu ändern.
 
Zuletzt bearbeitet:

itari

Benutzer
Mitglied seit
15. Mai 2008
Beiträge
21.900
Punkte für Reaktionen
14
Punkte
0
PHPPgAdmin funktioniert auch aus /volume1/web/, nur einloggen kann man sich dann als root nicht.

Sinn macht der phppgadmin eigentlich ja nur dann, wenn man damit richtig administrieren kann ... und der Postgres-Admin ist bei mir der User 'admin'.

Ich hab das nie anders hinbekommen, obwohl ich viel mit der pg_hba.conf herumgespielt habe. Warum? Weil ich keinen 2. User außer dem 'admin' kenne, mit dem ich mich hätte anmelden können. Vielleicht kannst du da mal mehr Anleitung zu geben, was man genau wie konfigurieren muss, damit man z. B. per PHP auch aus einem anderen Verzeichnis zugreifen kann. Bei mir kommt immer eine eher seltsame Fehlermeldung und beim Durchforsten der PHP-Lib ist die dann auch wieder aufgetaucht (und nur dort). Mach einfach mal ein kleines PHP-Beispiel, welches dann von /volume1/web her ausgeführt werden kann und auf eine Postgres-DB zugreifen kann.

Itari
 

Hruendel

Benutzer
Mitglied seit
14. Jun 2008
Beiträge
374
Punkte für Reaktionen
1
Punkte
24
Ich hab das nie anders hinbekommen, obwohl ich viel mit der pg_hba.conf herumgespielt habe. Warum? Weil ich keinen 2. User außer dem 'admin' kenne, mit dem ich mich hätte anmelden können.

Itari
:D - ich muss mit den Trennen in den Augen lachen, Sorry! Habe an einem großen OpenSource-Projekt gearbeitet, der auf PgSQL aufbaut. Zugriffsrechte bei PgSQL ist ein Sonderthema.

In etwa geht es so:
Man muss einen PgSQL-Benutzer anlegen, im System muss er nicht existieren.
Diesem Benutzer müssen die Zugriffsrechte an den einzelnen Datenbanken vergeben werden. Dann müssen die Zugriffsquellen in pg_hba.conf konfiguriert werden (woher man zugreifen darf). Gegebenfalls (fast immer) muss auch der User in pg_hba.conf eingetragen werden.

User bei PgSQL anlegen
Rich (BBCode):
su - postgres
createuser -d -P deinuser

Passwort vergeben, sonnst kommt man nicht weiter.
Rich (BBCode):
psql -U deinuser (oder postgres)
ALTER USER postgres WITH PASSWORD 'deinpostgrePasswort';

dann pg_hba.conf in etwa so. Da muss man sich über pg_hba.conf genauer informieren(hab jetzt nichts zu Hand). :

Rich (BBCode):
# TYPE  DATABASE    USER        CIDR-ADDRESS                 METHOD
host    all         postgres    127.0.0.1/32                 md5
local   all         deinuser                                 password
host    all         deinuser    127.0.0.1/32                 password

Host ist klar, user auch. Dann die Quell-IP. Dann Indentifikationsart - lehr sollte alles gestatten.
Dann Restart:
Rich (BBCode):
/etc/init.d/postgresql-8.3 restart

Alles bezieht sich auf Debian. Und wie gesagt bei syno bin ich mir nicht so sicher.

Am besten würde ich versuchen mit PGAdmin3 darauf zu zugreifen um zu konfigurieren. Das verschaft mehr Überblick. Das Programm gibt es auch für Windows, is aber recht zickig. Zugriffsrechte bei pg_hba.conf muss man aber auch einstellen, da man von außen zugreift.
 
Zuletzt bearbeitet:

Hruendel

Benutzer
Mitglied seit
14. Jun 2008
Beiträge
374
Punkte für Reaktionen
1
Punkte
24
Vergessen - an den Datenbanken muss nam noch die Userrechte vergeben. Habs jetzt nicht zur Hand. Würde aber von postgresql alles machet.

Übrigens - "postgres" ist der root oder admin unter PgSQL.
 

itari

Benutzer
Mitglied seit
15. Mai 2008
Beiträge
21.900
Punkte für Reaktionen
14
Punkte
0
Hi Hruendel,

ich hab deswegen so nachgefragt, weil ich außer auf der DS sonst auch keine Probleme mit dem PostgreSQL habe ...

Aber im Einzelnen:

Bild 1 und 2 zeigen, dass es nur einen User namens 'admin' gibt mit dem ich mich auch unter phppgadmin anmelden musste (weil es halt keinen anderen gab). Nebenbei: Es gibt auch auf der DS keinen Linux-User namens 'postgres'.

Liegt das folgende Skript nun außerhalb des Pfades /usr/syno/synoman/phpsrc, dann produziert es die in Bild 3 gezeigten Fehlermeldungen ("PostgreSQL is not a open service" - "Connection attempt failed"). Liegt das Skript in /usr/syno/synoman/phpsrc, ist alles ok.

PHP:
<?php  
$db_handle = pg_connect("host=localhost user=admin dbname=test1");  
if ($db_handle) {  
   echo 'Connection attempt succeeded.';  
} else {  
   echo 'Connection attempt failed.';  
}
/*print '<br>Version: '; var_dump(pg_version());
print '<br>tty: '; var_dump(pg_tty()); 
print '<br>port: '; var_dump(pg_port());
print '<br>parameter-status: '; var_dump(pg_parameter_status('is_superuser'));
print '<br>options: '; var_dump(pg_options());

print'<br>'; var_dump(pg_meta_data($db_handle, "blog_article"));
*/
//$sql = "SELECT * FROM information_schema.tables order by 2,3";
//$sql = "SELECT * FROM information_schema.schemata";
//$sql = "SELECT * FROM pg_database";  // liste aller datenbanken
//$sql = "SELECT * FROM pg_tables order by 1,2";
//$sql = "SELECT * FROM information_schema.columns where table_name = 'blog_article'";
//$sql = "SELECT pg_size_pretty(pg_total_relation_size('blog_article'))";
//$sql = "select * from pg_class, pg_index where pg_class.oid = pg_index.indexrelid" ;
$sql = "select * FROM information_schema.table_constraints where table_name = 'tab3'";
//$sql = "select * from  information_schema.key_column_usage order by 6,7";
/*
$sql = "select i.column_name, i.udt_name, i.is_nullable as Field "
     . "from information_schema.columns i "
     . "left join (select u.column_name as column, u.table_name as tname, constraint_type from information_schema.constraint_column_usage u, information_schema.table_constraints c where "
     . "u.constraint_name = c.constraint_name and c.constraint_type <> 'FOREIGN KEY') z "
     . "on i.column_name = z.column and i.table_name = z.tname "
     . "where i.table_name = 'photo_comment'";
*/
$result = pg_query($sql);
$line1=true;
echo "<table>\n";
while ($line = pg_fetch_array($result, null, PGSQL_ASSOC)) {
  if ($line1){
    echo "\t<tr>\n";
    foreach ($line as $col_name => $col_value) {
        echo "\t\t<td>$col_name</td>\n";
    }
    echo "\t</tr>\n";
    $line1=false;
  }
    echo "\t<tr>\n";
    foreach ($line as $col_value) {
        echo "\t\t<td>$col_value</td>\n";
    }
    echo "\t</tr>\n";
}
echo "</table>\n";

pg_close($db_handle);  
?>

Wie gesagt, dass ist Synology DiskStation spezifisches Zeugs ... wenn du Ideen hast ... ich würde mittels PHP gerne anders auf die Postgres-Datenbanken zugreifen wollen, schaffe das aber nur auf dem von mir aufzeigten Umwegen mit einem verlinkten Datenbank-(Treiber)-Skript.

Itari

.
 

Anhänge

  • phppgadmin1.jpg
    phppgadmin1.jpg
    40,7 KB · Aufrufe: 61
  • phppgadmin2.jpg
    phppgadmin2.jpg
    25,2 KB · Aufrufe: 60
  • phppgadmin3.jpg
    phppgadmin3.jpg
    33,7 KB · Aufrufe: 60

Hruendel

Benutzer
Mitglied seit
14. Jun 2008
Beiträge
374
Punkte für Reaktionen
1
Punkte
24
Auszug aus der syno - pg_hba.conf

Sie ist unter /usr/syno/pgsql/etc/pg_hba.conf zu finden. Im Firmware ist sie nicht vorhanden. Sie wird währen der Installation angelegt. Dort ist auch postgresql.conf zu finden.

Rich (BBCode):
# Type User CIDR-ADDRESS       METHOD
    local  all    all                       trust
    host  all    all    127.0.0.1/32   trust

Und wie man sieht sind local alle user unter Methode trust (trust - keine Authentifikation notwendig) zugelassen.

Alle hosts und user sind auch zugelassen, ABER nur von der IP 127.0.0.1/32. was wiederrum localhost bedeutet. Für die Anmeldung an die DB ist weiterhin user und passwort notwendig. Diese werden in einem der unzähligen Scripte bei der Installtion angelegt und sind in den conf-dateien nich direkt verfügbar.

Auf der DS laufen mehrere apache-hosts. Über localhost ist nur Konfiguration/Sytemzugrif möglich. Der apache-Host aus dem Ordner ../web läuft unter den anderen Namen und IP-adresse und ist KEIN localhost. sonst würde man unter IP XXX.XXX ... die DS im netzwerk nicht finden.

Wenn man von einem anderem Ort auf PostgreSQL zugreifen will muss man bei den hosts die IP rauslöschen (ich würde die Zeile localhost kopieren).

Zusätzlich gibt es in der PHP-Konfigurationsdatei von PHPPgAdmin einen Punkt der Zugriffe nur local (localhost) gestattet. Weiß nicht mehr wie dieser Eintrag heist, Server haben Betriebspause, habe keinen Bock danach zu suchen. In der Conf-Datei von PHPPgAdmin muss es aber beschrieben sein.

Und du hast Recht - User postgres schein es bei Synology nicht zu geben. Ist warscheinlich einfach gelöscht. Den braucht man auch nicht, für jeweilige Programme gibt es einzelne User. Auserdem User Admin scheint da besondere Rechte zu haben.

Hoffe habe etwas Übersicht geschafen. Was mich aber abhält irgend welche Anwendungen mit PgSQL an der Synology zu betreiben ist das Fehlen der Backupmöglichkeit.
 

itari

Benutzer
Mitglied seit
15. Mai 2008
Beiträge
21.900
Punkte für Reaktionen
14
Punkte
0
Auf das Phänomen, dass das gleiche PHP-Skript, nur an einer anderer Stelle positioniert (natürlich mit dem gleichen Apachen - dem sys-Apachen - ausgeführt), mal funktioniert und mal nicht, biste jetzt nicht wirklich eingegangen. :(

Wie gesagt, ich spiele ja schon eine zeitlang mit dem PostgreSQL auf der DS und habe so ziemlich alles ausprobiert ... wenn du den postgresql per IPKG installierst, haste das Problem nicht mehr. Du kannst ja auch mal zum Spass nach der Fehlermeldung googeln und wirst nicht wirklich was finden ;)

Anmerkung: die von Synology angelegten Datenbanken werden schon per rsync gebackupt; kann man so einstellen. Kannst auch anschauen wie es gemacht wird: strings /usr/syno/bin/synophoto_backup

Itari
 

Hruendel

Benutzer
Mitglied seit
14. Jun 2008
Beiträge
374
Punkte für Reaktionen
1
Punkte
24
Ich denke, mit richtigen Einstellungen in pg_hba.conf und extra_login_security=false in der Konfigurationsdatei von PHPPgAdmin sollte es laufen.
... das ist die PHPPgAdmin-Sicherheitsparanoja.
 
Zuletzt bearbeitet:

itari

Benutzer
Mitglied seit
15. Mai 2008
Beiträge
21.900
Punkte für Reaktionen
14
Punkte
0
Ich denke, mit richtigen Einstellungen in pg_hba.conf und extra_login_security=false in der Konfigurationsdatei von PHPPgAdmin sollte es laufen.
... das ist die PHPPgAdmin-Sicherheitsparanoja.

Würdest du es bitte mal mit einem kleinen PHP-Skript testen, wenn du Zeit hast?

Itari
 

thedude

Benutzer
Mitglied seit
30. Nov 2009
Beiträge
2.244
Punkte für Reaktionen
2
Punkte
84
Also bei mir bringt das editieren und danach das reloaden überhaupt nix. Ein einfaches Script was nur den pgsql Server kontaktieren soll und in /volume1/web liegt bricht immer mit der gewohnten meldung ab:

Warning: pg_connect() [function.pg-connect]: PostgreSQL is not a open service. in /volume1/web/test.php on line 3

gruss
dude
 

Hruendel

Benutzer
Mitglied seit
14. Jun 2008
Beiträge
374
Punkte für Reaktionen
1
Punkte
24
Also...
Habe hier http://wwwmaster.postgresql.org/download/mirrors-ftp/pgadmin3/release/v1.2.2/win32/pgadmin3-1_2_2.zip PgAdmin heruntergeladen. Es ist eine Windowsversion, installiert.

In der pg_hba.conf am Ende die Zeile hinzugefügt:

Rich (BBCode):
host  all all 0.0.0.0/0 trust
Gespeichert, DS neu gestartet. Es sollte die Kombination 0.0.0.0/0 statt lehr rein. Habe eitas falsches erzählz.

Jetzt kann ich auf DS von aussen (Windows PC) zugreifen. Benutzer ist Admin, Passwort ist DS-Passwort. Jetzt sehe ich alle Datenbanken, und alle user - es gibt zwei (admin und roundcube).

Mit PHPPgAdmin klapt es noch nicht, muss ich gucken wo der Hund vergraben ist. Im PgSQL auf jeden Fall nicht mehr, da es sogar von aussen geht. PPHPPgSQL gucke ich gleich noch. Es kann am PHPPgSQL selbst liegen oder an sonstiger konfiguration.

Nachtarg:
Interessante Meldung - PHPPgAdmin - Sicherheitsparanoja. Habe in der confdatei server 127.0.0.1 eingetragen, der meckert :):

Code:
Es wurde versucht, mit einem ungültigen Server-Parameter eine Verbindung herzustellen. 
Möglicherweise versucht jemand, in Ihr System einzubrechen.

Aus dem Ordner .../web geht der PHPPgAgmin nicht. Da schein OpenBasedirecoty ist Spiel zu kommen.
 
Zuletzt bearbeitet:

itari

Benutzer
Mitglied seit
15. Mai 2008
Beiträge
21.900
Punkte für Reaktionen
14
Punkte
0
Ich versuche es nochmal zu erklären:

Es hat nichts mit der Postgres-Installation zu tun. Auf den Postgres-DB-Server kann man hübsch zugreifen. Es hat vermutlich auch nichts mit der Postgres-Zugangskonfiguration zu tun. Und es hat vermutlich auch nichts mit der Konfiguration des phppgadmin-Tools zu tun.

Warum? Sobald der phppgadmin (oder andere Skripte) im richtigen Verzeichnis stehen (/usr/syno/synoman/phpsrc) geht es ja. Dies wäre ja bei einer Fehlkonfiguration zumindest nicht wahrscheinlich, denn über irgendwelche Pfadeinstellungen wird ja in den Konfiguarationen nichts ausgesagt. Es geht halt nur nicht, wenn die PHP-Skripte woanders stehen.

Dieses Verhalten kann in meinen Augen nur so erklärt werden, dass es etwas mit der PHP-Lib der Firmware auf der DS zu tun hat, welche einen Postgres-Zugriff verhindert, wenn das aufrufende Skript in einem falschen Pfad steht. Das Openbasedir-Pattern ist sowieso bei mir immer leer, damit ich auf alles zugreifen kann. Ein per IPKG-installierter Postgres-Server ist gegenüber diesen PHP-Skripte nämlich aufgeschlossen.

Itari
 

Hruendel

Benutzer
Mitglied seit
14. Jun 2008
Beiträge
374
Punkte für Reaktionen
1
Punkte
24
Es ist möglich was du da schreibst. Was heist OpenBaseDirectory? Das Ding sperrt den Script in dem vorgegebenen Verzeichniss ein.

Hast Recht, es geht auch nicht wenn ich open_base komplett auschalte. Ich musste den ganzen Triad zunächst durchlesen.
 
Zuletzt bearbeitet:

Kauabunga

Benutzer
Mitglied seit
18. Jul 2009
Beiträge
105
Punkte für Reaktionen
0
Punkte
16
Update auf DSM3.0

Hallo zusammen.
Nur zur Info:
Beim update auf die DSM 3.0 löscht es einem die phpPgAdmin-Installation.

Die Installationsanleitung in der Wiki funktioniert immer noch.
Allerdings haut das mit der application.cfg und der Verlinkung nicht mehr hin.

Hab das über die desktop.cfg gelöst und die Wiki aktualisiert.

Da der ein oder andere sicher auch neu installieren muss, kann er doch bitte nebenbei prüfen, ob das so passt.

Gruß
Ralf

Beitrag in der Wiki
 

crapme

Benutzer
Mitglied seit
02. Apr 2012
Beiträge
8
Punkte für Reaktionen
0
Punkte
0
will das mal wieder aufgreifen....
Hab das alles nach der Anleitung gemacht... klappte auch eigtl. alles... bin aber bissl besorgt, da die Anleitung nur für die alte DSM war (hab die 3.0 Anleitung benutzt!)

wenn ich dann auf die Oberfläche zugreifen will bekomme ich nur:

Rich (BBCode):
Internal Server Error

The server encountered an internal error or misconfiguration and was unable to complete your request.

Please contact the server administrator, admin and inform them of the time the error occurred, and anything you might have done that may have caused the error.

More information about this error may be available in the server error log.

Apache/2.2.22 (Unix) Server at 192.168.178.20 Port 80
 

enzoberger

Benutzer
Mitglied seit
22. Mai 2014
Beiträge
8
Punkte für Reaktionen
0
Punkte
0
Ich wieß, dass der Beitrag nicht mehr ganz frisch ist, allerdings scheint das Problem immer wieder mal auf zu tauchen, daher hier mal eine kurze Anleitung zu phpPgAdmin:

phpPgAdmin von Communtiy-Hub installieren
Im Synology - "Paket-Zentrum" auf "Einstellungen" gehen und folgendes ändern:
Vertrauensebene: Synology Inc. und vertrauenswürdige Herausgeber
Beta: Ja ich möchte Beta-Versionen sehen
Paket-Quellen: "Hinzufügen" clicken
Name: Community Package Hub
Ort: http://www.cphub.net
"OK"
Im "Paket-Zentrum" links ganz unten findet ihr "Community" und dort ist das phpPgAdmin Paket mit einem Click installiert und mit einem weiteren gestartet.

Bug fixes:
Sollte Synology die Einstigsseite vom phpPgAdmin nicht laden, dann phpPgAdmin stoppen und neu starten

Manchmal ist der user admin in der Postgres DB nicht vorhanden. Man muss ihn dann selber mit der Putty anlegen. Hier die Anleitung:
Als user root mit Admin-Passwort in Putty einlogen
su - postgres
psql
\du (zeigt die vorhandenen user an)
CREATE USER admin PASSWORD 'xyz';
ALTER USER admin WITH SUPERUSER;
ALTER USER admin WITH CREATEDB;
ALTER USER admin WITH CREATEROLE;
\du (wenn alles richtig gemacht wurde, findet sich jetzt der user admin in der Liste)
\q
exit
exit
 
Status
Für weitere Antworten geschlossen.
 

Kaffeautomat

Wenn du das Forum hilfreich findest oder uns unterstützen möchtest, dann gib uns doch einfach einen Kaffee aus.

Als Dankeschön schalten wir deinen Account werbefrei.

:coffee:

Hier gehts zum Kaffeeautomat