RatticDB
RatticDB är en open-source password management databas gjord för att flera ska kunna läsa och skriva samtidigt. Man hostar den själv och når den via en hemsida.
Förberedelse
Om man vill och det är rekomenderat är följande,
- Att man använder HTTPS för att logga in på Rattic.
- Filsystemet där din databas lagras bör vara krypterat.
- Access loggarna bör vara skyddade.
- Program som OSSEC är bra att använda.
En fungerande LAMP och en databas skapad åt rattic samt följande paket.
- python
- pip
- GCC
- mysql-devel
- openssl-devel
- openldap-devel
- python-devel
- libxml2-devel
- libxslt-devel
- gettext
Installation
Det är rekomenderat att installera under /opt/apps
.
mkdir /opt/apps && cd /opt/apps
git clone
https://github.com/tildaslash/RatticWeb
cd RatticWeb
pip install -r requirements-mysql.txt
mkdir static
cd conf && cp defaults.cfg local.cfg
Ändra följande rader,
[ratticweb]
debug = False
secretkey = [enter a string of random secret data]
hostname = rattic
[filepaths]
static = /opt/apps/RatticWeb/static
[database]
engine = django.db.backends.mysql
name = rattic
user = root
password =
host =
port =
Skapa sedan tabeller i databasen och fyll static mappen.
cd /opt/apps/RatticWeb/
./manage.py syncdb --noinput
./manage.py migrate --all
./manage.py collectstatic -c --noinput
./manage.py demosetup
Logga in med användaren admin
med password rattic
.
Nginx konfiguration
Börja med att installera supervisord och gunicorn.
pip install gunicorn
easy_install supervisor
wget
https://gist.githubusercontent.com/howthebodyworks/176149/raw/88d0d68c4af22a7474ad1d011659ea2d27e35b8d/supervisord.sh
-O /etc/init.d/supervisord
update-rc.d supervisord defaults
mkdir /opt/apps/log
Lägg till följande rader längst ner i /etc/superviseord.conf
.
[program:RatticDB]
command = /opt/apps/gunicorn_start.sh
user = rattic
stdout_logfile = /opt/apps/log/gunicorn_supervisor.log
redirect_stderr = true
Skapa en fil som heter gunicorn_start.sh
under /opt/apps och lägg in
följande.
#!/bin/bash
NAME="RatticDB" # Name of the application
DJANGODIR=/opt/apps/RatticWeb/ # ratticdb project directory
USER=rattic # the user to run as
GROUP=rattic # the group to run as
NUM_WORKERS=3 # how many worker processes should Gunicorn spawn (2xcores+1)
DJANGO_SETTINGS_MODULE=ratticweb.settings # which settings file should Django use
DJANGO_WSGI_MODULE=ratticweb.wsgi # WSGI module name
echo "Starting $NAME as `whoami`"
# Activate the virtual environment
cd $DJANGODIR
export DJANGO_SETTINGS_MODULE=$DJANGO_SETTINGS_MODULE
export PYTHONPATH=$DJANGODIR:$PYTHONPATH
# Start your Django Unicorn
# Programs meant to be run under supervisor should not daemonize themselves (do not use --daemon)
exec /usr/bin/gunicorn ${DJANGO_WSGI_MODULE}:application \
--name $NAME \
--workers $NUM_WORKERS \
--user=$USER --group=$GROUP \
--log-level=debug \
--bind=127.0.0.1:8000
Nginx conf fil.
server {
listen 443 ssl;
server_name rattic.hackernet.se;
client_max_body_size 4G;
location /static/ {
alias /opt/apps/RatticWeb/static/;
}
location /media/ {
alias /opt/apps/RatticWeb/media/;
}
add_header Strict-Transport-Security max-age=15768000;
add_header X-Frame-Options DENY;
add_header X-Content-Type-Options nosniff;
ssl_certificate /etc/nginx/cert.crt;
ssl_certificate_key /etc/nginx/cert/cert.pem;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers 'ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:!aNULL:!eNULL:!EXPORT:!CAMELLIA:!DES:!MD5:!PSK:!DSS:!RC4';
ssl_prefer_server_ciphers on;
ssl_dhparam /etc/nginx/cert/dhparam.pem;
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;
location / {
proxy_pass
http://127.0.0.1:8000
;
}
}
server {
listen 80;
server_name rattic.hackernet.se;
# 301 = permanent redirect, 302 = temporary redirect
return 301
https://rattic.hackernet.se$request_uri
;
}
Starta sedan Rattic med hjälp av supervisord.
service supervisord start
LDAP
Lägg in följande i conf filen. Mer dokumentation finns på Rattic Wiki.
[ldap]
# LDAP server details
uri =
ldap://localhost
# User parameters
userbase = ou=users,dc=example,dc=com
userfilter = (uid=%(user)s)
# Set up the basic group parameters.
groupbase = ou=django,ou=groups,dc=example,dc=com
groupfilter = (objectClass=groupOfNames)
grouptype = GroupOfNamesType
# How do I find staff
staff = cn=staff,ou=groups,dc=example,dc=com