1 | \subsection{suEXEC} |
---|
2 | |
---|
3 | \begin{frame} |
---|
4 | \frametitle{Serving static content} |
---|
5 | \begin{itemize} |
---|
6 | \item The \texttt{apache} user does not have permission to read the |
---|
7 | user's files directly. |
---|
8 | \item Both static and dynamic content is served through suEXEC. |
---|
9 | \end{itemize} |
---|
10 | \end{frame} |
---|
11 | |
---|
12 | \begin{frame}[fragile,t] |
---|
13 | \begin{enumerate} |
---|
14 | \item \texttt{/etc/httpd/conf.d/execsys.conf} is configured to serve |
---|
15 | static content with the \texttt{cgi-script} handler. |
---|
16 | \end{enumerate} |
---|
17 | \begin{footnotesize} |
---|
18 | \begin{semiverbatim} |
---|
19 | <Files *.pl> |
---|
20 | SetHandler cgi-script |
---|
21 | Options +ExecCGI |
---|
22 | </Files> |
---|
23 | <Files *.php> |
---|
24 | SetHandler cgi-script |
---|
25 | Options +ExecCGI |
---|
26 | </Files> |
---|
27 | \ldots |
---|
28 | <Files *.html> |
---|
29 | SetHandler cgi-script |
---|
30 | Options +ExecCGI |
---|
31 | </Files> |
---|
32 | <Files *.css> |
---|
33 | SetHandler cgi-script |
---|
34 | Options +ExecCGI |
---|
35 | </Files> |
---|
36 | \ldots |
---|
37 | \end{semiverbatim} |
---|
38 | \end{footnotesize} |
---|
39 | \end{frame} |
---|
40 | |
---|
41 | \begin{frame}[fragile,t] |
---|
42 | \begin{enumerate} |
---|
43 | \addtocounter{enumi}{1} |
---|
44 | \item \texttt{openafs/src/afs/VNOPS/afs\_vnop\_access.c} is modified |
---|
45 | to mark \emph{all} files as executable (!). |
---|
46 | \end{enumerate} |
---|
47 | \begin{footnotesize} |
---|
48 | \begin{semiverbatim} |
---|
49 | int |
---|
50 | afs_access(OSI_VC_DECL(avc), register afs_int32 amode, |
---|
51 | struct AFS_UCRED *acred) |
---|
52 | \{ |
---|
53 | register afs_int32 code; |
---|
54 | struct vrequest treq; |
---|
55 | struct afs_fakestat_state fakestate; |
---|
56 | OSI_VC_CONVERT(avc); |
---|
57 | |
---|
58 | AFS_STATCNT(afs_access); |
---|
59 | + amode = amode & ~VEXEC; |
---|
60 | afs_Trace3(afs_iclSetp, CM_TRACE_ACCESS, ICL_TYPE_POINTER, avc, |
---|
61 | ICL_TYPE_INT32, amode, ICL_TYPE_OFFSET, |
---|
62 | ICL_HANDLE_OFFSET(avc->m.Length)); |
---|
63 | \ldots |
---|
64 | \} |
---|
65 | \end{semiverbatim} |
---|
66 | \end{footnotesize} |
---|
67 | \end{frame} |
---|
68 | |
---|
69 | \begin{frame}[fragile,t] |
---|
70 | \begin{enumerate} |
---|
71 | \addtocounter{enumi}{2} |
---|
72 | \item \texttt{httpd/support/suexec.c} is modified to dispatch static |
---|
73 | content to \texttt{/usr/local/bin/static-cat}. |
---|
74 | \end{enumerate} |
---|
75 | \begin{footnotesize} |
---|
76 | \begin{semiverbatim} |
---|
77 | +#define STATIC_CAT_PATH "/usr/local/bin/static-cat" |
---|
78 | +static const char *static_extensions[] = \{ |
---|
79 | + "html", |
---|
80 | + "css", |
---|
81 | + \ldots |
---|
82 | +\} |
---|
83 | + |
---|
84 | int main(int argc, char *argv[]) |
---|
85 | \{ |
---|
86 | \ldots |
---|
87 | + if (is_static_extension(cmd)) \{ |
---|
88 | + argv[2] = STATIC_CAT_PATH; |
---|
89 | + execv(STATIC_CAT_PATH, &argv[2]); |
---|
90 | + log_err("(%d)%s: static_cat exec failed (%s)\\n", errno, |
---|
91 | + strerror(errno), argv[2]); |
---|
92 | + exit(255); |
---|
93 | + \} |
---|
94 | \end{semiverbatim} |
---|
95 | \end{footnotesize} |
---|
96 | \end{frame} |
---|