Hallo,
Ich wollte MySql + MySqlDump für Jailuser freigeben, dafür habe ich beide Anwendungen in "Jailkit chrooted Anwendungen" eingetragen und neue Jails erstellt.
Es hat alles einwandfrei funktioniert, allerdings nur bis zu ersten Neustart des Systems/MySql-Daemons. So habe ich mich auf die Suche nach Fehler im System begeben, konnte aber nichts feststellen. Nach einem Neustart kommt immer ein Fehler bei Jail-Benutzer etwa : "Kann nicht über Sockel mysqld.sock Verbindung herstellen…."
Das, was unten aufgeführt ist, ist zu Information, wie ich auf die Lösung gekommen bin. Und zweckt in erster Linie der Hilfe bei Fehlersuche in meinem Skript. Falls ich etwas FALSCHES wiedergegeben oder von sich geschrieben habe, dann liegt es an meine geringe Kenntnisse in Linux/Unix-Systemen oder Informationquellen, die ich genutzt habe. Berichtigt es bitte um Kettenreaktion der falschen Beiträge zu stoppen, denn die Suchmaschinen liefern auch Schrott, wobei dieses Thread beides sein kann.
Quellen: " Jailkit - chroot jail utilities " , " http://www.howtoforge.*/forum/ " , " gidf, wie immer nützliche in Lesezeichen nich angelegt !!!"
Jailkit-Doku --> jk_cp und jk_init tun fast das gleiche(s. Doku) "-k": "Try to create hardlinks instead of copying the files. If linking fails it falls back to copying.."
Ich habe also gedacht, dass jailkit selbst erkennt welche Sockel er für MySql mitkopiert(bzw. ein Link erstellt) und gegebenenfalls überwacht, weil im CHROOTs war diese immer zu finden. Dann habe ich in einem anderen englischen Forum gleiches Problem gefunden und festgestellt, dass es nicht der Fall ist und diese Problem noch nicht gelöst ist, und Jailkit kann nicht mit Unix-Sockets(Ausnahme: jk_socketd für LOG Socket) umgehen.
Eine weitere Suche hat ergeben, dass die Sockets keine gewöhnliche Dateien sind und werden erst erstellt, wenn daemon gestartet wird, und sollten nicht als Dateien, sondern als Geräte angesehen/behandelt werden.
Erste positive ergebniss der Suche in "ISPConfig 3 Source" war die Datei "/usr/local/ispconfig/server/scripts/create_jailkit_chroot.sh" :
zu beachten ist, dass hier ein Hardlink in CHROOT von echten MySQL-Socket erstellt wird, und wie oben beschrieben: "… Sockets … werden erst erstellt, wenn daemon gestartet wird … " . Und wenn die immerwieder neu erstellt werden, dann sind die immer unterschiedlich(also Infos und Adressen wo diese in liegen) und Hardlink zeigt irgendwo-hin nur nicht auf den neuen mysqld.sock.
Und so habe ich mich entschlossen etwas für Lösung dieses Problems zu unternehmen.
Folgendes war Ziel:
1. alle CHROOTs finden.(kein Problem mit MySQL-Abfrage)
2. Jedes neustart des MySql-Servers muss neue Socket bei CHROOTs bereitstellen.
3. Muss automatisch Funktionieren. Und nicht Lastig sein, möglichst ohne extra DAEMON dafür.
Und das ist dabei rausgekommen:
1. Geht auch ohne MySQL-Abfrage. Mit kleiner INJEKTION in /etc/init.d/mysql
2. OHNE Extra-DAEMON
3. fix-skript für bestehende CHROOTs
4. kleines Update-Skript für Zufügen neuen Anwendungen in "Jailkit chrooted Anwendungen" für alle CHROOTs. "Könnte in eine der neuen Versionen von ISPCONFIG3 fließen, weil minestens 2 Threads für diese Problem hier gesehen."
Weiter geht es mit HowTo: - fix-Jailkit-mysqld.sock.
Wie immer . . . alles ohne Gewähr, testet es auf eigene Gefahr.
als erstes ladet jk-mysql.sock-fix.zip Archiv [für Könner *.txt] aus Anhang herunter und schiebt enthaltene Dateien in Verzeichnis "/usr/local/ispconfig/server/scripts/"
dann benennt folgende Dateien um:
"create_jailkit_chroot.sh" => z.B "create_jailkit_chroot.sh.Original"
"create_jailkit_chroot.sh.fix" => "create_jailkit_chroot.sh"
und setzt Rechte der Dateien "create_jailkit_chroot.sh" und "jailkit_mysql_sock_fix.sh".
jetzt wird die "/etc/init.d/mysql" angepasst.
ACHTUNG !!! Sehr aufmerksam!!! Die richtige Zeile finden!!! ACHTUNG
1. beim CASE-Verzweigung für 'start' bei ca Zeile 122
2. beim CASE-Verzweigung für 'stop' gleich nach Kommentaren
ACHTUNG !!! Sehr wichtig!!! ACHTUNG
Wenn web-Ordner von normalen Installation abweichen, dann in "jailkit_mysql_sock_fix.sh" reinschauen und jails="/var/www/clients/client*/web*/bin" anpassen.
jetzt werden Bestehende Jail-CHROOTs gefixt (alte Hardlinks löschen -> einfache "Datei/je CHROOT" mit touch erstellen -> mysqld.sock auf diese mounten)
und nun FFF. Ab jetz wird MySql auch für Jails für immer zugänglich sein.
Ich wollte MySql + MySqlDump für Jailuser freigeben, dafür habe ich beide Anwendungen in "Jailkit chrooted Anwendungen" eingetragen und neue Jails erstellt.
Es hat alles einwandfrei funktioniert, allerdings nur bis zu ersten Neustart des Systems/MySql-Daemons. So habe ich mich auf die Suche nach Fehler im System begeben, konnte aber nichts feststellen. Nach einem Neustart kommt immer ein Fehler bei Jail-Benutzer etwa : "Kann nicht über Sockel mysqld.sock Verbindung herstellen…."
Das, was unten aufgeführt ist, ist zu Information, wie ich auf die Lösung gekommen bin. Und zweckt in erster Linie der Hilfe bei Fehlersuche in meinem Skript. Falls ich etwas FALSCHES wiedergegeben oder von sich geschrieben habe, dann liegt es an meine geringe Kenntnisse in Linux/Unix-Systemen oder Informationquellen, die ich genutzt habe. Berichtigt es bitte um Kettenreaktion der falschen Beiträge zu stoppen, denn die Suchmaschinen liefern auch Schrott, wobei dieses Thread beides sein kann.
Quellen: " Jailkit - chroot jail utilities " , " http://www.howtoforge.*/forum/ " , " gidf, wie immer nützliche in Lesezeichen nich angelegt !!!"
Jailkit-Doku --> jk_cp und jk_init tun fast das gleiche(s. Doku) "-k": "Try to create hardlinks instead of copying the files. If linking fails it falls back to copying.."
Ich habe also gedacht, dass jailkit selbst erkennt welche Sockel er für MySql mitkopiert(bzw. ein Link erstellt) und gegebenenfalls überwacht, weil im CHROOTs war diese immer zu finden. Dann habe ich in einem anderen englischen Forum gleiches Problem gefunden und festgestellt, dass es nicht der Fall ist und diese Problem noch nicht gelöst ist, und Jailkit kann nicht mit Unix-Sockets(Ausnahme: jk_socketd für LOG Socket) umgehen.
Eine weitere Suche hat ergeben, dass die Sockets keine gewöhnliche Dateien sind und werden erst erstellt, wenn daemon gestartet wird, und sollten nicht als Dateien, sondern als Geräte angesehen/behandelt werden.
Erste positive ergebniss der Suche in "ISPConfig 3 Source" war die Datei "/usr/local/ispconfig/server/scripts/create_jailkit_chroot.sh" :
Code:
####################################################################################
…
# mysql needs the socket in the chrooted environment
mkdir $CHROOT_HOMEDIR/var
mkdir $CHROOT_HOMEDIR/var/run
mkdir $CHROOT_HOMEDIR/var/run/mysqld
# ln /var/run/mysqld/mysqld.sock $CHROOT_HOMEDIR/var/run/mysqld/mysqld.sock
if [ -e "/var/run/mysqld/mysqld.sock" ]
then
ln /var/run/mysqld/mysqld.sock $CHROOT_HOMEDIR/var/run/mysqld/mysqld.sock
fi
…
#################################################################################
Und so habe ich mich entschlossen etwas für Lösung dieses Problems zu unternehmen.
Folgendes war Ziel:
1. alle CHROOTs finden.(kein Problem mit MySQL-Abfrage)
2. Jedes neustart des MySql-Servers muss neue Socket bei CHROOTs bereitstellen.
3. Muss automatisch Funktionieren. Und nicht Lastig sein, möglichst ohne extra DAEMON dafür.
Und das ist dabei rausgekommen:
1. Geht auch ohne MySQL-Abfrage. Mit kleiner INJEKTION in /etc/init.d/mysql
2. OHNE Extra-DAEMON
3. fix-skript für bestehende CHROOTs
4. kleines Update-Skript für Zufügen neuen Anwendungen in "Jailkit chrooted Anwendungen" für alle CHROOTs. "Könnte in eine der neuen Versionen von ISPCONFIG3 fließen, weil minestens 2 Threads für diese Problem hier gesehen."
Weiter geht es mit HowTo: - fix-Jailkit-mysqld.sock.
Wie immer . . . alles ohne Gewähr, testet es auf eigene Gefahr.
als erstes ladet jk-mysql.sock-fix.zip Archiv [für Könner *.txt] aus Anhang herunter und schiebt enthaltene Dateien in Verzeichnis "/usr/local/ispconfig/server/scripts/"
dann benennt folgende Dateien um:
"create_jailkit_chroot.sh" => z.B "create_jailkit_chroot.sh.Original"
"create_jailkit_chroot.sh.fix" => "create_jailkit_chroot.sh"
und setzt Rechte der Dateien "create_jailkit_chroot.sh" und "jailkit_mysql_sock_fix.sh".
Code:
chown ispconfig:ispconfig create_jailkit_chroot.sh jailkit_mysql_sock_fix.sh
cmod 751 create_jailkit_chroot.sh jailkit_mysql_sock_fix.sh
ACHTUNG !!! Sehr aufmerksam!!! Die richtige Zeile finden!!! ACHTUNG
1. beim CASE-Verzweigung für 'start' bei ca Zeile 122
Code:
. . .
# Now start mysqlcheck or whatever the admin wants.
output=$(/etc/mysql/debian-start)
[ -n "$output" ] && log_action_msg "$output" # <-- ca Zeile 121
#######################################################################################
# Jailkit-mysqld.sock Problem
./usr/local/ispconfig/server/scripts/jailkit_mysql_sock_fix.sh "mountAll"
#######################################################################################
else
log_end_msg 1
log_failure_msg "Please take a look at the syslog"
fi
fi
. . .
Code:
. . .
# * As a passwordless mysqladmin (e.g. via ~/.my.cnf) must be possible
# at least for cron, we can rely on it here, too. (although we have
# to specify it explicit as e.g. sudo environments points to the normal
# users home and not /root)
#######################################################################################
# Jailkit-mysqld.sock Problem
./usr/local/ispconfig/server/scripts/jailkit_mysql_sock_fix.sh "umountAll"
#######################################################################################
log_daemon_msg "Stopping MySQL database server" "mysqld"
if ! mysqld_status check_dead nowarn; then
. . .
Wenn web-Ordner von normalen Installation abweichen, dann in "jailkit_mysql_sock_fix.sh" reinschauen und jails="/var/www/clients/client*/web*/bin" anpassen.
jetzt werden Bestehende Jail-CHROOTs gefixt (alte Hardlinks löschen -> einfache "Datei/je CHROOT" mit touch erstellen -> mysqld.sock auf diese mounten)
Code:
/./usr/local/ispconfig/server/scripts/jailkit_mysql_sock_fix.sh -fixAll