Russian Apache Switch to English
Switch to Russian koi8-r
windows=1251
cp-866
iso8859-5
Russian Apache Как это работает Рекоммендации Где взять Как установить Как настроить Статус и поддержка
Краткий обзор FAQ Список рассылки Благодарности Поиск по серверу Powered by Russian Apache
Russian Apache mailing list archive (apache-rus@lists.lexa.ru)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [apache-talk] suexec patch for setting rlimits



On Wed, 8 Nov 2000, Dmitry Morozovsky wrote:

DM> Приветствую, коллеги. Мы вот тут заимплементили странного, а именно
DM> фиксацию лимитов для суэкзеченных скриптов (плюс добывание класса
DM> пользователя, или взятие его их группы, если у него нет explicit класса)
DM>
DM> Кроме того, после тяжкого раздумья была-таки сделана модификация,
DM> позволяющая пускать скрипты, принадлежащие руту (благо проверка на
DM> правильные права все равно делается)
DM>
DM> Все крайне непортабельно, у нас работает под FreeBSD 3.x и 4.x :) Портинг
DM> категорически приветствуется. Если вы что-нибудь с этим сделаете, напишите
DM> об этом мне и Олегу (стоит в CC:)
DM>
DM> Конструктивная ругань тоже приветствуется, разумеется ;)

	Понадобилось вот и мне организовать подобное, да только под 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@xxxxxxx>   [Uriel Zael] [Still Alive] [Evil Vugluskrs]


=============================================================================
=               Apache-Talk@xxxxxxxxxxxxx mailing list                      =
Mail "unsubscribe apache-talk" to majordomo@xxxxxxxxxxxxx if you want to quit.
=       Archive avaliable at http://www.lexa.ru/apache-talk                 =






Спонсоры сайта:

[ Russian Apache ] [ Как это работает ] [ Рекомендации ] [ Где взять ] [ Как установить ] [ Как настроить ] [ Статус и поддержка ] [ Краткий обзор ] [ FAQ ] [ Список рассылки ] [ Благодарности ] [ Поиск по серверу ] [ Powered by Russian Apache ] [ Apache-talk archive ]

"Russian Apache" includes software developed by the Apache Group for use in the Apache HTTP server project (http://www.apache.org/) See Apache LICENSE.
Copyright (C) 1995-2001 The Apache Group. All rights reserved.
Copyright (C) 1996 Dm. Kryukov; Copyright (C) 1997-2009 Alex Tutubalin. Design (C) 1998 Max Smolev.