From 30f3411c6929397a20459e3be3454ce1b51649a6 Mon Sep 17 00:00:00 2001 From: Dennis Eriksen Date: Mon, 3 May 2021 14:40:47 +0200 Subject: renaming bitwarden_rs to vaultwarden --- README.md | 26 +-- etc/bitwarden_rs/bitwarden_rs.env | 174 --------------------- etc/vaultwarden/vaultwarden | 174 +++++++++++++++++++++ mkosi.build | 12 +- mkosi.default | 2 +- .../etc/systemd/system/bitwarden_rs.service | 29 ---- mkosi.extra/etc/systemd/system/vaultwarden.service | 29 ++++ mkosi.nspawn | 6 +- mkosi.postinst | 14 +- 9 files changed, 233 insertions(+), 233 deletions(-) delete mode 100644 etc/bitwarden_rs/bitwarden_rs.env create mode 100644 etc/vaultwarden/vaultwarden delete mode 100644 mkosi.extra/etc/systemd/system/bitwarden_rs.service create mode 100644 mkosi.extra/etc/systemd/system/vaultwarden.service diff --git a/README.md b/README.md index 7554b37..d210eaa 100644 --- a/README.md +++ b/README.md @@ -1,25 +1,25 @@ -# A mkosi-template for Bitwarden_RS +# A mkosi-template for Vaultwarden This is a mkosi-template for -[Bitwarden_RS](https://github.com/dani-garcia/bitwarden_rs). In order to set +[Vaultwarden](https://github.com/dani-garcia/vaultwarden). In order to set this up you need Mkosi >=5. To build this, run `sudo mkosi`. This will create a new container in -`/var/lib/machines` called `bitwarden-rs`. Next you should symlink the +`/var/lib/machines` called `vaultwarden`. Next you should symlink the `.nspawn`-config to `/etc/systemd/nspawn` using `sudo ln -s -/var/lib/machines/bitwarden-rs.nspawn /etc/systemd/nspawn/`. +/var/lib/machines/vaultwarden.nspawn /etc/systemd/nspawn/`. After that you need to create the folders we mount into the image. This is -`/etc/bitwarden_rs` and `/var/local/bitwarden_rs`. These should be owned by +`/etc/vaultwarden` and `/var/local/vaultwarden`. These should be owned by root, and have `700` set as permissions. -Then you need to copy `etc/bitwarden_rs/bitwarden_rs.env` to -`/etc/bitwarden_rs/`, and set all your variables. You also need to create a +Then you need to copy `etc/vaultwarden/vaultwarden.env` to +`/etc/vaultwarden/`, and set all your variables. You also need to create a database (using PostgreSQL). Lastly you need to set up a web-proxy - see the -[Bitwarden_RS wiki](https://github.com/dani-garcia/bitwarden_rs/wiki) for -[examples](https://github.com/dani-garcia/bitwarden_rs/wiki/Proxy-examples). +[vaultwarden wiki](https://github.com/dani-garcia/vaultwarden/wiki) for +[examples](https://github.com/dani-garcia/vaultwarden/wiki/Proxy-examples). -Now all you need to do is to run it - `machinectl start bitwarden-rs`. You can -drop into the container to troubleshoot using `machinectl shell bitwarden-rs`, -and you can view logs using `journalctl -M bitwarden-rs` from the host, or -`journalctl -u bitwarden_rs` from inside the container. +Now all you need to do is to run it - `machinectl start vaultwarden`. You can +drop into the container to troubleshoot using `machinectl shell vaultwarden`, +and you can view logs using `journalctl -M vaultwarden` from the host, or +`journalctl -u vaultwarden` from inside the container. diff --git a/etc/bitwarden_rs/bitwarden_rs.env b/etc/bitwarden_rs/bitwarden_rs.env deleted file mode 100644 index 79b93f4..0000000 --- a/etc/bitwarden_rs/bitwarden_rs.env +++ /dev/null @@ -1,174 +0,0 @@ -## Bitwarden_RS Configuration File -## Uncomment any of the following lines to change the defaults - -## Main data folder -# DATA_FOLDER=data - -## Database URL -## When using SQLite, this is the path to the DB file, default to %DATA_FOLDER%/db.sqlite3 -## When using MySQL, this it is the URL to the DB, including username and password: -## Format: mysql://[user[:password]@]host/database_name -# DATABASE_URL=data/db.sqlite3 - -## Individual folders, these override %DATA_FOLDER% -# RSA_KEY_FILENAME=data/rsa_key -# ICON_CACHE_FOLDER=data/icon_cache -# ATTACHMENTS_FOLDER=data/attachments - -## Templates data folder, by default uses embedded templates -## Check source code to see the format -# TEMPLATES_FOLDER=/path/to/templates -## Automatically reload the templates for every request, slow, use only for development -# RELOAD_TEMPLATES=false - -## Cache time-to-live for successfully obtained icons, in seconds (0 is "forever") -# ICON_CACHE_TTL=2592000 -## Cache time-to-live for icons which weren't available, in seconds (0 is "forever") -# ICON_CACHE_NEGTTL=259200 - -## Web vault settings -# WEB_VAULT_FOLDER=web-vault/ -# WEB_VAULT_ENABLED=true - -## Enables websocket notifications -# WEBSOCKET_ENABLED=false - -## Controls the WebSocket server address and port -# WEBSOCKET_ADDRESS=0.0.0.0 -# WEBSOCKET_PORT=3012 - -## Enable extended logging -## This shows timestamps and allows logging to file and to syslog -### To enable logging to file, use the LOG_FILE env variable -### To enable syslog, use the USE_SYSLOG env variable -# EXTENDED_LOGGING=true - -## Logging to file -## This requires extended logging -## It's recommended to also set 'ROCKET_CLI_COLORS=off' -# LOG_FILE=/path/to/log - -## Logging to Syslog -## This requires extended logging -## It's recommended to also set 'ROCKET_CLI_COLORS=off' -# USE_SYSLOG=false - -## Log level -## Change the verbosity of the log output -## Valid values are "trace", "debug", "info", "warn", "error" and "off" -## This requires extended logging -# LOG_LEVEL=Info - -## Enable WAL for the DB -## Set to false to avoid enabling WAL during startup. -## Note that if the DB already has WAL enabled, you will also need to disable WAL in the DB, -## this setting only prevents bitwarden_rs from automatically enabling it on start. -## Please read project wiki page about this setting first before changing the value as it can -## cause performance degradation or might render the service unable to start. -# ENABLE_DB_WAL=true - -## Disable icon downloading -## Set to true to disable icon downloading, this would still serve icons from $ICON_CACHE_FOLDER, -## but it won't produce any external network request. Needs to set $ICON_CACHE_TTL to 0, -## otherwise it will delete them and they won't be downloaded again. -# DISABLE_ICON_DOWNLOAD=false - -## Icon download timeout -## Configure the timeout value when downloading the favicons. -## The default is 10 seconds, but this could be to low on slower network connections -# ICON_DOWNLOAD_TIMEOUT=10 - -## Icon blacklist Regex -## Any domains or IPs that match this regex won't be fetched by the icon service. -## Useful to hide other servers in the local network. Check the WIKI for more details -# ICON_BLACKLIST_REGEX=192\.168\.1\.[0-9].*^ - -## Any IP which is not defined as a global IP will be blacklisted. -## Usefull to secure your internal environment: See https://en.wikipedia.org/wiki/Reserved_IP_addresses for a list of IPs which it will block -# ICON_BLACKLIST_NON_GLOBAL_IPS=true - -## Disable 2FA remember -## Enabling this would force the users to use a second factor to login every time. -## Note that the checkbox would still be present, but ignored. -# DISABLE_2FA_REMEMBER=false - -## Controls if new users can register -# SIGNUPS_ALLOWED=true - -## Token for the admin interface, preferably use a long random string -## One option is to use 'openssl rand -base64 48' -## If not set, the admin panel is disabled -# ADMIN_TOKEN=Vy2VyYTTsKPv8W5aEOWUbB/Bt3DEKePbHmI4m9VcemUMS2rEviDowNAFqYi1xjmp - -## Enable this to bypass the admin panel security. This option is only -## meant to be used with the use of a separate auth layer in front -# DISABLE_ADMIN_TOKEN=false - -## Invitations org admins to invite users, even when signups are disabled -# INVITATIONS_ALLOWED=true - -## Controls the PBBKDF password iterations to apply on the server -## The change only applies when the password is changed -# PASSWORD_ITERATIONS=100000 - -## Whether password hint should be sent into the error response when the client request it -# SHOW_PASSWORD_HINT=true - -## Domain settings -## The domain must match the address from where you access the server -## It's recommended to configure this value, otherwise certain functionality might not work, -## like attachment downloads, email links and U2F. -## For U2F to work, the server must use HTTPS, you can use Let's Encrypt for free certs -# DOMAIN=https://bw.domain.tld:8443 - -## Yubico (Yubikey) Settings -## Set your Client ID and Secret Key for Yubikey OTP -## You can generate it here: https://upgrade.yubico.com/getapikey/ -## You can optionally specify a custom OTP server -# YUBICO_CLIENT_ID=11111 -# YUBICO_SECRET_KEY=AAAAAAAAAAAAAAAAAAAAAAAA -# YUBICO_SERVER=http://yourdomain.com/wsapi/2.0/verify - -## Duo Settings -## You need to configure all options to enable global Duo support, otherwise users would need to configure it themselves -## Create an account and protect an application as mentioned in this link (only the first step, not the rest): -## https://help.bitwarden.com/article/setup-two-step-login-duo/#create-a-duo-security-account -## Then set the following options, based on the values obtained from the last step: -# DUO_IKEY= -# DUO_SKEY= -# DUO_HOST= -## After that, you should be able to follow the rest of the guide linked above, -## ignoring the fields that ask for the values that you already configured beforehand. - -## Authenticator Settings -## Disable authenticator time drifted codes to be valid. -## TOTP codes of the previous and next 30 seconds will be invalid -## -## According to the RFC6238 (https://tools.ietf.org/html/rfc6238), -## we allow by default the TOTP code which was valid one step back and one in the future. -## This can however allow attackers to be a bit more lucky with there attempts because there are 3 valid codes. -## You can disable this, so that only the current TOTP Code is allowed. -## Keep in mind that when a sever drifts out of time, valid codes could be marked as invalid. -## In any case, if a code has been used it can not be used again, also codes which predates it will be invalid. -# AUTHENTICATOR_DISABLE_TIME_DRIFT = false - -## Rocket specific settings, check Rocket documentation to learn more -# ROCKET_ENV=staging -# ROCKET_ADDRESS=0.0.0.0 # Enable this to test mobile app -# ROCKET_PORT=8000 -# ROCKET_TLS={certs="/path/to/certs.pem",key="/path/to/key.pem"} - -## Mail specific settings, set SMTP_HOST and SMTP_FROM to enable the mail service. -## To make sure the email links are pointing to the correct host, set the DOMAIN variable. -## Note: if SMTP_USERNAME is specified, SMTP_PASSWORD is mandatory -# SMTP_HOST=smtp.domain.tld -# SMTP_FROM=bitwarden-rs@domain.tld -# SMTP_FROM_NAME=Bitwarden_RS -# SMTP_PORT=587 -# SMTP_SSL=true -# SMTP_USERNAME=username -# SMTP_PASSWORD=password -# SMTP_AUTH_MECHANISM="Plain" -# SMTP_TIMEOUT=15 - -# vim: syntax=ini diff --git a/etc/vaultwarden/vaultwarden b/etc/vaultwarden/vaultwarden new file mode 100644 index 0000000..91ba017 --- /dev/null +++ b/etc/vaultwarden/vaultwarden @@ -0,0 +1,174 @@ +## Vaultwarden Configuration File +## Uncomment any of the following lines to change the defaults + +## Main data folder +# DATA_FOLDER=data + +## Database URL +## When using SQLite, this is the path to the DB file, default to %DATA_FOLDER%/db.sqlite3 +## When using MySQL, this it is the URL to the DB, including username and password: +## Format: mysql://[user[:password]@]host/database_name +# DATABASE_URL=data/db.sqlite3 + +## Individual folders, these override %DATA_FOLDER% +# RSA_KEY_FILENAME=data/rsa_key +# ICON_CACHE_FOLDER=data/icon_cache +# ATTACHMENTS_FOLDER=data/attachments + +## Templates data folder, by default uses embedded templates +## Check source code to see the format +# TEMPLATES_FOLDER=/path/to/templates +## Automatically reload the templates for every request, slow, use only for development +# RELOAD_TEMPLATES=false + +## Cache time-to-live for successfully obtained icons, in seconds (0 is "forever") +# ICON_CACHE_TTL=2592000 +## Cache time-to-live for icons which weren't available, in seconds (0 is "forever") +# ICON_CACHE_NEGTTL=259200 + +## Web vault settings +# WEB_VAULT_FOLDER=web-vault/ +# WEB_VAULT_ENABLED=true + +## Enables websocket notifications +# WEBSOCKET_ENABLED=false + +## Controls the WebSocket server address and port +# WEBSOCKET_ADDRESS=0.0.0.0 +# WEBSOCKET_PORT=3012 + +## Enable extended logging +## This shows timestamps and allows logging to file and to syslog +### To enable logging to file, use the LOG_FILE env variable +### To enable syslog, use the USE_SYSLOG env variable +# EXTENDED_LOGGING=true + +## Logging to file +## This requires extended logging +## It's recommended to also set 'ROCKET_CLI_COLORS=off' +# LOG_FILE=/path/to/log + +## Logging to Syslog +## This requires extended logging +## It's recommended to also set 'ROCKET_CLI_COLORS=off' +# USE_SYSLOG=false + +## Log level +## Change the verbosity of the log output +## Valid values are "trace", "debug", "info", "warn", "error" and "off" +## This requires extended logging +# LOG_LEVEL=Info + +## Enable WAL for the DB +## Set to false to avoid enabling WAL during startup. +## Note that if the DB already has WAL enabled, you will also need to disable WAL in the DB, +## this setting only prevents vaultwarden from automatically enabling it on start. +## Please read project wiki page about this setting first before changing the value as it can +## cause performance degradation or might render the service unable to start. +# ENABLE_DB_WAL=true + +## Disable icon downloading +## Set to true to disable icon downloading, this would still serve icons from $ICON_CACHE_FOLDER, +## but it won't produce any external network request. Needs to set $ICON_CACHE_TTL to 0, +## otherwise it will delete them and they won't be downloaded again. +# DISABLE_ICON_DOWNLOAD=false + +## Icon download timeout +## Configure the timeout value when downloading the favicons. +## The default is 10 seconds, but this could be to low on slower network connections +# ICON_DOWNLOAD_TIMEOUT=10 + +## Icon blacklist Regex +## Any domains or IPs that match this regex won't be fetched by the icon service. +## Useful to hide other servers in the local network. Check the WIKI for more details +# ICON_BLACKLIST_REGEX=192\.168\.1\.[0-9].*^ + +## Any IP which is not defined as a global IP will be blacklisted. +## Usefull to secure your internal environment: See https://en.wikipedia.org/wiki/Reserved_IP_addresses for a list of IPs which it will block +# ICON_BLACKLIST_NON_GLOBAL_IPS=true + +## Disable 2FA remember +## Enabling this would force the users to use a second factor to login every time. +## Note that the checkbox would still be present, but ignored. +# DISABLE_2FA_REMEMBER=false + +## Controls if new users can register +# SIGNUPS_ALLOWED=true + +## Token for the admin interface, preferably use a long random string +## One option is to use 'openssl rand -base64 48' +## If not set, the admin panel is disabled +# ADMIN_TOKEN=Vy2VyYTTsKPv8W5aEOWUbB/Bt3DEKePbHmI4m9VcemUMS2rEviDowNAFqYi1xjmp + +## Enable this to bypass the admin panel security. This option is only +## meant to be used with the use of a separate auth layer in front +# DISABLE_ADMIN_TOKEN=false + +## Invitations org admins to invite users, even when signups are disabled +# INVITATIONS_ALLOWED=true + +## Controls the PBBKDF password iterations to apply on the server +## The change only applies when the password is changed +# PASSWORD_ITERATIONS=100000 + +## Whether password hint should be sent into the error response when the client request it +# SHOW_PASSWORD_HINT=true + +## Domain settings +## The domain must match the address from where you access the server +## It's recommended to configure this value, otherwise certain functionality might not work, +## like attachment downloads, email links and U2F. +## For U2F to work, the server must use HTTPS, you can use Let's Encrypt for free certs +# DOMAIN=https://bw.domain.tld:8443 + +## Yubico (Yubikey) Settings +## Set your Client ID and Secret Key for Yubikey OTP +## You can generate it here: https://upgrade.yubico.com/getapikey/ +## You can optionally specify a custom OTP server +# YUBICO_CLIENT_ID=11111 +# YUBICO_SECRET_KEY=AAAAAAAAAAAAAAAAAAAAAAAA +# YUBICO_SERVER=http://yourdomain.com/wsapi/2.0/verify + +## Duo Settings +## You need to configure all options to enable global Duo support, otherwise users would need to configure it themselves +## Create an account and protect an application as mentioned in this link (only the first step, not the rest): +## https://help.bitwarden.com/article/setup-two-step-login-duo/#create-a-duo-security-account +## Then set the following options, based on the values obtained from the last step: +# DUO_IKEY= +# DUO_SKEY= +# DUO_HOST= +## After that, you should be able to follow the rest of the guide linked above, +## ignoring the fields that ask for the values that you already configured beforehand. + +## Authenticator Settings +## Disable authenticator time drifted codes to be valid. +## TOTP codes of the previous and next 30 seconds will be invalid +## +## According to the RFC6238 (https://tools.ietf.org/html/rfc6238), +## we allow by default the TOTP code which was valid one step back and one in the future. +## This can however allow attackers to be a bit more lucky with there attempts because there are 3 valid codes. +## You can disable this, so that only the current TOTP Code is allowed. +## Keep in mind that when a sever drifts out of time, valid codes could be marked as invalid. +## In any case, if a code has been used it can not be used again, also codes which predates it will be invalid. +# AUTHENTICATOR_DISABLE_TIME_DRIFT = false + +## Rocket specific settings, check Rocket documentation to learn more +# ROCKET_ENV=staging +# ROCKET_ADDRESS=0.0.0.0 # Enable this to test mobile app +# ROCKET_PORT=8000 +# ROCKET_TLS={certs="/path/to/certs.pem",key="/path/to/key.pem"} + +## Mail specific settings, set SMTP_HOST and SMTP_FROM to enable the mail service. +## To make sure the email links are pointing to the correct host, set the DOMAIN variable. +## Note: if SMTP_USERNAME is specified, SMTP_PASSWORD is mandatory +# SMTP_HOST=smtp.domain.tld +# SMTP_FROM=bitwarden-rs@domain.tld +# SMTP_FROM_NAME=Bitwarden_RS +# SMTP_PORT=587 +# SMTP_SSL=true +# SMTP_USERNAME=username +# SMTP_PASSWORD=password +# SMTP_AUTH_MECHANISM="Plain" +# SMTP_TIMEOUT=15 + +# vim: syntax=ini diff --git a/mkosi.build b/mkosi.build index 7453459..0fac659 100755 --- a/mkosi.build +++ b/mkosi.build @@ -8,16 +8,16 @@ export RUSTUP_HOME=/root/.rustup \ VAULT_VERSION=v2.15.1 mkdir /root/src && cd /root/src -git clone https://github.com/dani-garcia/bitwarden_rs.git +git clone https://github.com/dani-garcia/vaultwarden.git ## get vault ## -mkdir /root/src/bitwarden_rs -cd /root/src/bitwarden_rs +mkdir /root/src/vaultwarden +cd /root/src/vaultwarden curl -L https://github.com/dani-garcia/bw_web_builds/releases/download/$VAULT_VERSION/bw_web_$VAULT_VERSION.tar.gz | tar xz -cd /root/src/bitwarden_rs +cd /root/src/vaultwarden ## Setting up rust for build ## @@ -34,11 +34,11 @@ cargo --version rustc --version -## building bitwarden_rs ## +## building vaultwarden ## cargo build --features postgresql --release ## move stuff ## mv web-vault ${DESTDIR}/ -mv target/release/bitwarden_rs ${DESTDIR}/ +mv target/release/vaultwarden ${DESTDIR}/ diff --git a/mkosi.default b/mkosi.default index 989f36a..5e7b9a7 100644 --- a/mkosi.default +++ b/mkosi.default @@ -6,7 +6,7 @@ Mirror=http://no.archive.ubuntu.com/ubuntu [Output] Format=directory -Output=/var/lib/machines/bitwarden-rs +Output=/var/lib/machines/vaultwarden [Packages] WithNetwork=yes diff --git a/mkosi.extra/etc/systemd/system/bitwarden_rs.service b/mkosi.extra/etc/systemd/system/bitwarden_rs.service deleted file mode 100644 index c6d3322..0000000 --- a/mkosi.extra/etc/systemd/system/bitwarden_rs.service +++ /dev/null @@ -1,29 +0,0 @@ -[Unit] -Description=Bitwarden Server (Rust Edition) -Documentation=https://github.com/dani-garcia/bitwarden_rs -After=network.target - -[Service] -# The user/group bitwarden_rs is run under. the working directory (see below) should allow write and read access to this user/group -User=bitwarden_rs -Group=bitwarden_rs -# The location of the .env file for configuration -EnvironmentFile=/etc/bitwarden_rs/bitwarden_rs.env -# The location of the compiled binary -ExecStart=/usr/local/bin/bitwarden_rs -# Set reasonable connection and process limits -LimitNOFILE=1048576 -LimitNPROC=64 -# Isolate bitwarden_rs from the rest of the system -PrivateTmp=true -PrivateDevices=true -ProtectHome=true -ProtectSystem=strict -# Only allow writes to the following directory and set it to the working directory (user and password data are stored here) -WorkingDirectory=/var/lib/bitwarden_rs -ReadWriteDirectories=/var/lib/bitwarden_rs -# Allow bitwarden_rs to bind ports in the range of 0-1024 -AmbientCapabilities=CAP_NET_BIND_SERVICE - -[Install] -WantedBy=multi-user.target diff --git a/mkosi.extra/etc/systemd/system/vaultwarden.service b/mkosi.extra/etc/systemd/system/vaultwarden.service new file mode 100644 index 0000000..6000845 --- /dev/null +++ b/mkosi.extra/etc/systemd/system/vaultwarden.service @@ -0,0 +1,29 @@ +[Unit] +Description=Vaultwarden Server (Rust Edition) +Documentation=https://github.com/dani-garcia/vaultwarden +After=network.target + +[Service] +# The user/group vaultwarden is run under. the working directory (see below) should allow write and read access to this user/group +User=vaultwarden +Group=vaultwarden +# The location of the .env file for configuration +EnvironmentFile=/etc/vaultwarden/vaultwarden.env +# The location of the compiled binary +ExecStart=/usr/local/bin/vaultwarden +# Set reasonable connection and process limits +LimitNOFILE=1048576 +LimitNPROC=64 +# Isolate vaultwarden from the rest of the system +PrivateTmp=true +PrivateDevices=true +ProtectHome=true +ProtectSystem=strict +# Only allow writes to the following directory and set it to the working directory (user and password data are stored here) +WorkingDirectory=/var/lib/vaultwarden +ReadWriteDirectories=/var/lib/vaultwarden +# Allow vaultwarden to bind ports in the range of 0-1024 +AmbientCapabilities=CAP_NET_BIND_SERVICE + +[Install] +WantedBy=multi-user.target diff --git a/mkosi.nspawn b/mkosi.nspawn index 0bcb14d..6990d4c 100644 --- a/mkosi.nspawn +++ b/mkosi.nspawn @@ -1,5 +1,5 @@ [Exec] -Hostname=bitwarden-rs +Hostname=vaultwarden ResolvConf=copy-host Timezone=copy NoNewPrivileges=yes @@ -8,8 +8,8 @@ LinkJournal=try-host [Files] PrivateUsersChown=true -BindReadOnly=/etc/bitwarden_rs/bitwarden_rs.env -Bind=/var/local/bitwarden_rs/data:/var/lib/bitwarden_rs/data +BindReadOnly=/etc/vaultwarden/vaultwarden.env +Bind=/var/local/vaultwarden/data:/var/lib/vaultwarden/data [Network] VirtualEthernet=no diff --git a/mkosi.postinst b/mkosi.postinst index f2624e1..e475e99 100755 --- a/mkosi.postinst +++ b/mkosi.postinst @@ -14,12 +14,12 @@ echo "deb http://no.archive.ubuntu.com/ubuntu ${RELEASE}-security main universe" echo "deb http://no.archive.ubuntu.com/ubuntu ${RELEASE}-updates main universe" >> /etc/apt/sources.list apt-get update && apt-get --yes full-upgrade && apt-get --yes autoremove -# set up bitwarden -mv /bitwarden_rs /usr/local/bin/ || echo "building" +# set up vaultwarden +mv /vaultwarden /usr/local/bin/ || echo "building" -mkdir /var/lib/bitwarden_rs /etc/bitwarden_rs -useradd -d /var/lib/bitwarden_rs --system bitwarden_rs -chown -R bitwarden_rs: /var/lib/bitwarden_rs /etc/bitwarden_rs -chmod 700 /var/lib/bitwarden_rs /etc/bitwarden_rs +mkdir /var/lib/vaultwarden /etc/vaultwarden +useradd -d /var/lib/vaultwarden --system vaultwarden +chown -R vaultwarden: /var/lib/vaultwarden /etc/vaultwarden +chmod 700 /var/lib/vaultwarden /etc/vaultwarden -systemctl enable bitwarden_rs +systemctl enable vaultwarden -- cgit v1.2.3