OpenBSD nginx cgi
… and you thought that cgi is dead …
nginx.conf
cat << 'EOF' > /etc/nginx/nginx.conf
worker_processes 1;
worker_rlimit_nofile 1024;
events {
worker_connections 800;
}
http {
include mime.types;
default_type application/octet-stream;
index index.html index.htm;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log logs/access.log main;
access_log syslog:server=unix:/dev/log,severity=notice main;
keepalive_timeout 65;
server_tokens off;
server {
listen 80;
listen [::]:80;
server_name localhost;
root /var/www/htdocs;
# FastCGI to CGI wrapper server
#
location /cgi-bin/ {
#error_log /var/log/slowcgi/errors;
fastcgi_pass unix:run/slowcgi.sock;
fastcgi_split_path_info ^(/cgi-bin/[^/]+)(.*);
fastcgi_param PATH_INFO $fastcgi_path_info;
include fastcgi_params;
}
}
}
'EOF'
chmod 644 /etc/nginx/nginx.conf
rcctl enable nginx
rcctl start nginx
Slowcgi
rcctl enable slowcgi
rcctl start slowcgi
CGI
cat << 'EOF' > /var/www/cgi-bin/test.cgi
#!/bin/sh
echo "Content-type: text/html\n\n";
echo "<HTML>\n";
echo "<HEAD>\n";
echo " <title>Ich bin ein Titel :)</title>\n";
echo "</HEAD>\n";
echo "Test from /bin/sh ..!\n";
echo "</HTML>\n";
EOF
chown www /var/www/cgi-bin/test.cgi
chmod 500 /var/www/cgi-bin/test.cgi
Install Interpreter (Chrooted !)
mkdir /var/www/bin/
cp /bin/sh /var/www/bin/
Test
curl http://ip-of-device/cgi-bin/test.cgi
Troubleshoot
chroot /var/www/ cgi-bin/test.cgi
Any Comments ?
sha256: cb939fe359ec8b8611392b03c702d42de819c4a51b81c120a70fe4a8d7ff6770