Note: This is an RHCE 7 exam objective.


First, follow the instructions to install an Apache web server.

Configuration Procedure

Create the /var/www/cgi-bin/ Perl script and insert the following lines:

print "Content-type: text/html\n\n";
print "Hello, World!";

Make this script executable:

# chmod 755 /var/www/cgi-bin/

Restart the httpd service:

# systemctl restart httpd

Check the SELinux httpd_enable_cgi boolean is on(it is on by default):

# getsebool httpd_enable_cgi
httpd_enable_cgi --> on

Note: Another SELinux boolean useful to remember is httpd_can_sendmail: it allows the httpd server to send emails.

Check the httpd service:

# yum install -y elinks
# elinks http://localhost/cgi-bin/

Alternatively, if you want to use a directory other than the /var/www/cgi-bin/ default (/webapp for example), you will have some additional steps.

Create the /webapp directory:

# mkdir /webapp

Move the file into it:

# mv /var/www/cgi-bin/ /webapp

Set up SElinux configuration for the /webapp directory:

# yum install -y setroubleshoot-server
# semanage fcontext -a -t httpd_sys_script_exec_t "/webapp(/.*)?"
# restorecon -R /webappelinks /usr/share/httpd/manual/howto/cgi.html

Edit the /etc/httpd/conf/httpd.conf file and replace the ‘ScriptAlias‘ option with the following line:

ScriptAlias /cgi-bin/ "/webapp/"

In the same file, where the configuration of your website (or virtual host) is located, add the following lines:

<Directory "/webapp">
AllowOverride None
Options None
Require all granted

In the same stanza, you can optionally add the following lines (but it doesn’t seem mandatory):

Options ExecCGI
AddHandler cgi-script .pl

Check the configuration file:

# apachectl configtest
Syntax OK

Restart the httpd service:

# systemctl restart httpd

Testing Time

Check the execution of the Perl script:

# yum install -y elinks
# elinks http://localhost/cgi-bin/

Useful Tip

If you don’t remember the syntax of any directive, type:

# yum -y install httpd-manual
# elinks /usr/share/httpd/manual/howto/cgi.html