The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

[Apache] Патч для suexec - Linux rlimits через PAM (patch apache limit)


<< Предыдущая ИНДЕКС Поиск в статьях src Установить закладку Перейти на закладку Следующая >>
Ключевые слова: patch, apache, limit,  (найти похожие документы)
Date: Wed, 27 Dec 2000 13:45:08 +0900 (YAKT) From: Dennis Vshivkov <walrus@amur.ru> Subject: [Apache] Патч для suexec - Linux rlimits через PAM Понадобилось вот и мне организовать подобное, да только под linux. А поскольку использовался RedHat, то подумалось, что лучше велосипед не изобретать, а ввернуть к suexec поддержку pam, для коего имеется pam_limits. Во т только что сделал, работает вроде -- поругайте, может, дров наломал... Если pam портабелен хотя бы на половину от того, как его малюют, то, может, и не одним linux'истам подойдёт. diff -ur apache_1.3.14.orig/src/support/Makefile apache_1.3.14/src/support/Makefile --- apache_1.3.14.orig/src/support/Makefile.tmpl Wed Dec 27 13:25:22 200 0 +++ apache_1.3.14/src/support/Makefile.tmpl Wed Dec 27 13:23:13 2000 @@ -38,6 +38,8 @@ -e 's%@LDFLAGS_MOD_SHLIB@%$(LDFLAGS_MOD_SHLIB)%g' \ -e 's%@LIBS_SHLIB@%$(LIBS_SHLIB)%g' && chmod a+x apxs +suexec: CFLAGS += -DSUEXEC_PAM_SESSION +suexec: LIBS += -lpam suexec: suexec.o $(CC) $(CFLAGS) -o suexec $(LDFLAGS) suexec.o $(LIBS) diff -ur apache_1.3.14.orig/src/support/suexec.c apache_1.3.14/src/support/suexec.c --- apache_1.3.14.orig/src/support/suexec.c Wed Dec 27 13:24:57 2000 +++ apache_1.3.14/src/support/suexec.c Wed Dec 27 13:31:39 2000 @@ -90,6 +90,10 @@ #include <stdarg.h> +#ifdef SUEXEC_PAM_SESSION +#include <security/pam_appl.h> +#endif /* SUEXEC_PAM_SESSION */ + #include "suexec.h" /* @@ -582,6 +586,43 @@ umask(SUEXEC_UMASK); #endif /* SUEXEC_UMASK */ clean_env(); + +#ifdef SUEXEC_PAM_SESSION + /* + * Use PAM session support. Initial goal was to use the pam_limits module. + */ + +#ifndef PAM_SERVICE_NAME +#define PAM_SERVICE_NAME "suexec" +#endif /* PAM_SERVICE_NAME */ + +#define PAM_CALL(call, name, err_code, do_end) \ + do \ + { \ + rc = (call); \ + if (rc != PAM_SUCCESS) \ + { \ + log_err("error: %s(): [%d] %s\n", (name), rc, pam_strerror(pamh, +rc)); \ + (do_end) && pam_end(pamh, rc); \ + exit(err_code); \ + } \ + } while (0) + + { + int rc; + pam_handle_t *pamh = NULL; + struct pam_conv pamc = { NULL, NULL }; + + PAM_CALL(pam_start(PAM_SERVICE_NAME, actual_uname, &pamc, &pamh), + "pam_start", 241, 0); + PAM_CALL(pam_open_session(pamh, 0), "pam_open_session", 242, 1); + PAM_CALL(pam_close_session(pamh, 0), "pam_close_session", 243, 1); + PAM_CALL(pam_end(pamh, 0), "pam_end", 244, 0); + } + +#undef PAM_CALL +#undef PAM_SERVICE_NAME +#endif /* SUEXEC_PAM_SESSION */ /* * Be sure to close the log file so the CGI can't После чего делаем, например, /etc/pam.d/suexec следующего содержания: #%PAM-1.0 session required /lib/security/pam_limits.so conf=/var/www/suexec.limits И пишем в /var/www/suexec.limits: * - cpu 1 * - as 20480 * - nproc 5 * - priority 10 Или что-либо ещё...

<< Предыдущая ИНДЕКС Поиск в статьях src Установить закладку Перейти на закладку Следующая >>

 Добавить комментарий
Имя:
E-Mail:
Заголовок:
Текст:




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру