Skip to content

NXNJZ

Linux and Security

  • BLOG
  • Cowsay Fortune
  • Contact
  • Gitlab
  • Company Homepage

Tag: ubuntu

How to Install Postmill on Ubuntu 18.04 LTS with Apache or Nginx

Posted on September 16, 2019 - September 19, 2019 by nxnjz

postmill banner

Introduction

Postmill is a free and open-source web-based social link aggregator with voting and nested comments, similar to the popular Reddit platform. This article will explain the full installation process on a Vultr Ubuntu 18.04 LTS system, including the setup of Nginx and Apache as replacements for the Symfony web server.

Requirements

  • A Ubuntu 18.04 instance (2GB+ of physical memory recommended)
  • Access to a user with sudo privileges, we’ll assume this user is user1 in the rest of this guide.

Swap file

If your system has less than 2 gigabytes of memory, you may run into memory allocation errors during the installation process. We’ll create a 4GB swap file to avoid such issues, but keep in mind that swap space performs very poorly in comparison to physical memory.

 sudo dd if=/dev/zero of=/swap bs=1k count=4M
sudo chmod 0600 /swap
sudo mkswap /swap
sudo swapon /swap
echo "/swap swap swap defaults 0 0" | sudo tee -a /etc/fstab

Installation

Preparing the system

First, we’ll update the system and install a few needed packages.

sudo apt update && sudo apt upgrade -y
sudo apt install -y curl apt-transport-https

Then we’ll install package repositories for Node.js and yarn, in order to get the needed package versions.

curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | sudo apt-key add -
echo "deb https://dl.yarnpkg.com/debian/ stable main" | sudo tee /etc/apt/sources.list.d/yarn.list
curl -sL https://deb.nodesource.com/setup_12.x | sudo bash -

And install the needed packages (which consists of php libraries, the PostgreSQL database server and client, Node.js and other tools.)

sudo apt update
sudo apt install -y nodejs yarn php php-curl php-gd php-common php-intl php-mbstring php-xml php-json php-pgsql postgresql postgresql-client php-zip unzip php-symfony-polyfill-intl-icu

Downloading Postmill and building its components

Clone the postmill gitlab repository to /var/www/, and give yourself ownership of the resulting directory:

sudo mkdir /var/www
cd /var/www
sudo git clone https://gitlab.com/postmill/Postmill.git
sudo chown -R user1:user1 Postmill/
cd Postmill

Keep in mind that the rest of this guide assumes your working directory is /var/www/Postmill/.
Then, install composer (a tool for managing PHP dependencies) in the current directory:

php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
php composer-setup.php

And build the frontend assets with the following commands:

yarn install
yarn run build-prod

Using composer, we will now download and setup the PHP dependencies of Postmill.

php composer.phar install

Database Setup

Postmill requires access to a postgresql database. Create a new PostgreSQL user:

sudo -u postgres createuser --pwprompt postmill

You will be asked to enter a password for the new user, make sure you choose a secure and unique password. We’ll now create a database named ‘postmill’, owned by the user ‘postmill’.

sudo -u postgres createdb -O postmill postmill

Postmill Configuration

Copy the default configuration file .env to .env.local(cp .env .env.local). Changes will be made in the latter to override default values. Open .env.local in a text editor of your choice, and find the following line:

DATABASE_URL=pgsql://db_user:db_password@localhost:5432/db_name?serverVersion=9.6

Replace db_user and db_name with postmill; db_password with the password chosen during user creation in the previous step; and 9.6 with your currently installed version. You can run the following PostgreSQL query to determine which version is installed on your system:

sudo -u postgres psql postgres -c 'SELECT version()' | grep PostgreSQL | cut -d' ' -f3

The database URL should now look like the following:

DATABASE_URL=pgsql://postmill:thisisastrongpassword@localhost:5432/postmill?serverVersion=10.9

You’ll also need to provide a secret string (on line 23 of the same file) such as:

 APP_SECRET="Df4wgdwrt4PQv9AUMmLkempHTMmULG6a3kwa5nQj"

Do Not use the value provided in this article. You can use the following command to generate a random 40-character string instead:

 cat /dev/urandom | tr -dc 'a-zA-Z0-9' | fold -w 40 | head -1

We can now close that file, and we’ll make sure that the environment meets the necessary requirements:

vendor/bin/requirements-checker

You should fix any issues that arise from this check before proceeding with the installation.

Now run bin/console doctrine:migrations:migrate to load the database schema, followed by bin/console app:user:add admin1 --admin to create a default administrator account named ‘admin1’. You can choose any other username for this account, you can also create more than one administrator.

At this point, the postmill installation is complete. Further instructions are provided separately for develeopment and production instances.

Development Instances (Symfony web server)

For developing and testing Postmill, the symfony local web server is sufficient. It can be started by running bin/console server:run. By default, symfony will listen on localhost, port 8000/tcp. To access it, SSH port forwarding is recommended. You can read more about SSH port forwarding here.

Production Deployment

When running Postmill in a production environment, you’ll need to use either Apache or Nginx, trying to install both web servers on the same system will not work. Software-specific instructions are provided in subsequent sections.

Open the file we previously created (.env.local) in a text editor and change APP_ENV=dev to APP_ENV=prod. Or use sed to make that change: sed -i "s/APP_ENV=dev/APP_ENV=prod/" .env.local

Apache with mod_php

First, install Apache and make sure it is enabled and running:

sudo apt update
sudo apt install -y apache2
sudo systemctl enable --now apache2.service

Then install the symfony pack for Apache support:

php composer.phar require symfony/apache-pack

Create a new Apache configuration file under /etc/apache2/sites-available/ with a text editor of your choice. For example:

 sudo vim /etc/apache2/sites-available/postmill80.conf

And populate it with the following basic configuration (replace example.com with your domain name or IP address):

<VirtualHost *:80>

ServerName example.com
DocumentRoot /var/www/Postmill/public

<Directory /var/www/Postmill/public>
AllowOverride All
Order Allow,Deny
Allow from All
</Directory>

<Directory /var/www/Postmill>
Options FollowSymlinks
</Directory>

ErrorLog /var/log/apache2/postmill_error.log
CustomLog /var/log/apache2/postmill_access.log combined

</VirtualHost>

Then enable this configuration: sudo a2ensite postmill80.conf
Some apache modules need to be enabled/disabled:

sudo a2dismod mpm_event
sudo a2enmod rewrite
sudo a2enmod php7.2

Finally, restart the apache service to apply the changes: sudo systemctl restart apache2.service

You should now be able to access your postmill installation by browsing to the domain name or IP address of your Vultr server.

Nginx with PHP-FPM

Start by installing the PHP FastCGI process manager and Nginx, and make sure both services are enabled and running:

sudo apt update
sudo apt install -y nginx php-fpm
sudo systemctl enable --now nginx.service php7.2-fpm.service

Create a new configuration file in /etc/nginx/sites-available/ with a text editor of your choice. For example:

 sudo vim /etc/nginx/sites-available/postmill80.conf

And enter the following minimal configuration (replace example.com with your domain name or IP address):

server {
server_name example.com;
root /var/www/Postmill/public;

location / {
try_files $uri /index.php$is_args$args;
}

location ~ ^/index\.php(/|$) {
fastcgi_pass unix:/var/run/php/php7.2-fpm.sock;
fastcgi_split_path_info ^(.+\.php)(/.*)$;
include fastcgi_params;

fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
fastcgi_param DOCUMENT_ROOT $realpath_root;
internal;
}

location ~ \.php$ {
return 404;
}

error_log /var/log/nginx/postmill_error.log;
access_log /var/log/nginx/postmill_access.log;
}

We now need to enable it by creating a link in the ‘sites-enabled’ directory, and reload the Nginx service to apply the new configuration:

sudo ln -s /etc/nginx/sites-available/postmill80.conf /etc/nginx/sites-enabled/
sudo systemctl reload nginx.service

You should now be able to access your postmill installation by browsing to the domain name or IP address of your Vultr server.

Common problems

PostgreSQL errors such as [An exception occurred in driver: SQLSTATE[08006] [7] FATAL: password authentication failed for user "postmill"] are often caused by an incorrect database URL in the postmill configuration file (.env.local). Make sure you created a database and its respective user as shown in the postmill configuration section of this guide.

Posted in LinuxTagged apache, linux, nginx, ubuntu1 Comment

How to Install PrivateBin on Ubuntu 18.04 LTS

Posted on March 11, 2019 - November 21, 2019 by nxnjz

Introduction

PrivateBin is a minimalist online pastebin where the server has zero knowledge of pasted data. This application supports password-protection, expiration, and self-destruction after reading. It is completely open-source and hosted on github. This article will guide through the installation and configuration of PrivateBin on Ubuntu 18.04 LTS.

Prerequisites

  • A Ubuntu 18.04 system.
  • Root access to your server (via the root user or a user with sudo privileges.)
  • A web server with PHP (Instructions below.)
  • A MySQL database (Instructions below.)

Preparations

If you’re not logged in as the root user, execute sudo -i to obtain a temporary root shell.

Update your system and install required software.

apt update
apt upgrade -y
apt install -y git 

Git will be used to download PrivateBin from its github repository.

Installing a web server stack:

We will be using Apache and PHP. Execute the following to install the required packages:

apt update
apt install -y apache2 php7.2 php7.2-xml php7.2-mbstring php7.2-mysql php7.2-json php7.2-pdo 

Make sure Apache is enabled and running:

systemctl enable --now apache2.service 

Configuring Apache

Using a text editor of your choice, create a new configuration file for Apache. For instance:

vim /etc/apache2/sites-available/privatebin.conf

Populate it with the following (insert your IP address or a domain name pointing to your IP for ServerName):

<VirtualHost *:80>
       ServerName YOUR_SERVER_IP
       DocumentRoot /var/www/html/PrivateBin/
       ErrorLog ${APACHE_LOG_DIR}/privatebin-error.log
       CustomLog ${APACHE_LOG_DIR}/privatebin-access.log combined
    <Directory /var/www/html/PrivateBin>
    AllowOverride All
    </Directory>
</VirtualHost>

Save, exit, and enable this virtual host:

a2ensite privatebin.conf

Reload the configuration:

systemctl reload apache2.service

Installing PrivateBin

Since PrivateBin is hosted on github, we’ll clone the repository locally:

cd /var/www/html/ && git clone https://github.com/PrivateBin/PrivateBin.git

And give the Apache user ownership of the PrivateBin directory:

chown -R www-data:www-data PrivateBin/

You should now be able to access PrivateBin on http://YOUR_SERVER_IP. For better security/privacy, you should consider using a domain name with HTTPS, however this is beyond the scope of this guide.

Optional

PrivateBin supports MySQL storage in place of the default file-based storage model. To implement MySQL storage, follow the steps below.

Installing MariaDB

apt install -y mariadb-server mariadb-client 

systemctl enable --now mariadb.service

Secure your MySQL installation with this command:

mysql_secure_installation

Answer the questions as follows:

Enter current password for root (enter for none): Enter
Set root password? [Y/n]: Y
New password: <your-password>
Re-enter new password: <your-password>
Remove anonymous users? [Y/n]: Y
Disallow root login remotely? [Y/n]: Y
Remove test database and access to it? [Y/n]: Y
Reload privilege tables now? [Y/n]: Y

Make sure you use a strong password.

Configuring MariaDB

Create a database and user for PrivateBin:

mysql -u root -p

MariaDB [(none)]> CREATE DATABASE privatebin DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;
MariaDB [(none)]> CREATE USER 'privatebin'@'localhost' IDENTIFIED BY 'newpassword';
MariaDB [(none)]> GRANT ALL PRIVILEGES ON privatebin.* TO 'privatebin'@'localhost';
MariaDB [(none)]> exit;

Make sure you replace newpassword with a secure password. It should be different from the password you chose for the MariaDB root user.

Changing Storage Mode

First, copy the default configuration file for editing:

cd /var/www/html/PrivateBin/cfg
cp conf.sample.php conf.php

Using a text editor of your choice, open the file conf.php. Find the following segment:

[model]
; name of data model class to load and directory for storage
; the default model "Filesystem" stores everything in the filesystem
class = Filesystem
[model_options]
dir = PATH "data"

;[model]
; example of DB configuration for MySQL
;class = Database
;[model_options]
;dsn = "mysql:host=localhost;dbname=privatebin;charset=UTF8"
;tbl = "privatebin_"    ; table prefix
;usr = "privatebin"
;pwd = "Z3r0P4ss"
;opt[12] = true      ; PDO::ATTR_PERSISTENT

And replace it with:

; [model]
; name of data model class to load and directory for storage
; the default model "Filesystem" stores everything in the filesystem
; class = Filesystem
; [model_options]
; dir = PATH "data"

[model]
class = Database
[model_options]
dsn = "mysql:host=localhost;dbname=privatebin;charset=UTF8"
tbl = "privatebin_"    ; table prefix
usr = "privatebin"
pwd = "newpassword"
opt[12] = true      ; PDO::ATTR_PERSISTENT

Again, make sure you replace newpassword with the password chosen during user creation in the MySQL console, then save and exit.

Restart apache:

systemctl restart apache2.service
Posted in LinuxTagged ubuntu1 Comment

How to Install WallaBag on Ubuntu 18.04 LTS

Posted on February 21, 2019 - February 21, 2019 by nxnjz

Introduction

Wallabag is a self-hosted PHP web application allowing you to save web pages for later reading. It extracts content so that you can read it when you have time. This article will explain the installation of Wallabag on a Ubuntu 18.04 system.

Prerequisites

  • A Ubuntu 18.04 VPS.
  • Root access to your server (via a user with sudo privileges.)
  • A web server with PHP (Instructions below.)
  • A MySQL database (Instructions below.)

Preparations

Update your system and install required software.

sudo apt update
sudo apt upgrade -y
sudo apt install -y git make composer

Git will be used to download Wallabag from its github repository and composer, via the make command, to install PHP libraries.

Installing a web server stack:

We will be using Apache with PHP, and MariaDB for the database. Execute the following to install the required packages:

sudo apt install -y apache2 php7.2 php7.2-common php7.2-xml php7.2-mbstring php7.2-mysql php7.2-json php7.2-pdo php7.2-gd php7.2-tidy php7.2-curl php7.2-bcmath php7.2-zip mariadb-server mariadb-client

Make sure Apache and MariaDB are enabled and running:

sudo systemctl enable --now apache2.service mariadb.service

Configuring Apache

Using a text editor of your choice, create a new Apache configuration file. For instance:

sudo vim /etc/apache2/sites-available/wallabag.conf

Populate it with the following (insert your Vultr IP address or a domain name pointing to your IP for ServerName):

<VirtualHost *:80>
    ServerName IP_or_DOMAIN_NAME 
    DocumentRoot /var/www/wallabag/web
    <Directory /var/www/wallabag/web>
        AllowOverride None
        Order Allow,Deny
        Allow from All
        <IfModule mod_rewrite.c>
            Options -MultiViews
            RewriteEngine On
            RewriteCond %{REQUEST_FILENAME} !-f
            RewriteRule ^(.*)$ app.php [QSA,L]
        </IfModule>
    </Directory>
 <Directory /var/www/wallabag/web/bundles>
        <IfModule mod_rewrite.c>
            RewriteEngine Off
        </IfModule>
    </Directory>
    ErrorLog /var/log/apache2/wallabag_error.log
    CustomLog /var/log/apache2/wallabag_access.log combined
</VirtualHost>

Save, exit, and enable this virtual host:

sudo a2ensite wallabag.conf

Enable the rewrite apache module:

sudo a2enmod rewrite

Restart Apache to apply changes:

sudo systemctl restart apache2.service

Configuring MariaDB for WallaBag

Start by securing your MySQL installation with this command:

sudo mysql_secure_installation

Answer the questions as shown:

Enter current password for root (enter for none): Enter
Set root password? [Y/n]: Y
New password: <your-password>
Re-enter new password: <your-password>
Remove anonymous users? [Y/n]: Y
Disallow root login remotely? [Y/n]: Y
Remove test database and access to it? [Y/n]: Y
Reload privilege tables now? [Y/n]: Y

Make sure you use a strong password.

Configuring MariaDB

Create a database and user for Wallabag:

sudo mysql -u root -p

MariaDB [(none)]> CREATE DATABASE wallabag; 
MariaDB [(none)]> CREATE USER 'wallabaguser'@'localhost' IDENTIFIED BY 'wallabagpassword';
MariaDB [(none)]> GRANT ALL PRIVILEGES ON wallabag.* TO 'wallabaguser'@'localhost';
MariaDB [(none)]> exit;

Make sure you replace wallabagpassword with a secure password. It should be different from the password you chose for the MariaDB root user.

Installing Wallabag

Since Wallabag is hosted on github, we’ll clone the repository locally:

cd /var/www/
sudo git clone https://github.com/wallabag/wallabag.git 

And transfer ownership to the apache user:

sudo chown -R www-data:www-data /var/www/wallabag

It is not recommended to run the installation scripts as root, so we will use the apache user:

sudo -u www-data /bin/bash
cd /var/www/wallabag/
make install

You will be asked several questions regarding desired configuration:

database_driver (pdo_mysql): pdo_mysql
database_driver_class (null): Press Enter
database_host (127.0.0.1): 127.0.0.1
database_port (null): 3306
database_name (wallabag): wallabag
database_user (root): wallabaguser
database_password (null): wallabagpassword
database_path (null): Press Enter
database_table_prefix (wallabag_): Prefix of your choice or Press Enter for the default.
database_socket (null): Press Enter
database_charset (utf8mb4): Press Enter
domain_name ('https://your-wallabag-url-instance.com'): http://IP_or_DOMAIN_NAME 

Choose the default (press Enter) for the remaining questions.

If you followed the steps correctly, you’ve successfully installed WallaBag on Ubuntu. You should now be able to access it on http://IP_or_DOMAIN_NAME. For better security/privacy, you should consider using a domain name with HTTPS, however this is beyond the scope of this guide.

 

Want to Install WallaBag on Fedora 29 instead?

Posted in LinuxTagged apache, ubuntu, wallabagLeave a comment

Recent Posts

  • CVE-2021-42052 full disclosure
  • How to Set Up an Interactive SSH Honeypot on CentOS 8.
  • HackTheBox.eu Jarvis Writeup
  • How to setup a simple proxy server with tinyproxy (Debian 10 Buster)
  • How to Install qdPM 9.1 on Debian 10 LEMP

Tags

802.11 ampache apache aspx bash cd centos cms crm cve debian exploits fedora fulldisclosure hackthebox honeypot http httpd ifconfig iw iwconfig labs lfi linux mariadb memory monit music nginx pastebin php privatebin privesc project management proxy reconnoitre selinux shopt ssh systemd txpower ubuntu wallabag wireless xxe

Categories

  • BASH (1)
  • CTF/Labs (2)
  • CVE / full disclosure (1)
  • Information Gathering (1)
  • Linux (25)
  • Password Cracking (1)
  • Privilege Escalation (2)
  • SQL Injection (1)
  • Web-Shells (1)
  • Wifi (2)
  • XXE (1)

Recent Comments

  • Bernard Martiny on How to Install PrivateBin on Ubuntu 18.04 LTS
  • VuCSA on List of security labs/challenges/CTFs
  • Brian on How to Install PrivateBin on Fedora 29.
  • Tyreeb on Installing Ampache on CentOS 7.
  • Christian Mora on Installing Ampache on CentOS 7.