Mini HowTo: suexec neukompilieren

  • Thread starter Thread starter server4downs
  • Start date Start date
S

server4downs

Guest
Hallo zusammen,

ich wollte hier einfach mal schnell posten wie man an suexec Änderungen vornehmen kann ohne gleich den gesamten Apachen neuaufzusetzen.
-Wieso kann man denn nicht einfach Änderungen einfach so durchführen, ohne zu kompilieren?
Das geht wegen verschiedenen Security-Issues einfach nicht!
-Was will man überhaupt ändern?
Gute Frage: man gebe doch einfach mal
Code:
suexec -V
bzw.
Code:
suexec2 -V
in die Console. Hierbei wird man feststellen müssen, dass der DocumentRoot auf /svr/htdocs oder so ähnlich gestellt ist. Nun hat man aber für seine Vhosts einen anderen DocRoot und will nicht nur wegen suexec seine gesamte Struktur auf den Kopf stellen...
-Wofür braucht man suexec?
Wenn man z.B. PHP als CGI kompiliert, so sollte man auf den Einsatz von suexec nicht verzichten. Suexec regelt, dass die Scripte dann auch wirklich vom richtigen Systemuser ausgeführt werden.

So, jetzt lass ich das FAQ-Geschmiere mal und fange an.
Also:
1. man überprüft welche Apache-Version auf dem Server installiert ist (geht auch über phpinfo())
2. man merke sich die Version und besuche Apache.org und sauge sich per wget das entsprende Archiv.
(Z.B.: wget http://archive.apache.org/dist/httpd/httpd-2.0.52.tar.gz)
3. entzippen:
Code:
tar xzf httpd-2.0.52.tar.gz
4.
Code:
cd httpd-2.0.52
5. configure ausführen:
Code:
./configure
5.
Code:
cd support
6. suexec.h editieren.
Hierzu ein kleiner hint: '#' bedeutet nicht, wie sonst eigentlich überall, dass es auskommentiert ist!
Code:
#ifndef AP_DOC_ROOT
#define AP_DOC_ROOT "/new/doc_root"
#endif
Einfach die Zeile
Code:
#define AP_DOC_ROOT DEFAULT_EXP_HTDOCSDIR
nach
Code:
#define AP_DOC_ROOT "/new/doc_root"
umändern, sofern erwünscht.
Code:
Apache User:
/*
 * HTTPD_USER -- Define as the username under which Apache normally
 *               runs.  This is the only user allowed to execute
 *               this program.
 */
#ifndef AP_HTTPD_USER
#define AP_HTTPD_USER "www"
#endif
Läuft er wirklich unter "www"??? Einfach nachprüfen und entsprechend ändern. (man könnte auch unter /etc/apache2/uid.conf oder so nachschauen).
7. speichern.
8. jetzt wirds spannend:
Code:
make suexec
9. hats geklappt? Super, yes it did! [optionaler Schritt ;)]
10. wir sind noch nicht fertig:
Code:
cp suexec /usr/sbin/suexec2
Code:
chmod 4755 /usr/sbin/suexec2
Code:
rcapache2 restart
10.
Code:
suexec2 -V
11. Finally done!

© copyright 2005 by server4downs (SSF) & rootforum.de ;)
 
Vielen Dank für dieses HowTo!

cp suexec /usr/sbin/suexec2
und
chmod 4755 /usr/sbin/suexec2

funktionieren bei mir nicht. Ich erhalte folgende Meldungen:

cp: cannot create regular file `/usr/sbin/suexec2': Permission denied
bzw.
chmod: changing permissions of `/usr/sbin/suexec2': Operation not permitted

Angemeldet bin ich als root, der owner/group der "suexec2" ist auch root, chmod ist 4755.

Woran liegt das?
 
Ich habe im anderen Thread auf deine Frage geantwortet. Doppelpostings sind hier nicht gern gesehen.
 
Ich habe im anderen Thread auf deine Frage geantwortet. Doppelpostings sind hier nicht gern gesehen.

guten tag,,,
kannst du bitte einen link auf die beantwortete frage setzen? danke.
da du über 1000 beiträge verfasst hast, bin ich mit der suche noch nicht ganz durch ;-)
viele grüße
klaus
 
guten tag server4downs,
zur ergänzung vielleicht diese anmerks noch ;-)

wenn die compilierung schief geht, dann:
make clean nicht vergessen ;-)


ich habe in der suexec.h noch etwas mehr geändert:
da war ein defaulteintrag drin, der aus einer anderen datei was mitrüber genommen hat. (aus /include/ap_config_auto.h ??)
#ifndef AP_LOG_EXEC
#define AP_LOG_EXEC "/var/log/apache2/suexec_log"
#endif

sodaß meine änderungen im ganzen aussehen:

#ifndef _SUEXEC_H
#define _SUEXEC_H
#include "ap_config_layout.h"
#ifndef AP_HTTPD_USER
#define AP_HTTPD_USER "wwwrun"
#endif
#ifndef AP_UID_MIN
#define AP_UID_MIN 100
#endif
#ifndef AP_GID_MIN
#define AP_GID_MIN 100
#endif
#ifndef AP_USERDIR_SUFFIX
#define AP_USERDIR_SUFFIX "/home"
#ifndef AP_LOG_EXEC
#define AP_LOG_EXEC "/var/log/apache2/suexec_log"
#endif

#ifndef AP_DOC_ROOT
#define AP_DOC_ROOT "/home"
#endif
#ifndef AP_SAFE_PATH
#define AP_SAFE_PATH "/usr/local/bin:/usr/bin:/bin"
#endif
#endif /* _SUEXEC_H */
dann ./configure --prefix=/usr (ist egal!)
dann make suexec
suexec umbenennen in suexec2 nach /usr/sbin (sikkopie vorher!)


DANKE für die mini-howto. mir war echt nicht klar, daß man mit make auch einzelene bestandteile von apache2 kompilaiern kann. das ist eine große erkenntnis [für mich] ;-)

viele grüße
klaus

ps: bin derzeit dabei, auf einen athlon64 unter opensuse10.0 ein neues apache2 2.2.4 raufzubekommen. bei stöbern auf apache.org habe ich spuren von einer neuen doku zu apache2.3 gesehen. die zukunft wird was NEUES bringen ;-)
 
Suexec kompelieren NICHT NOTWENDIG

Hallo,

eines vielleicht vorweg: habe noch vor ein paar tagen vor dem problem gestanden, das meine CGI Sripte nach einem Update von plesk 8.01 auf 8.1 bz. 8.2 nicht mehr funtionierten. googeln und alles andere hat nichts gebracht, auch der tip mit der suexec2 (der an sich ja gut ist) war erfolglos. Stattdessen hier eine Tip von mir der 100 % klappt. Die Ursache ist ja wohl das die Gruppenzuordung und Userzuaordung nach dem Update nicht mehr stimmt.
Ruft man dann ein CGI-Sript auf bietet Plesk ein Download an ???!!

Wie also umgehen ich ohne kompelieren diesen Bug. Ganz einfach.
1. einloggen auf pleskoberfläche und die entsprechende domain auswählen.
2. ins das dateimanagement gehen , dort auf das CGI-BIN verzeichnis. Dem verpassen wir erstmal die korrekten Rechte. rwrx rw r.
3. nun suchen wi uns das verzeichnis in dem das oder die scripte stehen. genau dort erstellen wir ein neues verzeichnis mir anderem namen.

Bespiel : cgi-bin/meinscript ---das ist original
NEU estellen cgi-bin/meinscript1 das neue verzeichnis

4 . nun kopieren wir die dateien aus meinscript in das neue verzeichnis meinsript1 und löschen asnchließend das verzeichnis meinscript.

damit das ganz funzt, müssen wir das verzeichnis meinscript1 wieder umbenennen in meinscript.

warum tun wir das alles? ws ist passiert ? also, die ursache ist, das beim update der user und die gruppe im root root endet. das ist natürlich falsch !
Legt man nun nach dem update im cgi-bin verzeichnis ein neues verzeichnis an, dann wird der user zb user1 und die gruppe psacln korrekt angelegt. diesen umstand nutzen wir prompt aus und kopieren unser cgi.script vom falschen verzeichis in das richtige. Simpel aber geht !!!!

Viel Glück
Live is a Rollercoaster !
 
Du wärst gewiss schneller und effizienter wenn du mit "chown" und "chgrp" den Verzeichnissen und Dateien wieder die richtige zuordnung verpasst.

cu
Sundriver
 
Also ich habe das mal so gemacht. Funktionierte auch. suexec -V zeigt mir zwar einen veränderten docroot an, aber die Pfade für die logs sind ganz andere. Also dachte ich machst das ganze nochmal und änderst die wert entsprechend.
Nix da. wenn ich make suexec eingebe kommt folgende meldung

`suexec' is up to date

Weuterhin lässt sich CGI immernoch nicht ausführen.


Code:
www:~/httpd-2.2.6/support # suexec2 -V
 -D AP_DOC_ROOT="/var/www"
 -D AP_GID_MIN=100
 -D AP_HTTPD_USER="www"
 -D AP_LOG_EXEC="/usr/local/apache2/logs/suexec_log"
 -D AP_SAFE_PATH="/usr/local/bin:/usr/bin:/bin"
 -D AP_UID_MIN=100
 -D AP_USERDIR_SUFFIX="public_html"
www:~/httpd-2.2.6/support # make suexec
make: `suexec' is up to date.
www:~/httpd-2.2.6/support #

Hat sich erledigt, ich habe vergessen mit make clean zu arbeiten, wodurch es ja nun doch Installiert wurde. CGI Läuft jetzt wie gewollt. Perfectly ;)

Grüße
 
Last edited by a moderator:
Hat sich erledigt, ich habe vergessen mit make clean zu arbeiten, wodurch es ja nun doch Installiert wurde. CGI Läuft jetzt wie gewollt. Perfectly ;)

Grüße
Wollte ich dir gerade schreiben, da es weiter oben im Thread bereits gepostet wurde.
Cheers.
 
Hallo,

ich habe das HowTo Schritt für Schritt befolgt, allerdings geht irgendetwas schief :(

Nach dem kompilieren kann ich das cgi-bin Verzeichnis nicht mehr per Web aufrufen, ich erhalte die Fehlermeldung "Datei nicht gefunden" obwohl die Dateien nicht verschoben wurde oder ich die Adresse geändert habe

Die suexec.h habe ich wie folgt editiert:

Code:
/* Copyright 1999-2005 The Apache Software Foundation or its licensors, as
 * applicable.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

/**
 * @file  suexec.h
 * @brief user-definable variables for the suexec wrapper code.
 *        (See README.configure on how to customize these variables.)
 */


#ifndef _SUEXEC_H
#define _SUEXEC_H

/*
 * Include ap_config_layout so we can work out where the default htdocsdir
 * and logsdir are.
 */
#include "ap_config_layout.h"

/*
 * HTTPD_USER -- Define as the username under which Apache normally
 *               runs.  This is the only user allowed to execute
 *               this program.
 */
#ifndef AP_HTTPD_USER
#define AP_HTTPD_USER "www"
#endif

/*
 * UID_MIN -- Define this as the lowest UID allowed to be a target user
 *            for suEXEC.  For most systems, 500 or 100 is common.
 */
#ifndef AP_UID_MIN
#define AP_UID_MIN 100
#endif

/*
 * GID_MIN -- Define this as the lowest GID allowed to be a target group
 *            for suEXEC.  For most systems, 100 is common.
 */
#ifndef AP_GID_MIN
#define AP_GID_MIN 100
#endif

/*
 * USERDIR_SUFFIX -- Define to be the subdirectory under users' 
 *                   home directories where suEXEC access should
 *                   be allowed.  All executables under this directory
 *                   will be executable by suEXEC as the user so 
 *                   they should be "safe" programs.  If you are 
 *                   using a "simple" UserDir directive (ie. one 
 *                   without a "*" in it) this should be set to 
 *                   the same value.  suEXEC will not work properly
 *                   in cases where the UserDir directive points to 
 *                   a location that is not the same as the user's
 *                   home directory as referenced in the passwd file.
 *
 *                   If you have VirtualHosts with a different
 *                   UserDir for each, you will need to define them to
 *                   all reside in one parent directory; then name that
 *                   parent directory here.  IF THIS IS NOT DEFINED
 *                   PROPERLY, ~USERDIR CGI REQUESTS WILL NOT WORK!
 *                   See the suEXEC documentation for more detailed
 *                   information.
 */
#ifndef AP_USERDIR_SUFFIX
#define AP_USERDIR_SUFFIX "/vhosts"
#endif

/*
 * LOG_EXEC -- Define this as a filename if you want all suEXEC
 *             transactions and errors logged for auditing and
 *             debugging purposes.
 */
#ifndef AP_LOG_EXEC
#define AP_LOG_EXEC DEFAULT_EXP_LOGFILEDIR "/suexec_log" /* Need me? */
#endif

/*
 * DOC_ROOT -- Define as the DocumentRoot set for Apache.  This
 *             will be the only hierarchy (aside from UserDirs)
 *             that can be used for suEXEC behavior.
 */
#ifndef AP_DOC_ROOT
#define AP_DOC_ROOT "/srv/www"
#endif

/*
 * SAFE_PATH -- Define a safe PATH environment to pass to CGI executables.
 *
 */
#ifndef AP_SAFE_PATH
#define AP_SAFE_PATH "/usr/local/bin:/usr/bin:/bin"
#endif

#endif /* _SUEXEC_H */

Serverumgebung: Apache 2.2.0, Plesk 8.2

Wo liegt mein Fehler?
 
Unter anderem sicher hieran:
Code:
 #ifndef AP_HTTPD_USER
[B][COLOR=Red] #define AP_HTTPD_USER "www"[/COLOR][/B]
#endif
Für SuSe:
Code:
 #ifndef AP_HTTPD_USER
[COLOR=Lime][B]  #define AP_HTTPD_USER "wwwrun"[/B][/COLOR]
 #endif
Für Debian:
Code:
 #ifndef AP_HTTPD_USER
[COLOR=Lime][B]  #define AP_HTTPD_USER "www-data"[/B][/COLOR]
 #endif
Des Weiteren gilt auch hier: 404 schön und gut, aber das zeigt, dass du in den Logs nicht nachgeschaut hast. Hierfür erste Anlaufstelle ;)
 
Hallo,

habe ich nun gemacht, gleiches Ergebnis...

suexec -V gibt folgendes aus:

Code:
-bash: suexec: command not found

suexec2 -V gibt folgendes aus:

Code:
 -D AP_DOC_ROOT="/srv/www/vhosts"
 -D AP_GID_MIN=100
 -D AP_HTTPD_USER="wwwrun"
 -D AP_LOG_EXEC="/usr/local/apache2/logs/suexec_log"
 -D AP_SAFE_PATH="/usr/local/bin:/usr/bin:/bin"
 -D AP_UID_MIN=100
 -D AP_USERDIR_SUFFIX="/httpdocs"

Hier weitere Umgebungsvariablen:

Server Root: /srv/www
DOCUMENT_ROOT: /srv/www/vhosts/domain.tld/httpdocs

Die Errorlogs habe ich angeschaut aber keinerlei Hinweise gefunden :eek:
 
Entweder im Apache Error-Log oder suexec_log muss hierzu etwas zu finden sein.
Bei Plesk kann es sein, dass sich die error-Logs nur noch aus dem jeweiligen Log-Verzeichnis des Users finden lassen.
 
Back
Top