Bug 4987

Summary: неполная проверка в mod_cgi возможности запуска cgi-приложений
Product: Sisyphus Reporter: Vladimir Lettiev <crux>
Component: apacheAssignee: Michael Shigorin <mike>
Status: CLOSED FIXED QA Contact: qa-sisyphus
Severity: enhancement    
Priority: P3 CC: at, cas, crux, ender, lakostis, ldv, migor, mike, mithraen, qa_viy, rider, shaba, solo, viy
Version: unstable   
Hardware: all   
OS: Linux   

Description Vladimir Lettiev 2004-08-13 11:55:08 MSD
mod_cgi делает неполную проверку возможности запуска cgi-приложения. Проверка
успешна только если:
1. файл принадлежит пользователю или группе apache и выставлен соотвествующий
бит запуска.
2. файл имеет бит - запуск для всех.

Т.о. если возможность запуска файла для пользователя или группы apache
выставлена при помощи ACL (на фс, поддерживающих posix acl) или пользователь
apache включён в группу-владельца файла, то apache не будет производить запуск
cgi-приложения и укажет ошибку: "file permissions deny server execution".

Это предположительно связано с повышением уровня безопасности, но для тех кто
знает, что ему нужно, было бы полезно, чтобы apache вёл себя в соотвествии с
нормальными правилами запуска.

Предлагается сей патч (источник: http://archive.apache.org/gnats/5033)

-----------------------------------------------------------

diff -Nur apache_1.3.31.orig/src/modules/standard/mod_cgi.c
apache_1.3.31/src/modules/standard/mod_cgi.c
--- apache_1.3.31.orig/src/modules/standard/mod_cgi.c   2004-08-12 15:55:52 +0400
+++ apache_1.3.31/src/modules/standard/mod_cgi.c        2004-08-13 09:59:45 +0400
@@ -382,9 +382,20 @@
        return log_scripterror(r, conf, FORBIDDEN, APLOG_NOERRNO,
                               "attempt to invoke directory as script");
     if (!ap_suexec_enabled) {
+#ifndef ACL_SUPPORT
        if (!ap_can_exec(&r->finfo))
            return log_scripterror(r, conf, FORBIDDEN, APLOG_NOERRNO,
                                   "file permissions deny server execution");
+#else
+       if(access(r->filename, X_OK)) {
+           if (errno == EACCES)
+               return log_scripterror(r, conf, FORBIDDEN, APLOG_NOERRNO,
+                                      "file permissions deny server execution");
+           else
+               return log_scripterror(r, conf, SERVER_ERROR, APLOG_NOERRNO,
+                                      "system error checking execute access");
+       }
+#endif
     }
                                                                               
                                             
     if ((retval = ap_setup_client_block(r, REQUEST_CHUNKED_ERROR)))

-----------------------------------------------------------

Т.о. если при сборке apache добавить в CPFLAGS пункт "-DACL_SUPPORT", то получим
полноценную проверку возможности запуска, такую же как производит сама ОС.

Предлагаю добавить в спек apache возможность сборки с таким патчем (типа --with
acl_support или что-то в таком духе).
Comment 1 Michael Shigorin 2004-08-16 13:22:28 MSD
Приложу после выхода ALM2.4, сперва в Daedalus, возможно.
Comment 2 Michael Shigorin 2005-01-29 21:21:58 MSK
Так и сделано в 1.3.33rusPL30.20-alt3.
Comment 3 Michael Shigorin 2006-02-17 18:17:18 MSK
Ещё раз тебе спасибо за всё.