Psono 免费密码管理软件
团队和企业的开源凭据经理
PSONO是为团队设计的开源密码管理器。它可以在客户端进行自主,并具有多层加密,以获得最大的安全性。
概述
PSONO是团队的免费密码经理。大多数可以免费使用的开源密码管理器都不提供分别在团队或服务器上扩展和主机密码管理器的选项。但是,使用PSONO,您可以免费使用,完全安全的开源凭据经理,该管理人员正在牢记团队。 使用PSONO,您可以在自己的服务器上部署密码管理器,并允许最多10个用户存储其重要信息并访问它。作为开源密码管理器,它还具有多个设备和跨平台兼容性,例如iOS,Android,MacOS,Linux和浏览器,例如Chrome,Edge,Safari等。 使用PSONO这样的开源密码管理器的主要便利是能够随时随地从任何地方访问您的关键信息,并且能够存储其他信息,例如信用卡数据,银行信息等。 PSONO既方便又有效,尤其是对于正在登录并访问敏感的不同应用程序或服务器的团队。 PSONO是一个自托管密码管理器。它可以用作Web扩展程序,已部署在服务器上,通过Web Client应用程序访问或通过Docker安装。您也可以在手机上访问它,也可以将其安装到任何项目中的CI CD管道中。
系统要求
在为Ubuntu安装PSONO时,请确保您有以下系统要求:
- Ubuntu 20.04
- 通过静态IP或指向它的域/主机名访问服务器。
- 确保服务器具有2GB RAM和2个内核
- 具有Sudo权限的非根本用户
特征
这是一些很高兴知道有关PSONO的功能:
- PSONO使用多层加密,其中三层加密在将数据从浏览器传输到PSONO应用程序服务器时保护数据。服务器使用SALSO20流密封器以及Poly1305 Mac代码对数据进行加密,从而减少了依靠DBA(数据库管理员)进行验证的必要性。
- 您可以使用密码生成器来生成由至少6个字符或更多由符号,数字,较低案例/上案例字符等组成的密码。
- 使用PSONO,在提供了应用程序的必要详细信息之后,您可以轻松地自动填充不同网站的登录凭据。
- 当您通过客户端应用程序离线时,也可以访问密码。
- 您还可以创建紧急代码以在存在数字遗产问题的情况下访问密码,例如团队成员的逝世或在紧急情况下不可用。
- PSONO还检测到可能发生的任何密码泄露并及时报告。
- 您将找到多个API键,允许在构建或启动脚本期间集成密码。
安装
本指南将安装PSONO服务器,并使用Gunicorn和Nginx运行。它已在Ubuntu 18.04上进行了测试。
- 成为根
sudo su
- 安装一些通用的东西
apt-get update
apt-get install -y \
git \
libyaml-dev \
libpython3-dev \
libpq-dev \
libffi-dev \
python3-dev \
python-pip \
python3-pip \
python3-psycopg2 \
postgresql-client \
haveged \
libsasl2-dev \
libldap2-dev \
libssl-dev \
supervisor
pip3 install gunicorn
- 创建PSONO用户
adduser psono
- 成为PSONO用户
su psono
- 克隆GIT存储库
git clone https://gitlab.com/psono/psono-server.git ~/psono-server
- 安装Python要求
Ctrl + D
cd /home/psono/psono-server
pip3 install -r requirements.txt
su psono
- 创建设置文件夹
mkdir ~/.psono_server
- 在〜/ .psono \ _server/带有以下内容中创建一个settings.yaml
# generate the following six parameters with the following command
# python3 ~/psono-server/psono/manage.py generateserverkeys
SECRET_KEY: 'SOME SUPER SECRET KEY THAT SHOULD BE RANDOM AND 32 OR MORE DIGITS LONG'
ACTIVATION_LINK_SECRET: 'SOME SUPER SECRET ACTIVATION LINK SECRET THAT SHOULD BE RANDOM AND 32 OR MORE DIGITS LONG'
DB_SECRET: 'SOME SUPER SECRET DB SECRET THAT SHOULD BE RANDOM AND 32 OR MORE DIGITS LONG'
EMAIL_SECRET_SALT: '$2b$12$XUG.sKxC2jmkUvWQjg53.e'
PRIVATE_KEY: '302650c3c82f7111c2e8ceb660d32173cdc8c3d7717f1d4f982aad5234648fcb'
PUBLIC_KEY: '02da2ad857321d701d754a7e60d0a147cdbc400ff4465e1f57bc2d9fbfeddf0b'
# The URL of the web client (path to e.g activate.html without the trailing slash)
# WEB_CLIENT_url: 'https://www.psono.pw'
# Switch DEBUG to false if you go into production
DEBUG: False
# Adjust this according to Django Documentation https://docs.djangoproject.com/en/2.2/ref/settings/
ALLOWED_HOSTS: ['*']
# Should be your domain without "www.". Will be the last part of the username
ALLOWED_DOMAINS: ['psono.pw']
# If you want to disable registration, you can comment in the following line
# ALLOW_REGISTRATION: False
# If you want to disable the lost password functionality, you can comment in the following line
# ALLOW_LOST_PASSWORD: False
# If you want to enforce that the email address and username needs to match upon registration
# ENFORCE_MATCHING_USERNAME_AND_EMAIL: False
# If you want to restrict registration to some email addresses you can specify here a list of domains to filter
# REGISTRATION_EMAIL_FILTER: ['company1.com', 'company2.com']
# Should be the URL of the host under which the host is reachable
# If you open the url and append /info/ to it you should have a text similar to {"info":"{\"version\": \"....}
HOST_url: 'https://www.psono.pw/server'
# The email used to send emails, e.g. for activation
# ATTENTION: If executed in a docker container, then "localhost" will resolve to the docker container, so
# "localhost" will not work as host. Use the public IP or DNS record of the server.
EMAIL_FROM: <span id="cloak820118571330d66e81d06c4c2b562de4">This email address is being protected from spambots. You need JavaScript enabled to view it.</span><script type="text/javascript">document.getElementById('cloak820118571330d66e81d06c4c2b562de4').innerHTML='';var prefix='ma'+'il'+'to';var path='hr'+'ef'+'=';var addy820118571330d66e81d06c4c2b562de4=''the-mail-for-for-example-useraccount-activations'+'@';addy820118571330d66e81d06c4c2b562de4=addy820118571330d66e81d06c4c2b562de4+'test'+'.'+'com';var addy_text820118571330d66e81d06c4c2b562de4=''the-mail-for-for-example-useraccount-activations'+'@'+'test'+'.'+'com';document.getElementById('cloak820118571330d66e81d06c4c2b562de4').innerHTML+='<a '+path+'\''+prefix+':'+addy820118571330d66e81d06c4c2b562de4+'\'>'+addy_text820118571330d66e81d06c4c2b562de4+'<\/a>';</script>'
EMAIL_HOST: 'localhost'
EMAIL_HOST_USER: ''
EMAIL_HOST_PASSWORD : ''
EMAIL_PORT: 25
EMAIL_SUBJECT_PREFIX: ''
EMAIL_USE_TLS: False
EMAIL_USE_SSL: False
EMAIL_SSL_CERTFILE:
EMAIL_SSL_KEYFILE:
EMAIL_TIMEOUT:
# In case one wants to use mailgun, comment in below lines and provide the mailgun access key and server name
# EMAIL_BACKEND: 'anymail.backends.mailgun.EmailBackend'
# MAILGUN_ACCESS_KEY: ''
# MAILGUN_SERVER_NAME: ''
# In case you want to offer Yubikey support, create a pair of credentials here https://upgrade.yubico.com/getapikey/
# and update the following two lines before commenting them in
# YUBIKEY_CLIENT_ID: '123456'
# YUBIKEY_SECRET_KEY: '8I65IA6ASDFIUHGIH5021FKJA='
# If you have own Yubico servers, you can specify here the urls as a list
# YUBICO_API_URLS: ['https://api.yubico.com/wsapi/2.0/verify']
# Cache enabled without belows Redis may lead to unexpected behaviour
# Cache with Redis
# By default you should use something different than database 0 or 1, e.g. 13 (default max is 16, can be configured in
# redis.conf) possible URLS are:
# redis://[:password]@localhost:6379/0
# rediss://[:password]@localhost:6379/0
# unix://[:password]@/path/to/socket.sock?db=0
# CACHE_ENABLE: False
# CACHE_REDIS: False
# CACHE_REDIS_LOCATION: 'redis://127.0.0.1:6379/13'
# Disables Throttling (necessary for unittests to pass) by overriding the cache with a dummy cache
# https://docs.djangoproject.com/en/2.2/topics/cache/#dummy-caching-for-development
# THROTTLING: False
# Enables the management API, required for the psono-admin-client / admin portal
# MANAGEMENT_ENABLED: False
# Enables the fileserver API, required for the psono-fileserver
# FILESERVER_HANDLER_ENABLED: False
# Enables files for the client
# FILES_ENABLED: False
# Allows that users can search for partial usernames
# ALLOW_USER_SEARCH_BY_USERNAME_PARTIAL: True
# Allows that users can search for email addresses too
# ALLOW_USER_SEARCH_BY_EMAIL: True
# Disables central security reports
# DISABLE_CENTRAL_SECURITY_REPORTS: True
# Configures a system wide DUO connection for all clients
# DUO_INTEGRATION_KEY: ''
# DUO_SECRET_KEY: ''
# DUO_API_HOSTNAME: ''
# If you are using the DUO proxy, you can configure here the necessary HTTP proxy
# DUO_PROXY_HOST: 'the-ip-or-dns-name-goes-here'
# DUO_PROXY_PORT: 80
# DUO_PROXY_TYPE: 'CONNECT'
# If your proxy requires specific headers you can also configure these here
# DUO_PROXY_HEADERS: ''
# Normally only one of the configured second factors needs to be solved. Setting this to True forces the client to solve all
# MULTIFACTOR_ENABLED: True
# Allows admins to limit the offered second factors in the client
# ALLOWED_SECOND_FACTORS: ['yubikey_otp', 'google_authenticator', 'duo']
# Your Postgres Database credentials
# ATTENTION: If executed in a docker container, then "localhost" will resolve to the docker container, so
# "localhost" will not work as host. Use the public IP or DNS record of the server.
DATABASES:
default:
'ENGINE': 'django.db.backends.postgresql_psycopg2'
'NAME': 'psono'
'USER': 'psono'
'PASSWORD': 'password'
'HOST': 'localhost'
'PORT': '5432'
# for master / slave replication setup comment in the following (all reads will be redirected to the slave
# slave:
# 'ENGINE': 'django.db.backends.postgresql_psycopg2'
# 'NAME': 'YourPostgresDatabase'
# 'USER': 'YourPostgresUser'
# 'PASSWORD': 'YourPostgresPassword'
# 'HOST': 'YourPostgresHost'
# 'PORT': 'YourPostgresPort'
# Update the path to your templates folder
# If you do not want to change it (yet) you can leave it like it is.
TEMPLATES: [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': ['/home/psono/psono-server/psono/templates'],
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
],
},
},
]
*如上所述,更新数据库凭据 /秘密 /路径。
*将测试电子邮件发送到Somethingsomethingcom执行: python3〜/psono-server/psono/manage.py sendtestmail somings@something.com
- 如果您收到此测试电子邮件,则应将电子邮件配置正确。
- 创建我们的数据库
python3 ~/psono-server/psono/manage.py migrate
- 运行PSONO服务器
cd ~/psono-server/psono
gunicorn --bind 0.0.0.0:10100 wsgi
- 这将在端口10100上启动PSONO服务器。如果您立即打开http:// your-ip:10100/info/应该看到类似的东西:
{"info":"{\"version\": \"....}
- 再次生根
Ctrl + D
- 创建主管配置。在/etc/supervisor/conf.d/中创建一个psono-server.conf,并使用以下内容:
[program:psono-server]
command = /usr/local/bin/gunicorn --bind 127.0.0.1:10100 wsgi
directory=/home/psono/psono-server/psono
user = psono
autostart=true
autorestart=true
redirect_stderr=true
- 您可能已经意识到我们更改了绑定。这样,只能从Localhost访问PSONO,这很好,因为我们将使用NGINX发出代理请求。
- 重新加载supervisorctl
supervisorctl reload
- 设置清理工作
crontab -e
- 并添加以下行:
30 2 * * * psono python3 /home/psono/psono-server/psono/manage.py cleartoken >> /var/log/cron.log 2>&1
- 为了在生产中运行PSONO密码管理器,需要一个反向代理,以处理SSL卸载并将PSONO服务器和WebClient粘合在一起。按照设置反向代理的指南作为下一步。