LinOTP

How To Install LinOTP on Ubuntu 24.04

Welcome back to the Greenhost.cloud blog! Today, we’re diving into the world of two-factor authentication (2FA) by exploring how to install LinOTP on an Ubuntu 24.04 server. LinOTP is a powerful open-source solution for managing one-time passwords (OTP) and offers robust features for enhancing security across various applications. As cyber threats continue to evolve, implementing a 2FA solution is more crucial than ever.

In this guide, we will walk you through the steps to install and configure LinOTP on Ubuntu 24.04. Let’s get started!

Prerequisites

Before we begin, ensure you have the following:

  1. Ubuntu 24.04 Server: A fresh installation is recommended.
  2. Root or Sudo Privileges: You need administrative access to install packages.
  3. Python 3.8 or higher: LinOTP requires Python to run.
  4. Database: Either PostgreSQL or MySQL to store user data and tokens.

Step 1: Update Your System

First, make sure your system is up-to-date. Open the terminal and run:

sudo apt update && sudo apt upgrade -y

Step 2: Install Required Packages

LinOTP requires several dependencies. Install them using the following command:

sudo apt install python3 python3-pip python3-venv nginx git -y

Step 3: Set Up a Virtual Environment

Creating a virtual environment for your LinOTP installation helps to manage dependencies more efficiently. Navigate to your preferred installation directory and create a virtual environment:

mkdir ~/linotp
cd ~/linotp
python3 -m venv venv
source venv/bin/activate

Step 4: Install LinOTP

Now that you have your virtual environment set up, you can install LinOTP using pip:

pip install linotp

Step 5: Configure Database

For PostgreSQL

If you choose PostgreSQL as your database, you need to install it:

sudo apt install postgresql postgresql-contrib -y

Once installed, log in to the PostgreSQL shell to create a database and user:

sudo -u postgres psql

Run the following commands to create a database and user:

CREATE DATABASE linotp;
CREATE USER linotpuser WITH ENCRYPTED PASSWORD 'your_password';
GRANT ALL PRIVILEGES ON DATABASE linotp TO linotpuser;
\q

For MySQL

If you opt for MySQL, install it with:

sudo apt install mysql-server -y

Then log in to the MySQL shell:

sudo mysql

Create a database and user:

CREATE DATABASE linotp;
CREATE USER 'linotpuser'@'localhost' IDENTIFIED BY 'your_password';
GRANT ALL PRIVILEGES ON linotp.* TO 'linotpuser'@'localhost';
FLUSH PRIVILEGES;
EXIT;

Step 6: Configure LinOTP

Now that your database is set up, you can configure LinOTP. Create a configuration file in your LinOTP directory:

cp ~/venv/lib/python3.*/site-packages/linotp/config/linotp.conf.example ~/linotp/linotp.conf

Edit the linotp.conf file:

nano ~/linotp/linotp.conf

Update the database settings to match your setup:

[database]
url = postgresql://linotpuser:your_password@localhost/linotp  # For PostgreSQL
# url = mysql://linotpuser:your_password@localhost/linotp  # For MySQL

Step 7: Set Up Nginx

Next, we will set up Nginx to serve LinOTP. Create a new Nginx configuration file:

sudo nano /etc/nginx/sites-available/linotp

Add the following configuration:

server {
    listen 80;
    server_name your_domain_or_IP;

    location / {
        proxy_pass http://127.0.0.1:5000;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

Enable the configuration and restart Nginx:

sudo ln -s /etc/nginx/sites-available/linotp /etc/nginx/sites-enabled/
sudo systemctl restart nginx

Step 8: Start LinOTP

To start LinOTP, run the following command in your virtual environment:

linotp-admin start

Step 9: Access LinOTP

You can now access LinOTP by navigating to http://your_domain_or_IP in your web browser. Follow the on-screen instructions to complete the setup.

Conclusion

Congratulations! You’ve successfully installed LinOTP on your Ubuntu 24.04 server. By implementing LinOTP, you are taking a significant step towards enhancing the security of your applications with two-factor authentication.