Psono Phần mềm quản lý mật khẩu miễn phí
Trình quản lý thông tin xác thực nguồn mở cho các nhóm và doanh nghiệp
PSONO là một trình quản lý mật khẩu nguồn mở được thiết kế cho các nhóm. Nó có thể được tự lưu trữ ở phía khách hàng và có mã hóa nhiều lớp để bảo mật tối đa.
Tổng quan
PSONO là người quản lý mật khẩu miễn phí cho các nhóm. Hầu hết các trình quản lý mật khẩu nguồn mở miễn phí sử dụng không cung cấp tùy chọn để mở rộng quy mô và lưu trữ các trình quản lý mật khẩu trong nhóm của bạn hoặc trên máy chủ của bạn, tương ứng. Tuy nhiên, với PSONO, bạn sẽ được người quản lý thông tin nguồn mở hoàn toàn sử dụng, an toàn, được thiết kế trong các nhóm tâm trí. Với PSONO, bạn có thể triển khai trình quản lý mật khẩu trên máy chủ của riêng bạn và cho phép tối đa 10 người dùng lưu trữ thông tin quan trọng của họ và cũng truy cập nó. Là một trình quản lý mật khẩu nguồn mở, nó cũng có nhiều khả năng tương thích với thiết bị và nền tảng như iOS, Android, MacOS, Linux và trình duyệt như Chrome, Edge, Safari và nhiều hơn nữa. Sự tiện lợi chính của việc sử dụng các nhà quản lý mật khẩu nguồn mở như PSONO là khả năng truy cập thông tin quan trọng của bạn từ mọi nơi, bất cứ lúc nào và khả năng lưu trữ thông tin khác như dữ liệu thẻ tín dụng, thông tin ngân hàng và hơn thế nữa. PSONO thuận tiện và hiệu quả, đặc biệt đối với các nhóm đang đăng nhập và truy cập các ứng dụng hoặc máy chủ khác nhau nhạy cảm. PSONO là một trình quản lý mật khẩu tự lưu trữ. Nó có thể được sử dụng như một tiện ích mở rộng web, được triển khai trên máy chủ của bạn, được truy cập thông qua ứng dụng máy khách web hoặc được cài đặt thông qua Docker. Bạn cũng có thể truy cập nó trên điện thoại di động của mình hoặc chỉ đơn giản là cài đặt nó vào đường ống CI CD của bạn cho bất kỳ dự án nào.
Yêu cầu hệ thống
Trong khi cài đặt PSONO cho Ubuntu, hãy đảm bảo bạn có các yêu cầu hệ thống sau:
- Ubuntu 20.04
- Truy cập máy chủ thông qua IP tĩnh hoặc tên miền/tên máy chủ trỏ đến nó.
- Đảm bảo máy chủ có RAM 2GB và 2 lõi
- Người dùng không root có quyền sudo
Đặc trưng
Dưới đây là một số tính năng tốt để biết các tính năng về PSONO:
- PSONO sử dụng mã hóa nhiều lớp trong đó ba lớp mã hóa bảo vệ dữ liệu khi nó được chuyển từ trình duyệt sang máy chủ ứng dụng PSONO. Máy chủ mã hóa dữ liệu bằng mật mã luồng SALSO20 cùng với mã MAC Poly1305 giúp giảm sự cần thiết phải dựa vào DBA (Quản trị viên cơ sở dữ liệu) để xác thực.
- Bạn có thể sử dụng Trình tạo mật khẩu để tạo mật khẩu bao gồm tối thiểu 6 ký tự hoặc nhiều hơn bao gồm các ký hiệu, số, chữ thường/ký tự chữ hoa, v.v.
- Với PSONO, bạn có thể dễ dàng tự động lưu thông tin đăng nhập của mình cho các trang web khác nhau sau khi cung cấp các chi tiết cần thiết trên ứng dụng.
- Mật khẩu cũng có thể được truy cập khi bạn ngoại tuyến thông qua các ứng dụng phía máy khách.
- Bạn cũng có thể tạo mã khẩn cấp để truy cập mật khẩu trong trường hợp có vấn đề về di sản kỹ thuật số, chẳng hạn như việc ra đi của một thành viên trong nhóm hoặc không có sẵn trong trường hợp khẩn cấp.
- PSONO cũng phát hiện bất kỳ vi phạm mật khẩu nào có thể xảy ra và báo cáo về nó đúng lúc.
- Bạn sẽ tìm thấy nhiều khóa API cho phép tích hợp mật khẩu trong các bản dựng hoặc tập lệnh khởi động.
Cài đặt
Hướng dẫn này sẽ cài đặt máy chủ PSONO và chạy nó với Gunicorn và Nginx. Nó đã được thử nghiệm trên Ubuntu 18.04.
- Trở thành gốc
sudo su
- Cài đặt một số thứ chung chung
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
- Tạo người dùng PSONO
adduser psono
- Trở thành người dùng PSONO
su psono
- Kho lưu trữ Git Clone
git clone https://gitlab.com/psono/psono-server.git ~/psono-server
- Cài đặt các yêu cầu Python
Ctrl + D
cd /home/psono/psono-server
pip3 install -r requirements.txt
su psono
- Tạo thư mục Cài đặt
mkdir ~/.psono_server
- Tạo cài đặt.yaml trong ~/ .psono \ _server/ với nội dung sau
# 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',
],
},
},
]
Cập nhật thông tin / bí mật / đường dẫn cơ sở dữ liệu như được mô tả trong các nhận xét ở trên.
Để gửi e-mail kiểm tra đến thực thi một cái gì đó một cái gì đó: Python3 ~/psono-server/psono/Managem -Nếu bạn nhận được e-mail thử nghiệm này, e-mail nên được cấu hình thích hợp.
- Tạo cơ sở dữ liệu của chúng tôi
python3 ~/psono-server/psono/manage.py migrate
- Chạy máy chủ PSONO
cd ~/psono-server/psono
gunicorn --bind 0.0.0.0:10100 wsgi
- Điều này sẽ khởi động máy chủ PSONO trên cổng 10100. Nếu bạn mở ngay http: // your-IP: 10100/thông tin/sẽ thấy một cái gì đó như thế này:
{"info":"{\"version\": \"....}
- Trở thành root một lần nữa
Ctrl + D
- Tạo cấu hình giám sát. Tạo một psono-server.conf in /etc/supervisor/conf.d/ với nội dung sau:
[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
- Bạn có thể đã nhận ra rằng chúng tôi đã thay đổi ràng buộc. Bằng cách này, PSONO chỉ có thể truy cập được từ LocalHost, điều này tốt vì chúng tôi sẽ ủy quyền yêu cầu với Nginx.
- Tải lại giám sát
supervisorctl reload
- Thiết lập công việc dọn dẹp
crontab -e
- và thêm dòng sau:
30 2 * * * psono python3 /home/psono/psono-server/psono/manage.py cleartoken >> /var/log/cron.log 2>&1
- Để chạy Trình quản lý mật khẩu PSONO trong sản xuất, cần có proxy ngược, để xử lý việc giảm tải SSL và dán máy chủ PSONO và WebClient lại với nhau. Thực hiện theo hướng dẫn đến Thiết lập proxy ngược như một bước tiếp theo.