ILIAS 11.5
Overview
This guide shows you how to launch and use ILIAS 11.5 on Ubuntu 24.04 from SecureAnyCloud on Amazon EC2. It is one version of the SecureAnyCloud Hardened Moodle & E-Learning Platforms AMIs listing on AWS Marketplace. You choose it as the software version when you subscribe and launch. The listing's guide hub describes the other learning platforms in the listing.
ILIAS is an open-source learning management system developed by the ILIAS open source e-Learning society. It provides courses and groups, a content repository, SCORM and xAPI content, tests and assessments, exercises with peer review, wikis, blogs, portfolios, learning sequences, competence management and certificates. ILIAS is licensed under the GNU General Public License version 3 (GPL-3.0).
The image ships with ILIAS already installed and its database schema in place, so you sign in and start building courses. No courses, users or content are seeded beyond the single administrator account. The content of your platform is yours to create.
What you get:
- ILIAS 11.5, installed from the sha256-pinned upstream release (the license is verified to be the verbatim GPL-3.0 text at build time)
- HTTPS from first boot: Apache serves the site on port 443 with a certificate created on your instance's first boot, and port 80 permanently redirects to HTTPS. ILIAS's
setupis command-line only, because no web installation wizard exists in ILIAS 11. The setup andclipaths are additionally denied over HTTP. - MariaDB on localhost only (utf8mb3, as ILIAS requires). ILIAS connects over the local socket as
www-datawith socket authentication, so there is no database password anywhere on the image. - PHP 8.3 (FPM) with every ILIAS-required extension, including ImageMagick built from current upstream source
ilias-firstboot.service, which runs before Apache may start and mints your instance's administrator password, URL-signing keys, installation identifiers and TLS certificateilias-set-hostname, which moves the site to your own DNS name, andilias-cron.timer, which runs ILIAS's scheduled jobs- No live default credential. The published default credential (
root/homer) is replaced during the build, and the per-instance administrator password is minted on your instance's first boot.
The default user is ubuntu. The architecture is x86_64, and the root volume is 20 GiB gp3.
Security posture
- No default login. The administrator password is generated on your instance's first boot and written to a
root-only file. The ILIAS published default (root/homer) does not verify against the shipped hash. - HTTPS from first boot with a per-instance self-signed certificate. Port 80 redirects to HTTPS.
- No database password. MariaDB listens on
127.0.0.1only and authenticates ILIAS'swww-dataaccount by the local socket. - Exact ports. Only 22 (SSH), 80 (redirect) and 443 (HTTPS) listen on a public address.
- No metadata access for the application. Apache, PHP-FPM, MariaDB and the cron job are denied the instance metadata service (169.254.169.254). Only the first-boot and base-URL helpers may read it, to learn the instance's address.
- Forged host names are refused, so links that ILIAS builds in email cannot be poisoned. Client-supplied forwarding headers are stripped, so audit logs and rate limits see the real client.
Prerequisites
- An AWS account subscribed to the listing
- An EC2 key pair for SSH
- A security group that allows inbound 22 from your management network, and 443 (plus 80 for the HTTPS redirect) from your users
- An instance type of
m5.largeor larger, which is recommended for production
Launch from AWS Marketplace
Subscribe to the listing, choose ILIAS 11.5 on Ubuntu 24.04 as the version, and launch with your key pair and security group.
Wait for the instance status checks to pass, then give first boot a minute to mint your credentials.
Launch from the AWS CLI
aws ec2 run-instances \
--image-id <ami-id> \
--instance-type m5.large \
--key-name <your-key> \
--security-group-ids <your-sg> \
--block-device-mappings 'DeviceName=/dev/sda1,Ebs={VolumeSize=20,VolumeType=gp3}' \
--metadata-options 'HttpTokens=required' \
--tag-specifications 'ResourceType=instance,Tags=[{Key=Name,Value=ilias}]'Connect over SSH
ssh -i <key.pem> ubuntu@<public-dns>The login user is ubuntu.
Retrieve your credentials
First boot writes your instance's credentials to a root-only file:
sudo cat /root/ilias-credentials.txtIt looks like this (your values differ):
ilias.admin.user=root ilias.admin.pass=<generated-per-instance> ilias.client.id=iliasThe administrator username is root. This is ILIAS's own administrator login name, not the Linux root user.
First boot takes the site address from /etc/sac/ilias-hostname if that file exists. Otherwise it reads the address from IMDSv2: the instance's public DNS name, else its public IPv4 address, else its private IPv4 address.
If you keep credentials centrally, copy them into AWS Secrets Manager.
Verify the services
systemctl is-active apache2 php8.3-fpm mariadb ls /var/lib/sac/data/ilias-firstboot.doneAll three services print active, and the first-boot marker exists. First boot runs once, so after a reboot its unit shows as skipped, which is expected.
Only 22, 80 and 443 listen on a public address. MariaDB is on 127.0.0.1:3306:
sudo ss -Hltn | awk '{print $4}' | sort -uConfirm that the HTTPS front end answers on the configured name and that port 80 redirects to HTTPS:
SITE=$(cat /var/lib/sac/data/ilias-address)
curl -sk -o /dev/null -w "%{http_code}\n" --resolve "${SITE}:443:127.0.0.1" "https://${SITE}/login.php?client_id=ilias&cmd=force_login"
curl -s -o /dev/null -w "%{http_code} %{redirect_url}\n" --resolve "${SITE}:80:127.0.0.1" "http://${SITE}/"MariaDB holds no password. Every account uses socket authentication or is locked. ILIAS's own connections arrive over the socket as www-data:
sudo mariadb -e "SELECT User, Host, plugin FROM mysql.global_priv;"
sudo -u www-data mariadb -u www-data -N -e "SELECT CURRENT_USER();" iliasThe application cannot reach the instance metadata service. This command runs the same request from inside php8.3-fpm.service and from your shell. The first request prints 000 (blocked), and the second prints 200:
CG=$(systemctl show -p ControlGroup --value php8.3-fpm.service)
sudo bash -c "echo \$\$ > /sys/fs/cgroup${CG}/cgroup.procs; exec curl -s -m 5 -o /dev/null -w '%{http_code}\n' -X PUT -H 'X-aws-ec2-metadata-token-ttl-seconds: 60' http://169.254.169.254/latest/api/token" curl -s -m 5 -o /dev/null -w '%{http_code}\n' -X PUT -H 'X-aws-ec2-metadata-token-ttl-seconds: 60' http://169.254.169.254/latest/api/tokenSign in
- Open the site address (the public DNS name or IP from Step 4) in a browser. Plain
http://redirects to HTTPS. - The certificate is self-signed and unique to your instance, so the browser warns you the first time. Accept the warning, or install a trusted certificate (Step 8).
- The ILIAS sign-in form opens. Enter root as the username and the
ilias.admin.passvalue, then choose Login.
You land on the ILIAS dashboard. The main menu opens Repository, Dashboard, Achievements, Communication and the administration tools.
ILIAS answers only on its configured name, the instance's own IP addresses and localhost. It refuses a request that names any other host.
Use your own hostname
ILIAS builds the links in notification email from its base URL, which this image sets from configuration.
To serve the platform on your own DNS name, point a DNS record (for example in Amazon Route 53) at the instance's public IP. An Elastic IP keeps the address stable. Then run this command on the instance:
sudo ilias-set-hostname learn.example.orgThe helper writes the name to /etc/sac/ilias-hostname and issues a new self-signed certificate for it. It rewrites Apache's server name and ILIAS's allowed-hosts list and base URL, then reloads Apache.
An instance without an Elastic IP gets a new public DNS name when it is stopped and started. Run the helper with the new name so that links and the certificate follow it. Run it with --auto to return to the EC2 public DNS name.
Install a trusted certificate
The site certificate is /etc/ssl/ilias/ilias.crt and its key is /etc/ssl/ilias/ilias.key (mode 600, root).
To use Let's Encrypt, first set your DNS name (Step 7) and open port 80 to the internet. Then run:
sudo apt-get install -y certbot
sudo certbot certonly --standalone -d learn.example.org \
--pre-hook "systemctl stop apache2" --post-hook "systemctl start apache2" \
--deploy-hook "install -m 644 \$RENEWED_LINEAGE/fullchain.pem /etc/ssl/ilias/ilias.crt && install -m 600 \$RENEWED_LINEAGE/privkey.pem /etc/ssl/ilias/ilias.key"certbot keeps the hooks for every renewal. Running ilias-set-hostname again replaces the certificate with a self-signed one, so run sudo certbot renew --force-renewal afterwards.
Create your first course
- Open the main menu and choose Repository, which is the top of the ILIAS content tree. Use the Add New Item control to add a Course, then set its title, availability and enrollment.
- Inside the course, add content objects: files, web links, wikis, exercises, tests, learning sequences and SCORM/xAPI learning modules.
- Create user accounts under Administration > Users, or import them from a file. Self-registration is disabled by default. To allow public sign-up, enable it under Administration > User Services.
- Set your administrator's email address and configure outgoing mail under Administration before you rely on notifications or password resets.
Server components
- ILIAS 11.5: github.com/ILIAS-eLearning/ILIAS, GPL-3.0, installed in /var/www/ilias
- PHP 8.3 (FPM): Ubuntu 24.04 packages (>= 8.3.6-0ubuntu0.24.04.13)
- Apache 2.4: TLS front end on 80/443, with PHP over FPM
- MariaDB 10.11: localhost only, utf8mb3, socket authentication and no password
The image updates the PHP libraries that ILIAS vendors to the releases that fix their published advisories (league/commonmark 2.10.4, Symfony 6.4.48). A build-time dependency audit fails closed on any remaining reachable advisory.
sudo mariadb ilias -N -e "SELECT value FROM settings WHERE module='common' AND keyword='ilias_version';" php -v | head -n 1 mariadb --versionFilesystem layout
The key paths and their purposes are:
- /var/www/ilias: the ILIAS application code (public/ is the web docroot)
- /var/www/ilias/public/data/ilias/client.ini.php: the client configuration (mode 640, and the DB password is empty because of socket authentication)
- /var/www/files: the ILIAS data directory, which holds uploaded content and files
- /var/www/logs: the ILIAS application logs
- /var/lib/mysql: the MariaDB database
- /etc/ssl/ilias/: the site certificate and key
- /root/ilias-credentials.txt: your credentials (mode 600, root)
- /var/lib/sac/data/ilias-firstboot.done: the first-boot marker. Apache and PHP-FPM start only when it exists.
ls -ld /var/www/ilias /var/www/files /var/www/logs; df -h /Managing the services
systemctl status apache2 php8.3-fpm mariadb --no-pager -n 0Restart PHP-FPM with sudo systemctl restart php8.3-fpm and reload Apache with sudo systemctl reload apache2.
Logs are in /var/log/apache2/ilias-*.log and /var/www/logs/. The Amazon CloudWatch agent can ship them to CloudWatch Logs.
ILIAS's scheduled jobs run from ilias-cron.timer every five minutes. Run them by hand with:
sudo -u www-data php /var/www/ilias/cli/cron.php run-jobs root iliasBackups
Dump the database as root over the socket (no password), and archive the data directory with it:
sudo mariadb-dump --single-transaction --routines --triggers ilias > ~/ilias-$(date +%Y%m%d).sql
sudo tar -czf ~/ilias-files-$(date +%Y%m%d).tar.gz -C /var/www filesCopy both files to an Amazon S3 bucket or another durable destination. An EBS snapshot of the root volume is a simple whole-platform backup:
aws ec2 create-snapshot --volume-id <root-volume-id> --description "ilias $(date +%F)"Troubleshooting
The browser cannot connect, or the connection is dropped. Browse to the configured name, which is the site address. ILIAS refuses other host names by design. Check that ports 80 and 443 are open in the security group.
Apache or PHP-FPM is not running after launch. Both start only after first boot completes. Check the first-boot marker and log:
ls -la /var/lib/sac/data/ilias-firstboot.done
sudo journalctl -u ilias-firstboot --no-pager | tail -n 20If the marker is missing, first boot did not finish. Fix the cause, then run first boot again:
sudo systemctl restart ilias-firstboot
sudo systemctl start php8.3-fpm apache2Confirm the administrator login works. ILIAS must reject the published default root/homer and accept your per-instance password. The stored hash never verifies homer:
sudo mariadb ilias -N -e "SELECT passwd FROM usr_data WHERE login='root';" | php -r '$h=trim(fgets(STDIN)); echo password_verify("homer",$h)?"homer STILL VALID\n":"homer rejected (good)\n";'Security recommendations
- Keep port 22 limited to your management network.
- Change the administrator password from the ILIAS user settings if you share it, and give instructors their own accounts rather than the administrator login.
- Keep MariaDB on socket authentication. If a reporting tool must connect over the network, create a separate read-only account with its own password, bind it to the tool's address, and keep port 3306 closed in the security group.
- Apply Ubuntu security updates regularly (
sudo apt-get update && sudo apt-get upgrade). Unattended security upgrades are enabled.
Support and licensing
ILIAS is licensed under the GNU General Public License version 3 (GPL-3.0). Its source is at github.com/ILIAS-eLearning/ILIAS.
You are responsible for the data protection of the learner records you enter. ILIAS is a trademark of the ILIAS open source e-Learning society. SecureAnyCloud is not affiliated with or endorsed by the society.
SecureAnyCloud provides 24/7 technical support by email and live chat: sales@secureanycloud.com. Every product in this listing is on the Hardened Moodle & E-Learning Platforms AMIs guide hub.
Deploy on AWS
Launch ILIAS 11.5 on Ubuntu 24.04 on AWS with 24/7 support from SecureAnyCloud.
View on Marketplace
Need Help?
Our support team is available 24/7.
sales@secureanycloud.com