如何在OpenSuSE 12.3上使用PostgreSQL运行LinOTP

如何使用PostgreSQL在OpenSuSE 12.3上运行LinOTP

本教程介绍了使用PostgreSQL作为令牌数据库在OpenSUSE 12.3上安装LinOTP。 LinOTP是具有一次性密码的双因素认证解决方案。 在下面的Howto中,我们将展示如何使用LinOTP启用SSH身份验证。

准备好

我们需要安装以下软件包:

zypper install python-virtualenv
zypper install gcc
zypper install python-devel
zypper install zlib-devel

设置postgresql

LinOTP使用数据库来存储令牌信息。 您可以在其他服务器上使用任何数据库,您可以使用现有的数据库,也可以在同一台机器上安装数据库。 在这个例子中,我们在同一台机器上使用PostgreSQL。

所以我们安装必需的软件包:

zypper install postgresql postgresql-server
zypper install postgresql-devel

linux-6a8c:/ opt / LINOTP#su - postgres
postgres @ linux-6a8c:〜> initdb -D / var / lib / pgsql / data /

将使用区域设置“en_US.UTF-8”初始化数据库集群。
相应地将默认数据库编码设置为“UTF8”。
默认文本搜索配置将设置为“english”。
创建目录/ var / lib / pgsql / data ...好的
创建子目录...好的
选择默认的max_connections ... 100
选择默认的shared_buffers ... 24MB
创建配置文件...好的
在/ var / lib / pgsql / data / base / 1中创建template1数据库...好的
初始化pg_authid ...好的
初始化依赖关系...好的
创建系统视图...好的
加载系统对象的描述...好的
创建归类...好的
创建转换...好的
创建字典...好的
设置内置对象的权限...好的
创建信息模式...好的
加载PL / pgSQL服务器端语言...好的
真空数据库template1 ...好的
将template1复制到template0 ...好的
将template1复制到postgres ...好的
警告:为本地连接启用“信任”身份验证
您可以通过编辑pg_hba.conf或使用选项-A或
--auth-local和--auth-host,下次运行initdb时。
成功。 您现在可以使用以下命令启动数据库服务器:
postgres -D / var / lib / pgsql / data
要么
pg_ctl -D / var / lib / pgsql / data -l日志文件启动

postgres@linux-6a8c:~> pg_ctl -D /var/lib/pgsql/data -l pglog.log start

现在,创建postgres用户,创建数据库并授予对该数据库的访问权限:

postgres@linux-6a8c:~> createuser -P linotp2
postgres=# CREATE DATABASE LinOTP2;
CREATE DATABASE
postgres=# GRANT ALL ON DATABASE LinOTP2 TO linotp2;
GRANT

设置linotp

我们正在使用虚拟python环境设置LinOTP。 这也在这里描述

linux-6a8c:~ # mkdir /opt/LINOTP
linux-6a8c:~ # cd /opt/
linux-6a8c:/opt # virtualenv /opt/LINOTP/
linux-6a8c:/opt # cd LINOTP/
linux-6a8c:/opt/LINOTP # source bin/activate

(LINOTP)linux-6a8c:/ opt / LINOTP

更改的提示符(LINOTP)表示您现在处于python虚拟环境中。

现在可以从PyPI安装linotp。 还安装所有依赖项。

(LINOTP)linux-6a8c:/opt/LINOTP # pip install linotp linotpuseridresolver pil configobj psycopg2

创建必要的目录和配置文件:

(LINOTP)linux-6a8c:/opt/LINOTP # mkdir /var/log/linotp
(LINOTP)linux-6a8c:/opt/LINOTP # cp etc/linotp2/linotp.ini.example etc/linotp2/linotp.ini

启动postgres并使其在启动时启动:

(LINOTP)linux-6a8c:/opt/LINOTP # service postgresql start
(LINOTP)linux-6a8c:/opt/LINOTP # chkconfig postgresql on

创建本地postgres用户:

useradd -r linotp2

现在您需要编辑linotp.ini配置文件并修改以下行:

sqlalchemy.url = postgresql+psycopg2://linotp2:test123!@localhost/linotp2

请注意: PostgreSQL为数据库名称使用小字符!

现在您需要创建加密密钥:

(LINOTP)linux-6a8c:/opt/LINOTP # dd if=/dev/urandom of=etc/linotp2/encKey bs=1 count=96

然后创建数据库表:

(LINOTP)linux-6a8c:/opt/LINOTP # paster setup-app etc/linotp2/linotp.ini
Running setup_app() from linotp.websetup

现在你可以测试你的服务器:

(LINOTP)linux-6a8c:/opt/LINOTP # paster serve etc/linotp2/linotp.ini
Starting server in PID 12355.
serving on 0.0.0.0:5001 view at http://127.0.0.1:5001

现在,您可以将浏览器指向http://127.0.01:5001 /管理并开始配置您的LinOTP服务器,创建一个新的用户名解析器,领域和注册用户的令牌。

看看如何在linotp.org上执行第一步。

配置Apache

您可能希望在Apache或任何其他支持wsgi的Web服务器中运行LinOTP。 因此,您将获得身份验证和加密。

首先我们需要安装一些软件包并激活模块:

zypper install apache2 apache2-mod_wsgi 
a2enmod wsgi
a2enmod ssl
chkconfig apache2 on
service apache2 start

打开防火墙中的https端口并重新启动防火墙:

SuSEfirewall2 open EXT TCP https
SuSEfirewall2
SuSEfirewall2: Setting up rules from /etc/sysconfig/SuSEfirewall2 ...
SuSEfirewall2: Firewall rules successfully set

证书

创建自签名证书:

cp etc/apache2/sites-available/linotp2 /etc/apache2/vhosts.d/linotp.conf
openssl genrsa -out /etc/ssl/private/linotpserver.key 2048
chmod 400 /etc/ssl/private/linotpserver.key
openssl req -x509 -new -key /etc/ssl/private/linotpserver.key -out /etc/ssl/certs/linotpserver.pem

配置

现在编辑您的/etc/apache2/vhosts.d/linotp.conf

 WSGIPythonHome /opt/LINOTP
<VirtualHost _default_:443>
        ServerAdmin webmaster@localhost
        ServerName linux-6a8c.az.local

        DocumentRoot /var/www
        <Directory />
                Options FollowSymLinks
                AllowOverride None
        </Directory>
        <Directory /var/www/>
                Options Indexes FollowSymLinks MultiViews
                AllowOverride None
                Order allow,deny
                allow from all
        </Directory>

        <Directory /opt/LINOTP/etc/linotp2/>
          Order allow,deny
          Allow from all
        </Directory>

        WSGIScriptAlias /       /opt/LINOTP/etc/linotp2/linotpapp.wsgi
        #
        # The daemon is running as user 'linotp'
        # This user should have access to the encKey database encryption file
        WSGIDaemonProcess linotp processes=1 threads=15 display-name=%{GROUP} user=linotp
        WSGIProcessGroup linotp
        WSGIPassAuthorization On

        <Location /admin>
                AuthType Digest
                AuthName "LinOTP2 admin area"
                AuthDigestProvider file
                AuthUserFile /opt/LINOTP/etc/linotp2/admins
                Require valid-user
        </Location>

        <Location /audit>
                AuthType Digest
                AuthName "LinOTP2 admin area"
                AuthDigestProvider file
                AuthUserFile /opt/LINOTP/etc/linotp2/admins
                Require valid-user
        </Location>

        <Location /gettoken>
                AuthType Digest
                AuthName "LinOTP2 gettoken"
                AuthDigestProvider file
                AuthUserFile /opt/LINOTP/etc/linotp2/gettoken-api
                Require valuid-user
        </Location>

        <Location /mlogout>
                AuthType Digest
                AuthName "LinOTP2 admin area"
                AuthDigestProvider file
                AuthUserFile /etc/linotp2/admins
                AuthDigestProvider file
                AuthUserFile /etc/linotp2/admins
                Require user EXIT
        </Location>

        <Location /manage>
                AuthType Digest
                AuthName "LinOTP2 admin area"
                AuthDigestProvider file
                AuthUserFile /opt/LINOTP/etc/linotp2/admins
                Require valid-user
        </Location>

        <Location /selfservice>
                # THe authentication for selfservice is done from within the application
        </Location>

        <Location /system>
                AuthType Digest
                AuthName "LinOTP2 admin area"
                AuthDigestProvider file
                AuthUserFile /opt/LINOTP/etc/linotp2/admins
                Require valid-user
        </Location>


        <Location /license>
                # This should have at least the same access rights like /system
               AuthType Digest
               AuthName "LinOTP2 admin area"
               AuthDigestProvider file
               AuthUserFile /opt/LINOTP/etc/linotp2/admins
               Require valid-user
        </Location>

        <Location /validate>
        # No Authentication
        </Location>



        LogLevel info
        ErrorLog /var/log/apache2/error_log

        # Do not use %q! This will reveal all parameters, including setting PINs and Keys!
        # Using SSL_CLINET_S_DN_CN will show you, which administrator did what task
        LogFormat "%h %l %u %t %>s \"%m %U %H\"  %b \"%{Referer}i\" \"%{User-agent}i\" \"%{SSL_CLIENT_S_DN_CN}x\"" LinOTP2
        CustomLog /var/log/apache2/ssl_access.log LinOTP2

        #   SSL Engine Switch:
        #   Enable/Disable SSL for this virtual host.
        SSLEngine on

        #   If both key and certificate are stored in the same file, only the
        #   SSLCertificateFile directive is needed.
        SSLCertificateFile    /etc/apache2/ssl.crt/server.crt
        SSLCertificateKeyFile /etc/apache2/ssl.key/server.key

        <FilesMatch "\.(cgi|shtml|phtml|php)$">
                SSLOptions +StdEnvVars
        </FilesMatch>
        <Directory /usr/lib/cgi-bin>
                SSLOptions +StdEnvVars
        </Directory>
        BrowserMatch ".*MSIE.*" \
                nokeepalive ssl-unclean-shutdown \
                downgrade-1.0 force-response-1.0

        ErrorDocument 500 "<h1>Internal Server Error</h1> Possible reasons can be missing modules or bad access rights on LinOTP configuration files or log files. Please check the apache logfile <pre>/var/log/apache2/error.log</pre> for more details."

</VirtualHost>

创建您的第一个管理员帐户:

htdigest2 -c etc/linotp2/admins "LinOTP2 admin area" admin

创建一个本地帐户,LinOTP wsgi根据该帐户运行:

useradd -r linotp

做一些Apache的东西:

a2enmod mod_auth_digest
a2dismod php5
a2dismod cgi
a2dismod userdir
a2dismod auth_basic

编辑/ etc / sysconfig / apache2使Apache开始使用SSL:

APACHE_SERVER_FLAGS="-D SSL"

最后,让服务在启动时启动并适应文件的访问权限:

chkconfig postgresql on
chkconfig apache2 on
chown -R linotp /var/log/linotp
chown -R linotp /opt/LINOTP/etc/linotp2/data/
赞(52) 打赏
未经允许不得转载:优客志 » 系统运维
分享到:

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏