====== Apache suExec ====== * [[Apache]] * [[Apache fcgid]] * [[Apache Security]] * [[PHP CGI]] suExec lets you execute CGI processes as a separate user than the webserver, usually unprivileged. * [[http://httpd.apache.org/docs/current/suexec.html|suEXEC Support]] * [[http://httpd.apache.org/docs/current/mod/mod_suexec.html|Apache Module mod_suexec]] * [[http://httpd.apache.org/docs/current/mod/core.html#suexec|mod_core Suexec Directive]] ==== Installation ==== SuExec is very strict on security. When compiling Apache, you need to set the SuExec parameters that will be used. You can display the SuExec compile-time variables: /usr/lib/apache2/suexec -V As a reference, here are the settings for an Ubuntu 13.04 install: -D AP_DOC_ROOT="/var/www" -D AP_GID_MIN=100 -D AP_HTTPD_USER="www-data" -D AP_LOG_EXEC="/var/log/apache2/suexec.log" -D AP_SAFE_PATH="/usr/local/bin:/usr/bin:/bin" -D AP_UID_MIN=100 -D AP_USERDIR_SUFFIX="public_html" Also, one from Gentoo with Apache 2.2.29: -D AP_DOC_ROOT="/var/www" -D AP_GID_MIN=100 -D AP_HTTPD_USER="apache" -D AP_LOG_EXEC="/var/log/apache2/suexec_log" -D AP_SAFE_PATH="/usr/local/bin:/usr/bin:/bin" -D AP_SUEXEC_UMASK=077 -D AP_UID_MIN=1000 -D AP_USERDIR_SUFFIX="public_html" The commands executed by SuExec must have a parent directory of DOC_ROOT. They do not immediately need to be in that directory, just below it. So, ''/var/www/cgi-bin'' would be fine. GID_MIN and UID_MIN are minimum values, to prevent users with low-level privileges from executing scripts. HTTPD_USER is the user that Apache drops to after starting the program as root. These are all configured when installing Apache. === Build-time Gotcha === When compiling Apache, if you change the SuExec configuration variables, do a full ''make clean'' on the directory, or the new compile will still use the old variables. ==== Apache Configuration ==== The only directive that needs to be set inside the Apache config is ''SuexecUserGroup''. It can be set either globally or per-virtualhost. SuexecUserGroup www www ==== OS X ==== Here is an example of the configuration options on OSX. ./configure \ --enable-suexec \ --with-suexec-docroot=/var/www \ --with-suexec-bin=/usr/local/apache2/bin/suexec \ --with-suexec-caller=daemon \ --with-suexec-uidmin=500 \ --with-suexec-logfile=/usr/local/apache2/logs/suexec_log \ --with-suexec-gidmin=20 \ --with-suexec-userdir=Sites \ And the result of ''suexec -V'': -D AP_DOC_ROOT="/private/var/www" -D AP_GID_MIN=20 -D AP_HTTPD_USER="daemon" -D AP_LOG_EXEC="/usr/local/apache2/logs/suexec_log" -D AP_SAFE_PATH="/usr/local/bin:/usr/bin:/bin" -D AP_UID_MIN=500 -D AP_USERDIR_SUFFIX="Sites" Again, note that HTTPD_USER is ''daemon'', or the user that Apache runs as. The GID_MIN and UID_MIN are set for the minimum uids of the user running the executables. Related config: SuexecUserGroup steve staff ==== Gentoo ==== * SUEXEC_SAFEPATH: Default PATH for suexec (default: /usr/local/bin:/usr/bin:/bin) * SUEXEC_LOGFILE: Path to the suexec logfile (default: /var/log/apache2/suexec_log) * SUEXEC_CALLER: Name of the user Apache is running as (default: apache) * SUEXEC_DOCROOT: Directory in which suexec will run scripts (default: /var/www) * SUEXEC_MINUID: Minimum UID, which is allowed to run scripts via suexec (default: 1000) * SUEXEC_MINGID: Minimum GID, which is allowed to run scripts via suexec (default: 100) * SUEXEC_USERDIR: User subdirectories (like /home/user/html) (default: public_html) * SUEXEC_UMASK: Umask for the suexec process (default: 077)