Üretim kurulumu
Linux sunucuda nardb serve — systemd birimi, ayrı sistem kullanıcısı, şifreleme parolası, pepper ve ca.crt paylaşımı.
Bu sayfa, NarDB'yi bir Linux sunucuda kalıcı bir servis olarak kurar. Uygulama (örneğin bir LexerLang sitesi) aynı makinede çalışır ve 127.0.0.1:7070 üzerinden bağlanır.
| Yer | |
|---|---|
| Program | /usr/local/bin/nardb |
| Veri, sertifikalar, denetim kaydı | /var/lib/nardb (NARDB_HOME), yalnızca nardb kullanıcısı okur |
| Gizli değerler | /etc/nardb/nardb.env, yalnızca root okur |
| Uygulamanın göreceği otorite | /etc/nardb/ca.crt |
Dağıtım paketi henüz yok. İkili nardb_shell dizininde derlenir: GOOS=linux GOARCH=amd64 go build -o nardb .
Sistem kullanıcısı#
NarDB kendi kullanıcısıyla çalışır; uygulamanın kullanıcısı veri dosyalarını okuyamaz:
sudo useradd --system --home-dir /var/lib/nardb --shell /usr/sbin/nologin nardb
sudo install -d -o nardb -g nardb -m 700 /var/lib/nardbŞifreleme: Linux'ta -e passphrase#
nardb create'in varsayılanı, anahtarı sistem anahtar deposunda tutmaktır. Masaüstü olmayan bir Linux sunucuda anahtar deposu (Secret Service) çoğunlukla yoktur ve komut şu hatayı verir:
nardb: ... (no system keychain here? use -e passphrase)NarDB bu durumda sessizce şifresiz bir veritabanı oluşturmaz. Sunucuda parolayla şifreleme kullanın. Parolayı nardb kullanıcısı olarak, terminalde verin:
sudo -u nardb env NARDB_HOME=/var/lib/nardb nardb create glabs -e passphraseKomut önce root parolasını, sonra şifreleme parolasını (en az 12 karakter) iki kez sorar. Şifreleme parolası kaybolursa veri geri getirilemez; bir parola yöneticisinde saklayın.
Gizli değerler#
Servis, şifreleme parolasını ve varsa pepper'ı bir ortam dosyasından okur:
sudo install -d -m 755 /etc/nardb
sudo install -m 600 /dev/null /etc/nardb/nardb.env
sudoedit /etc/nardb/nardb.envNARDB_PASSPHRASE=şifreleme-parolası
# password_hash({pepper: 'env:PASSWORD_PEPPER'}) alanları için
PASSWORD_PEPPER=openssl-rand-base64-32-ile-uretilmis-degerDosyayı root okur; systemd değerleri servisi başlatırken verir. Pepper parolayı özetleyen süreçte olmalıdır. Sunucu kipinde bu nardb serve'dür, uygulama değil (Doğrulama).
systemd birimi#
/etc/systemd/system/nardb.service:
[Unit]
Description=NarDB server (127.0.0.1:7070)
After=network.target
[Service]
User=nardb
Group=nardb
Environment=NARDB_HOME=/var/lib/nardb
EnvironmentFile=/etc/nardb/nardb.env
ExecStart=/usr/local/bin/nardb serve -listen 127.0.0.1:7070
Restart=on-failure
RestartSec=3
UMask=0077
StateDirectory=nardb
StateDirectoryMode=0700
NoNewPrivileges=true
CapabilityBoundingSet=
ProtectSystem=strict
ProtectHome=true
PrivateTmp=true
PrivateDevices=true
ProtectKernelTunables=true
ProtectKernelModules=true
ProtectControlGroups=true
RestrictAddressFamilies=AF_INET AF_INET6 AF_UNIX
RestrictNamespaces=true
LockPersonality=true
MemoryDenyWriteExecute=true
SystemCallArchitectures=native
SystemCallFilter=@system-service
[Install]
WantedBy=multi-user.targetsudo systemctl daemon-reload
sudo systemctl enable --now nardb
journalctl -u nardb -n 20İlk açılışta sertifikalar /var/lib/nardb/certs altında üretilir (localhost, 127.0.0.1, ::1; 10 yıl).
Şema ve kullanıcılar#
Servis veritabanını açık tutar; komutlar sunucu üzerinden çalışır (Komut satırı). nardb kullanıcısı olarak çalıştırınca istemci sunucunun ca.crt'sini kendisi bulur:
alias nardbctl='sudo -u nardb env NARDB_HOME=/var/lib/nardb nardb'
nardbctl exec glabs --remote 127.0.0.1:7070 -f sema.nqf
nardbctl user add glabs app --remote 127.0.0.1:7070
nardbctl grant glabs app system_users write --remote 127.0.0.1:7070
nardbctl user list glabs --remote 127.0.0.1:7070Her komut root'un parolasını sorar. Bir betikte NARDB_PASS ile verilir. Uygulama için root değil, yalnızca gereken yetkileri olan ayrı bir kullanıcı (app) açın.
Uygulamanın bağlanması#
Uygulama başka bir kullanıcıyla çalışır ve /var/lib/nardb'yi okuyamaz. Sunucuyu doğrulamak için yalnızca otoritenin sertifikası gerekir; okunabilir bir yere kopyalayın:
sudo install -m 644 /var/lib/nardb/certs/ca.crt /etc/nardb/ca.crtca.crt açık bir sertifikadır; paylaşılması güvenlidir. Aynı dizindeki ca.key ve server.key ise asla kopyalanmaz: ca.key ile yeni istemci sertifikaları imzalanabilir.
LexerLang'de:
# $app_parolasi: uygulamanın kendi gizli ayarından (kaynak kodda değil)
$db = nardb.connect('nardb://app@127.0.0.1:7070/glabs?ca=/etc/nardb/ca.crt').credentials({pass: $app_parolasi})Nesne biçimi: nardb.connect({host: '127.0.0.1', port: 7070, db: 'glabs', user: 'app', pass: $app_parolasi, ca: '/etc/nardb/ca.crt'}).
Kontrol listesi#
-listen 127.0.0.1:7070kalsın. Başka makineler bağlanacaksa istemci sertifikası gerekir (Sunucu) ve önüne bir güvenlik duvarı konur.- Sunucunun önüne aynı makinede bir vekil (nginx) koymayın; vekilden gelen her bağlantı yerel görünür.
- Denetim kaydı
/var/lib/nardb/audit.log'dadır. Sorgu metni, değerler ve parolalar yazılmaz. - Düzenli yedek alın ve yedeği sunucunun dışında saklayın.
- Zaman alanları UTC olarak saklanır ve döner; yerel saate uygulama çevirir. Bir saat dilimi ayarı henüz yok.