RHEL7: Deploy an Apache basic CGI application.
Note: This is an RHCE 7 exam objective.
Prerequisites
First, follow the instructions to install an Apache web server.
Configuration Procedure
Create the /var/www/cgi-bin/hello.pl Perl script and insert the following lines:
#!/usr/bin/perl
print "Content-type: text/html\n\n";
print "Hello, World!";
Make this script executable:
# chmod 755 /var/www/cgi-bin/hello.pl
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/hello.pl
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 hello.pl file into it:
# mv /var/www/cgi-bin/hello.pl /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
</Directory>
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/hello.pl
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
Leave a comment