поддержка pam в suexec, для использования с pam_limits (apache suexec pam aaa)
Ключевые слова: apache, suexec, pam, aaa, (найти похожие документы)
Date: Wed, 27 Dec 2000 13:45:08 +0900 (YAKT)
From: Dennis Vshivkov <walrus@amur.ru>
To: apache-talk@lists.lexa.ru
Subject: поддержка pam в suexec, для использования с pam_limits
On Wed, 8 Nov 2000, Dmitry Morozovsky wrote:
Понадобилось вот и мне организовать подобное, да только под 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 2000
+++ 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
Или что-либо ещё...
--
/Awesome Walrus <walrus@amur.ru> [Uriel Zael] [Still Alive] [Evil Vugluskrs]
= Apache-Talk@lists.lexa.ru mailing list =
Mail "unsubscribe apache-talk" to majordomo@lists.lexa.ru if you want to quit.
= Archive avaliable at http://www.lexa.ru/apache-talk =