如何部署privacyIDEA?

privacyIDEA

1 基础知识

1.1 privacyIDEA的介绍

1.1.1 privacyIDEA是什么?

– 模块化的身份验证服务器
– 可通过双因素身份验证来增强应用程序的安全

1.1.2 privacyIDEA的作用

– 可增强本地登录的安全性
– 可增强VPN的安全性
– 可增强远程访问的安全性
– 可增强SSH连接的安全性
– 可增强访问网站或Web门户网站的安全性
注,privacyIDEA最初有如下作用,
– 作为OTP服务器的提供OTP(一次性密码)认证设备
– 也可用户其他设备的Challenge Response、U2F、Yubikeys、SSH秘钥和x509证书

1.1.3 软件特点

– 运行于Linux系统
– 完全开源,基于AGPLv3的许可发布
– 系统由Python语言编写
– 使用Flask的Web框架
– 使用SQL数据库作为数据存储

1.1.4 支持的用户来源

– LDAP服务
– Active Directory
– SQL数据库
– 平面文件
– SCIM服务

1.2 privacyIDEA的功能

1.2.1 支持的认证设备

– Simple pass token,即简单的令牌传递(实际总回应ACCEPTED)
– HOTP/TOTP,支持的品牌有SafeNet/eToken Pass、Safeword、Feitian、Smartdisplayer(所有OATH令牌)
– Push-Button key fobs,即按钮式密码卡
– OTP cards,即One-time Password或称动态口令
– Smartphone Apps,如Google Authenticator或FreeOTP
– MOTP,即移动密码系统
– QR code,即通过扫描QR码验证TiQR令牌
– RADIUS token,即将身份验证请求转发给RADIUS服务器
– REMOTE token,即将身份验证请求转发给别的privacyIDEA服务器
– Email-Token,即通过电子邮件发送的一次性密码
– SMS-Token,即通过短信发送一次性密码(SMSOTP,mTAN,mobileTAN)
– Yubikey in all Modes,即Yubikey的所有模式,包括OATH HOTP、Challenge Response、Yubico AES
– Day OTP token,即通过一天使用一个密码并在第二天更改令牌的密码的验证设备
– Password token,即将OTP PIN与附加密码的组合,适用于内部丢失令牌的场景
– SSH public key,即SSH令牌包含公共的SSH秘钥,此SSH秘钥可分发到计算机用于SSH登录
– x509 certificates,即由证书颁发机构颁发的x509证书
– Registration Token,即注册令牌,便于部署
– python class inherited from TokenClass,即从TokenClass继承的新Python类来添加新的身份验证设备

1.2.2 支持的认证接口

– 支持REST API(符合RESTful设计架构的接口)和JWT(JSON Web Token)身份验证
– 支持返回JSON输出
– 支持与SimpleSAMLphp一起充当SAML身份提供程序
– 插件可用于,
– – FreeRADIUS
– – PAM(支持离线OTP)
– – Apache2
– – OTRS
– – Django
– – ownCloud
– – WordPress
– – TYPO3
– – Contao
– – dokuwiki等等

1.2.3 支持的登录方式

– 用户或管理员可以登录privacyIDEA WebUI
– 用户或管理员可针对其他用户(例如域密码)或针对privacyIDEA(使用OTP)进行身份验证

1.2.4 支持的管理

– 支持创建解析器和领域
– 支持查看审核日志
– 支持管理令牌,具体是注册或删除、分配或取消分配、设置PIN、导入、启用或禁用、重新同步令牌、查看令牌详情
– 支持获取特定的令牌OTP值
– 支持获取特定OTP值的令牌序列号
– 支持定义令牌默认设置
– 支持令牌有效期
– 支持令牌最大使用量(根据每天或单个令牌的使用计数,例如可限制10此成功登录或20此尝试登录,或多少周内有效)
– 支持创建丢失的令牌,即将临时令牌注册给丢失令牌的用户
– 支持定义策略
– 支持通过RADIUS侧列进行简单迁移
– 支持定义根据任何的操作定义任何操作

1.2.5 支持的自助服务

– 支持用户可通过WebUI自行管理自己的令牌
– 支持通过QR码(Google身份验证器)、通过种子或令牌的序列号注册新令牌
– 支持删除、禁用、启用和设置PIN
– 支持查看与用户相关的账号、令牌的审核日志

1.2.6 支持的用户来源

– 支持用户的来源有,平面文件、SQL数据库、LDAP、openLDAP、Active Directory或其他LDAP服务器或SCIM服务器
– 支持根据SQL用户表定义设置,有些程序包含预定义配置,如WordPress、OTRS、onwCloud和Tine 2.0
– 支持根据LDAP目录定义设置,有些程序包含预定义配置,如openLDAP和Active Directory
– 支持将一个领域组合到另外一个领域,privacyIDEA可管理无限个领域
– 支持在SQL用户存储中增删改查privacyIDEA用户

1.2.7 支持的策略

– 支持详细的行为配置(由复杂的策略模块支持)
– 支持为令牌管理、系统配置、自助服务、身份验证、授权 、注册和审核定义策略
– 支持针对某些用户、领域、管理员、管理员操作、请求的客户端、请求令牌的类型等使用策略
– 支持管理范围策略,如定义管理界面中允许管理员执行的操作(每个操作)
– 支持系统范围策略,如定义允许那个管理员配置privacyIDEA
– 支持自助服务范围策略,如定义允许用户在自助服务门户中使用它的令牌执行操作(定制从本地网络或因特网登录权限不同)
– 支持身份验证范围策略,如定义要求用户使用OTP值以外的OTP PIN登录或额外使用LDAP密码登陆
– 支持授权范围策略,如定义需要某些类型的令牌或序列号登录
– 支持注册范围策略,如定义允许用户分配的令牌数或领域包含的令牌数或注册期间的随机OTP PIN或OTP PIN强度
– 支持审计范围,如定义允许那个管理严查看审计日志
– 支持导入和导出、启用或禁用策略

1.2.8 支持的事件处理程序

– 支持响应事件的电子邮件通知
– 支持定义已处理事件不会更改原始行为
– 支持通过简单的模块设置增强时间处理

1.2.9 支持的审计

– 详细的审计日志存储到SQL数据库
– 审计条目经过数据签名和检查以防止删除(防篡改)
– 审计日志会跟踪事件状态、事件触发者、涉及的令牌、请求的客户端、执行的privacyIDEA服务器以及其他详细信息

1.2.10 支持的机器和应用

– 支持定义客户端的计算机
– 支持定义应用程序的类型(SSH、PAM、LUKS),支持分配令牌到计算机的那些程序、支持脱机身份验证

1.2.11 支持的数据库

– SQLite
– MySQL
– PostgreSQL
– Oracle
– DB2
注:令牌秘钥数据库中使用AES加密

2 最佳实践

2.1 部署系统环境

2.1.1 系统环境信息

HostName = privacyidea.cmdschool.org
OS = CentOS 7.6-x86_64
IP Address = 10.168.0.105

2.1.2 升级系统

yum -y update

执行完升级之后,重启操作系统,

reboot

2.1.3 配置额外的yum源

yum install -y https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
yum install -y yum-plugin-priorities

修改源的优先级别,

vim /etc/yum.repos.d/epel.repo

如下配置中加入参数配置yum源的优先级别,

[epel]
name=Extra Packages for Enterprise Linux 7 - $basearch
#baseurl=http://download.fedoraproject.org/pub/epel/7/$basearch
metalink=https://mirrors.fedoraproject.org/metalink?repo=epel-7&arch=$basearch
failovermethod=priority
priority=10
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7

注:加入“priority=10”

2.1.4 安装所需的工具

yum install -y vim git wget open-vm-tools net-tools NetworkManager-tui 

以下工具可选安装,并非强制要求,

yum install -y links nmap rkhunter

2.1.5 配置名称解析

echo '10.168.0.105 privacyidea privacyidea.cmdschool.org' >> /etc/hosts

2.1.6 关闭selinux

setenforce 0
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config

2.1.7 配置ntp服务与时区

yum install -y chrony

启动服务并配置自启动

systemctl start chronyd.service
systemctl enable chronyd.service

注:如果内网有NTP服务器,请根据实际情况修改如下配置,

grep server /etc/chrony.conf

需要修改的参数如下,

server 0.centos.pool.ntp.org iburst
server 1.centos.pool.ntp.org iburst
server 2.centos.pool.ntp.org iburst
server 3.centos.pool.ntp.org iburst

配置时区,

timedatectl set-timezone Asia/Shanghai

2.1.8 配置防火墙

firewall-cmd --permanent --add-service=http --add-service=https
firewall-cmd --reload
firewall-cmd --list-all

2.2 部署开发环境

yum groupinstall -y 'Development Tools'

2.3 部署MySQL

2.3.1 安装软件包

yum install -y mariadb-server mariadb-devel

2.3.2 启动服务并配置自启动

systemctl start mariadb.service
systemctl enable mariadb.service

2.3.3 初始化数据库

mysql_secure_installation

向导配置如下,

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

2.3.4 创建应用所需的库

echo 'create database privacyidea;' | mysql -u root -p
echo 'grant all privileges on privacyidea.* to "privacyidea"@"localhost" identified by "privacyideapwd";' | mysql -u root -p

配置完成可使用如下名称测试你的配置,

mysql -uprivacyidea -pprivacyideapwd

2.4 部署Apache

2.4.1 安装软件包

yum install -y httpd mod_wsgi mod_ssl

2.4.2 启动服务并配置自启动

systemctl start httpd.service
systemctl enable httpd.service

2.5 部署privacyIDEA

2.5.1 安装依赖的软件包

yum install -y python-devel openjpeg-devel openldap-devel libffi-devel freetype-devel freeradius-perl libpng-devel postgresql-devel perl-libwww-perl perl-Config-IniFiles perl-Try-Tiny perl-Data-Dump perl-JSON perl-LWP-Protocol-https python-virtualenv

注:以上安装使用“openjpeg-devel”替代“libjpeg-devel”

2.5.2 创建独立的Python运行环境

virtualenv /opt/privacyIDEA
cd /opt/privacyIDEA
source bin/activate

2.5.3 安装pip所依赖的包

yum install -y libxslt-devel libxml2-devel

2.5.4 下载Python的包索引

git clone https://github.com/privacyidea/privacyidea.git

2.5.5 使用Python包安装工具执行安装

pip install -r privacyidea/requirements.txt
pip install MySQL-python
pip install privacyidea

2.5.6 优化privacyidea的目录结构

mkdir /etc/privacyidea
mkdir /var/log/privacyidea

2.5.7 创建配置文件

vim /etc/privacyidea/pi.cfg

加入如下配置:

# The realm, where users are allowed to login as administrators
SUPERUSER_REALM = ['super', 'administrators']
# Your database
SQLALCHEMY_DATABASE_URI = 'mysql://privacyidea:privacyideapwd@localhost/privacyidea'
# This is used to encrypt the auth_token
SECRET_KEY = 't0p s3cr3t'
# This is used to encrypt the admin passwords
PI_PEPPER = "Never know..."
# This is used to encrypt the token data and token passwords
PI_ENCFILE = '/etc/privacyidea/enckey'
# This is used to sign the audit log
PI_AUDIT_KEY_PRIVATE = '/etc/privacyidea/private.pem'
PI_AUDIT_KEY_PUBLIC = '/etc/privacyidea/public.pem'
PI_LOGFILE = '/var/log/privacyidea/privacyidea.log'
# PI_LOGLEVEL = 20
# PI_INIT_CHECK_HOOK = 'your.module.function'

创建令牌加密、审计秘钥、DB和管理员账号和密码,

pi-manage create_enckey
pi-manage create_audit_keys
pi-manage createdb
pi-manage admin add admin -e admin@localhost

注:最后一条密令创建了管理员的账号(admin)和密码

2.5.8 手动测试服务启动

systemctl stop httpd
pi-manage runserver -h 0.0.0.0 -p 80

注:
– 以上为避免与http冲突,先停掉httpd服务为
– 可用根据提示使用【Ctrl+C】结束服务
– 在停止服务前,可使用链接http://10.168.0.105测试服务

注:使用上一个步骤创建的账号和密码登陆

2.6 配置privacyIDAE的Apache服务

2.6.1 创建运行用户

useradd -r -m privacyidea -d /opt/privacyIDEA

2.6.2 配置权限

chown -R privacyidea:root /etc/privacyidea
/opt/privacyIDEA/bin/privacyidea-fix-access-rights -f /etc/privacyidea/pi.cfg -u privacyidea
chmod 400 /etc/privacyidea/enckey
chmod 400 /etc/privacyidea/*.pem
chown -R privacyidea:root /var/log/privacyidea

2.6.3 准备wsgi的配置文件

mkdir -p /var/run/wsgi
cp /opt/privacyIDEA/etc/privacyidea/privacyideaapp.wsgi /etc/privacyidea
mv /etc/httpd/conf.d/welcome.conf /etc/httpd/conf.d/welcome.conf.disabled

2.6.4 配置虚拟主机

vim /etc/httpd/conf.d/privacyidea.conf

加入如下配置:

TraceEnable off
ServerSignature Off
ServerTokens Prod
WSGIPythonHome /opt/privacyIDEA
WSGISocketPrefix /var/run/wsgi

<VirtualHost _default_:80>
  ServerAdmin webmaster@localhost
  ServerName localhost
  RewriteEngine On
  RewriteCond %{HTTPS} !=On
  RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
</VirtualHost>

<VirtualHost _default_:443>
  ServerAdmin webmaster@localhost
  ServerName localhost
  DocumentRoot /var/www
  <Directory />
    Require all granted
    Options FollowSymLinks
    AllowOverride None
  </Directory>
  # The daemon is running as user 'privacyidea'
  # This user should have access to the encKey database encryption file
  WSGIDaemonProcess privacyidea python-path=/etc/privacyidea:/opt/privacyIDEA/lib/python2.7/site-packages processes=1 threads=15 display-name=%{GROUP} user=privacyidea
  WSGIProcessGroup privacyidea
  WSGIPassAuthorization On
  WSGIScriptAlias / /etc/privacyidea/privacyideaapp.wsgi
  SSLEngine On
  SSLProtocol All -SSLv2 -SSLv3
  SSLHonorCipherOrder On
  SSLCipherSuite EECDH+AES256:DHE+AES256:EECDH+AES:EDH+AES:-SHA1:EECDH+RC4:EDH+RC4:RC4-SHA:AES256-SHA:!aNULL:!eNULL:!EXP:!LOW:!MD5
  SSLCertificateFile /etc/pki/tls/certs/privacyideaserver.pem
  SSLCertificateKeyFile /etc/pki/tls/private/privacyideaserver.key
</VirtualHost>

由于以上配置需要证书,你可以使用如下命令创建,

/opt/privacyIDEA/bin/privacyidea-create-certificate -f /etc/httpd/conf.d/privacyidea.conf

另外,如果你不想收到警告,你还需要修改配置文件的服务器名称,

sed -i 's/#ServerName www.example.com:80/ServerName privacyidea.cmdschool.org:80/g' /etc/httpd/conf/httpd.conf

你可以使用如下命令检查配置文件的语法错误,

apachectl configtest

2.6.5 重启服务使配置生效

systemctl restart httpd.service

2.6.6 重启服务使配置生效

请使用如下链接测试登录,
http://10.168.0.105/

注:由于Apache有配置强制跳转,所以会使用https登录。

2.7 其他配置

2.7.1 修正权限

chown -R privacyidea:root /etc/privacyidea

2.7.2 修改管理密码

cd /opt/privacyIDEA
source bin/activate
pi-manage admin change -p admin

2.7.3 升级privacyIDEA

cd /opt/privacyIDEA
source bin/activate
pip install --upgrade cffi
pip install --upgrade bcrypt
pip install --upgrade privacyidea

参阅文档
==================

官方网站
———–
https://www.privacyidea.org/

软件的特点
———–
https://www.privacyidea.org/about/features/

privacyIDEA的github
——————-
https://github.com/privacyidea/privacyidea
https://www.privacyidea.org/about/the-code/

安装教程
————
https://www.privacyidea.org/two-factor-authentication-with-otp-on-centos-7/
https://privacyidea.readthedocs.io/en/latest/

使用教程
————
https://privacyidea.readthedocs.io/en/latest/

没有评论

发表回复

privacyIDEA
如何加载privacyIDEA非本地的passwd文件用户源?

1 前言 一个问题,一篇文章,一出故事。 虽然privacyIDEA允许导入本地的“/etc/pas …

privacyIDEA
如何修改代码自定义PrivacyIDEA的OTP邮件模板?

1 前言 一个问题,一篇文章,一出故事。 笔者因为需要实现SFTP服务的2FA然后需要使用邮件发送验 …

privacyIDEA
如何创建PrivacyIDEA的邮件2FA Token?

1 前言 一个问题,一篇文章,一出故事。 笔者由于需要使用邮件获取一次性密码用于2FA认证,于是整理 …