Add bare-metal install instructions
Add instructions for a bare-metal install (like on a raspberry pi) for use with transit-keys and break-glass scenarios.
This commit is contained in:
122
README.md
122
README.md
@@ -9,6 +9,115 @@ brew install hashicorp/tap/vault
|
|||||||
brew install jq
|
brew install jq
|
||||||
```
|
```
|
||||||
|
|
||||||
|
## Install (bare metal)
|
||||||
|
|
||||||
|
1. [Download Vault](https://www.vaultproject.io/downloads)
|
||||||
|
|
||||||
|
2. Create a vault user
|
||||||
|
|
||||||
|
```bash
|
||||||
|
useradd --system --home /etc/vault.d --shell /bin/false vault
|
||||||
|
```
|
||||||
|
|
||||||
|
2. Create a config file
|
||||||
|
|
||||||
|
```bash
|
||||||
|
mkdir -p /etc/vault.d
|
||||||
|
touch /etc/vault.d/vault.hcl
|
||||||
|
chmod 640 /etc/vault.d/vault.hcl
|
||||||
|
chown --recursive vault:vault /etc/vault.d
|
||||||
|
```
|
||||||
|
|
||||||
|
3. Add the following
|
||||||
|
|
||||||
|
```hcl
|
||||||
|
storage "file" {
|
||||||
|
path = "/vault/data"
|
||||||
|
}
|
||||||
|
|
||||||
|
listener "tcp" {
|
||||||
|
address = "0.0.0.0:8200"
|
||||||
|
tls_disable = 0
|
||||||
|
tls_cert_file = "/etc/ssl/certs/pi-vault.pem"
|
||||||
|
tls_key_file = "/etc/vault.d/pi-vault.key"
|
||||||
|
}
|
||||||
|
|
||||||
|
ui = true
|
||||||
|
```
|
||||||
|
|
||||||
|
4. Add your CA (if you have one) to /etc/ssl/certs and run `update-ca-certificates`
|
||||||
|
|
||||||
|
5. Create a vault storage location
|
||||||
|
|
||||||
|
```bash
|
||||||
|
mkdir -p /vault/data
|
||||||
|
chown --recursive vault:vault /vault/data/
|
||||||
|
```
|
||||||
|
|
||||||
|
6. Allow vault to use mlock syscall to prevent memory from being swapped
|
||||||
|
|
||||||
|
```bash
|
||||||
|
setcap cap_ipc_lock=+ep /usr/local/bin/vault
|
||||||
|
```
|
||||||
|
|
||||||
|
7. Create a systemd process
|
||||||
|
|
||||||
|
```bash
|
||||||
|
touch /etc/systemd/system/vault.service
|
||||||
|
```
|
||||||
|
|
||||||
|
8. Add the following
|
||||||
|
|
||||||
|
```conf
|
||||||
|
[Unit]
|
||||||
|
Description="HashiCorp Vault - A tool for managing secrets"
|
||||||
|
Documentation=https://www.vaultproject.io/docs/
|
||||||
|
Requires=network-online.target
|
||||||
|
After=network-online.target
|
||||||
|
ConditionFileNotEmpty=/etc/vault.d/vault.hcl
|
||||||
|
StartLimitIntervalSec=60
|
||||||
|
StartLimitBurst=3
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
User=vault
|
||||||
|
Group=vault
|
||||||
|
ProtectSystem=full
|
||||||
|
ProtectHome=read-only
|
||||||
|
PrivateTmp=yes
|
||||||
|
PrivateDevices=yes
|
||||||
|
SecureBits=keep-caps
|
||||||
|
AmbientCapabilities=CAP_IPC_LOCK
|
||||||
|
Capabilities=CAP_IPC_LOCK+ep
|
||||||
|
CapabilityBoundingSet=CAP_SYSLOG CAP_IPC_LOCK
|
||||||
|
NoNewPrivileges=yes
|
||||||
|
ExecStart=/usr/local/bin/vault server -config=/etc/vault.d/vault.hcl
|
||||||
|
ExecReload=/bin/kill --signal HUP $MAINPID
|
||||||
|
KillMode=process
|
||||||
|
KillSignal=SIGINT
|
||||||
|
Restart=on-failure
|
||||||
|
RestartSec=5
|
||||||
|
TimeoutStopSec=30
|
||||||
|
StartLimitInterval=60
|
||||||
|
StartLimitIntervalSec=60
|
||||||
|
StartLimitBurst=3
|
||||||
|
LimitNOFILE=65536
|
||||||
|
LimitMEMLOCK=infinity
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=multi-user.target
|
||||||
|
EOF
|
||||||
|
```
|
||||||
|
|
||||||
|
9. Start the service with `systemctl start vault`
|
||||||
|
10. Run `vault operator init` on the server to generate keys
|
||||||
|
11. Unseal the vault
|
||||||
|
12. Add the following backup job to /etc/crontab
|
||||||
|
|
||||||
|
```crontab
|
||||||
|
0 0 * * * root tar czvf /vault/backups/$(date +\%y-\%m-\%d-\%H-\%M)-pivault.tar.gz /vault/data
|
||||||
|
0 0 * * * root find /vault/backups/* -mtime +7 -exec rm {} +
|
||||||
|
```
|
||||||
|
|
||||||
## Install (Standalone)
|
## Install (Standalone)
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
@@ -582,11 +691,12 @@ Add signing role
|
|||||||
vault write ssh-client-signer/roles/ducoterra -<<"EOH"
|
vault write ssh-client-signer/roles/ducoterra -<<"EOH"
|
||||||
{
|
{
|
||||||
"allow_user_certificates": true,
|
"allow_user_certificates": true,
|
||||||
"allowed_users": "*",
|
"allowed_users": "ducoterra",
|
||||||
"allowed_extensions": "permit-pty,permit-port-forwarding",
|
"allowed_extensions": "permit-pty,permit-port-forwarding",
|
||||||
"default_extensions": [
|
"default_extensions": [
|
||||||
{ "permit-pty": "" }
|
{ "permit-pty": "" }
|
||||||
],
|
],
|
||||||
|
"algorithm_signer": "rsa-sha2-512",
|
||||||
"key_type": "ca",
|
"key_type": "ca",
|
||||||
"default_user": "ducoterra",
|
"default_user": "ducoterra",
|
||||||
"ttl": "30m0s"
|
"ttl": "30m0s"
|
||||||
@@ -598,11 +708,12 @@ EOH
|
|||||||
vault write ssh-client-signer/roles/pi -<<"EOH"
|
vault write ssh-client-signer/roles/pi -<<"EOH"
|
||||||
{
|
{
|
||||||
"allow_user_certificates": true,
|
"allow_user_certificates": true,
|
||||||
"allowed_users": "*",
|
"allowed_users": "pi",
|
||||||
"allowed_extensions": "permit-pty,permit-port-forwarding",
|
"allowed_extensions": "permit-pty,permit-port-forwarding",
|
||||||
"default_extensions": [
|
"default_extensions": [
|
||||||
{ "permit-pty": "" }
|
{ "permit-pty": "" }
|
||||||
],
|
],
|
||||||
|
"algorithm_signer": "rsa-sha2-512",
|
||||||
"key_type": "ca",
|
"key_type": "ca",
|
||||||
"default_user": "pi",
|
"default_user": "pi",
|
||||||
"ttl": "30m0s"
|
"ttl": "30m0s"
|
||||||
@@ -614,11 +725,12 @@ EOH
|
|||||||
vault write ssh-client-signer/roles/rancher -<<"EOH"
|
vault write ssh-client-signer/roles/rancher -<<"EOH"
|
||||||
{
|
{
|
||||||
"allow_user_certificates": true,
|
"allow_user_certificates": true,
|
||||||
"allowed_users": "*",
|
"allowed_users": "rancher",
|
||||||
"allowed_extensions": "permit-pty,permit-port-forwarding",
|
"allowed_extensions": "permit-pty,permit-port-forwarding",
|
||||||
"default_extensions": [
|
"default_extensions": [
|
||||||
{ "permit-pty": "" }
|
{ "permit-pty": "" }
|
||||||
],
|
],
|
||||||
|
"algorithm_signer": "rsa-sha2-512",
|
||||||
"key_type": "ca",
|
"key_type": "ca",
|
||||||
"default_user": "rancher",
|
"default_user": "rancher",
|
||||||
"ttl": "30m0s"
|
"ttl": "30m0s"
|
||||||
@@ -629,7 +741,7 @@ EOH
|
|||||||
Sign a key
|
Sign a key
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
export SSHUSER=pi; vault write -field=signed_key ssh-client-signer/sign/$SSHUSER public_key=@$HOME/.ssh/test_rsa.pub > ~/.ssh/test_rsa-cert.pub
|
export SSHUSER=pi; vault write -field=signed_key ssh-client-signer/sign/$SSHUSER public_key=@$HOME/.ssh/id_rsa.pub > ~/.ssh/id_rsa-cert.pub
|
||||||
```
|
```
|
||||||
|
|
||||||
SSH using the signed key
|
SSH using the signed key
|
||||||
@@ -638,7 +750,7 @@ SSH using the signed key
|
|||||||
# If you saved the signed pub as key_name"-cert.pub" then you don't need to specify the signed-cert.pub part.
|
# If you saved the signed pub as key_name"-cert.pub" then you don't need to specify the signed-cert.pub part.
|
||||||
ssh -i signed-cert.pub -i ~/.ssh/test_rsa client
|
ssh -i signed-cert.pub -i ~/.ssh/test_rsa client
|
||||||
|
|
||||||
# or without the cert (using default client)
|
# without the cert (using default client)
|
||||||
ssh -i ~/.ssh/test_rsa client
|
ssh -i ~/.ssh/test_rsa client
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user