
एक कमांड-लाइन टूल जो age एन्क्रिप्शन और coreutils जैसे अंतर-संचालनीय मानकों का उपयोग करके सीक्रेट्स का सुरक्षित बैकअप, पुनर्स्थापना और सत्यापन करता है, ताकि वेंडर लॉक-इन के बिना दीर्घकालिक पहुंच सुनिश्चित हो सके।
secs-man एक उपकरण है जो टूल-स्वतंत्रता को ध्यान में रखते हुए गोपनीय जानकारी (secrets) के बैकअप प्रबंधित करने के लिए बनाया गया है: यदि आप अपनी गोपनीय जानकारी को इस सॉफ़्टवेयर से एन्क्रिप्ट करते हैं, तो आपको बिना इस सॉफ़्टवेयर के उन्हें डिक्रिप्ट और पुनर्स्थापित करने में सक्षम होना चाहिए। यहाँ तक कि अगर secs-man पृथ्वी के चेहरे से गायब हो जाए, तब भी आपका डेटा सुलभ रहेगा।
secs-man का उपयोग स्थानीय और दूरस्थ मशीनों की गोपनीय जानकारी प्रबंधित करने के लिए किया जा सकता है, और यह उस डेटा के लिए केवल-स्थानीय बैकअप बनाने हेतु आदर्श है जो क्लाउड में कहीं बैकअप करने के लिए बहुत संवेदनशील है।
आपको अपने अत्यंत महत्वपूर्ण डेटा का बैकअप लेने के लिए किसी विशिष्ट सॉफ़्टवेयर पर निर्भर नहीं रहना चाहिए।
कोई भी सॉफ़्टवेयर जो उपयोग के बाद आपको उसके इकोसिस्टम में बने रहने के लिए बाध्य करता है (जैसे: "यदि आप इसे इस सॉफ़्टवेयर से एन्क्रिप्ट करते हैं, तो आप इसे केवल इसी सॉफ़्टवेयर से डिक्रिप्ट कर सकते हैं"), आपको उस पर निर्भर बना देता है।
इसलिए, आपके महत्वपूर्ण डेटा का एन्क्रिप्शन, डिक्रिप्शन और पुनर्स्थापना वियुग्मित (decoupled) होनी चाहिए, अर्थात यदि आपने इसे सॉफ़्टवेयर X से एन्क्रिप्ट किया है, तो आपको बिना सॉफ़्टवेयर X के भी इसे डिक्रिप्ट करने में सक्षम होना चाहिए।
व्यवहार में, आप ऐसी व्यवस्था नहीं बना सकते जहाँ आपकी गोपनीय जानकारी डेटा हानि से 100% सुरक्षित हो। भले ही आपका सॉफ़्टवेयर X, Y, Z और W के साथ संगत हो, फिर भी यदि X, Y, Z और W सभी एक ही समय में काम करना बंद कर दें, तो आप अपने डेटा तक पहुँच खो देंगे।
व्यवहार में आप यह सुनिश्चित करते हैं कि आप केवल उन तकनीकों पर निर्भर रहें जो "मानक" हैं या उनके करीब हैं। मैं bash इंटरप्रेटर, USB पोर्ट और Linux मशीनों के अस्तित्व पर निर्भर रहने में सहज हूँ।
secs-man का वास्तविक लक्ष्य तब केवल निम्नलिखित के साथ पूर्णतः प्रतिलिपि-योग्य (reproducible) हो जाता है:
cp, mv और sha256sum
ageपर निर्भरता सबसे नाजुक है, लेकिन किसी क्रिप्टोग्राफ़िकल लाइब्रेरी पर निर्भरता अपरिहार्य है, औरageको महान लोकप्रियता और Rust में अच्छे बाइंडिंग दोनों प्राप्त हैं।
यह सुनिश्चित करता है कि भले ही इस सॉफ़्टवेयर के साथ कुछ भी ऐसा हो जाए जो आपको इसे दोबारा उपयोग करने से रोके, यह मानते हुए कि age अभी भी मौजूद है और आप अपने जीवन के 30 मिनट खर्च करने को तैयार हैं, आप अभी भी अपनी सभी गोपनीय जानकारी पुनर्प्राप्त कर सकते हैं।
अनुभाग मैन्युअल पुनर्प्राप्ति बताता है कि इस सॉफ़्टवेयर के बिना, केवल coreutils, age और एक टर्मिनल के साथ, इस सॉफ़्टवेयर द्वारा निर्यात की गई गोपनीय जानकारी को कैसे आयात किया जाए।
secs-man कहीं भी प्रकाशित नहीं है (यह एक प्रकाशित crate नहीं है, न ही यह nixpkgs, AUR या इसी तरह के स्थानों पर है)। इसे केवल इस रिपॉज़िटरी से सीधे, निम्नलिखित तरीकों में से एक द्वारा स्थापित किया जा सकता है।
nix run के साथयदि आपको केवल कभी-कभार secs-man चलाने की आवश्यकता है, तो आप इसे स्थापित किए बिना सीधे चला सकते हैं (इसके लिए flakes सक्षम होना आवश्यक है)
nix run github:Fran314/secrets-manager-rs -- export /path/to/secrets /path/to/export/endpoint
secs-man को सिस्टम-व्यापी रूप से उपलब्ध कराने के लिए, आप इस रिपॉज़िटरी को fetchGit के साथ अपने Nix कॉन्फ़िगरेशन में आयात कर सकते हैं और परिणामी पैकेज को environment.systemPackages (या home-manager के साथ home.packages) में जोड़ सकते हैं
let
secs-man = pkgs.callPackage "${builtins.fetchGit {
url = "https://github.com/Fran314/secrets-manager-rs.git";
ref = "main";
# rev = "<commit>"; # pin a specific commit for reproducibility
}}/default.nix" { };
in
# add `secs-man` to environment.systemPackages or home.packages
cargo के साथयदि आप NixOS पर नहीं हैं, तो आप cargo को इस रिपॉज़िटरी की ओर इंगित करके secs-man बाइनरी स्थापित कर सकते हैं।
cargo install --git https://github.com/Fran314/secrets-manager-rs
ध्यान दें कि इनमें से कोई भी विधि दूरस्थ मशीनों के लिए आवश्यक secs-man-ssh स्क्रिप्ट स्थापित नहीं करती: यह एक स्वतंत्र स्क्रिप्ट है जिसे इस रिपॉज़िटरी से अलग से कॉपी करना होता है।
यह उपकरण किसी दिए गए स्रोत निर्देशिका से फ़ाइलों को निर्यात और एन्क्रिप्ट करने की अनुमति देता है, और उसी निर्देशिका में आयात करके उन्हें पुनर्प्राप्त करने की अनुमति देता है। इस उपकरण का उपयोग करने का अनुशंसित तरीका यह है कि आपकी सभी "गोपनीय जानकारी" (कुंजियाँ, फ़ाइलें, ...) एक केंद्रीकृत निर्देशिका में हों।
गोपनीय जानकारी निर्देशिका के मूल (root) में एक .secrets-manifest प्लेनटेक्स्ट फ़ाइल होनी चाहिए जिसमें प्रबंधित की जाने वाली गोपनीय जानकारी की सूची हो, जो गोपनीय जानकारी निर्देशिका के सापेक्ष पथों के रूप में हो। फ़ाइलपथ में व्हाइटस्पेस नहीं हो सकते। प्रत्येक प्रविष्टि एक owner और एक mode भी निर्दिष्ट कर सकती है, जिनका उपयोग आयात के दौरान सही अनुमतियाँ सेट करने के लिए किया जाएगा। सिंटैक्स के लिए .secrets-manifest.example देखें।
निर्यात के दौरान, मैनिफ़ेस्ट में सूचीबद्ध फ़ाइलों को एक इंटरैक्टिव प्रॉम्प्ट के माध्यम से मांगे गए पासफ़्रेज़ के साथ age के माध्यम से एन्क्रिप्ट किया जाता है (secs-man इसे कभी भी किसी फ़ाइल, तर्क या पर्यावरण चर से नहीं पढ़ता)। फ़ाइलों को डिक्रिप्ट करने के लिए आयात पर वही पासफ़्रेज़ फिर से मांगा जाता है। फ़ाइलों की अखंडता एक साथी *.sha256 फ़ाइल द्वारा सुनिश्चित की जाती है, जो अनुपलब्ध होने पर स्वचालित रूप से उत्पन्न हो जाती है। एन्क्रिप्ट की गई फ़ाइलें निर्यात लक्ष्य निर्देशिका के अंदर एक टाइमस्टैम्प्ड स्नैपशॉट में निर्यात की जाती हैं।
फ़ाइलों को तब डिक्रिप्ट और आयात किया जा सकता है, या तो निर्यात लक्ष्य निर्देशिका की ओर इंगित करके (नवीनतम स्नैपशॉट आयात करने के लिए) या इस निर्देशिका के अंदर किसी विशिष्ट स्नैपशॉट की ओर इंगित करके।
निम्नलिखित कमांड sudo के बिना चलाए जा सकते हैं, हालाँकि यदि मैनिफ़ेस्ट कमांड निष्पादित करने वाले उपयोगकर्ता से भिन्न कोई owner निर्दिष्ट करता है तो वे विफल हो जाएँगे (क्योंकि आंतरिक chown कॉल विफल हो जाएगी)।
अपनी गोपनीय जानकारी निर्यात करने के लिए, चलाएँ
sudo secs-man export /path/to/secrets /path/to/export/endpoint
किसी मौजूदा निर्यात की अखंडता सत्यापित करने के लिए (नीचे दिया गया नोट देखें), चलाएँ
# to verify the integrity of all the exported snapshots
sudo secs-man verify-export /path/to/export/endpoint
# to verify the integrity of a specific snapshot
sudo secs-man verify-export /path/to/export/endpoint/export-YYYY-MM-DD_HH-MM-SSZ
ध्यान दें कि प्रत्येक निर्यात पर स्वचालित रूप से अखंडता जाँच की जाती है। यह केवल तभी आवश्यक है जब आप किसी पुराने निर्यात की अखंडता की जाँच करना चाहते हैं जो संभवतः क्षयित और दूषित हो गया हो।
अपनी गोपनीय जानकारी आयात करने के लिए, चलाएँ
# to import the latest snapshot
sudo secs-man import /path/to/export/endpoint /path/to/secrets
# to import a specific snapshot
sudo secs-man import /path/to/export/endpoint/export-YYYY-MM-DD_HH-MM-SSZ /path/to/secrets
# to import only specific secrets
sudo secs-man import /path/to/export/endpoint /path/to/secrets --pick ssh/id_ed25519 wg/wg0.key
इस उपकरण का उपयोग दूरस्थ मशीनों पर गोपनीय जानकारी तैनात और बैकअप करने के लिए भी किया जा सकता है।
दूरस्थ गोपनीय जानकारी निर्यात करने का सबसे आसान तरीका उन्हें दूरस्थ होस्ट पर एक अस्थायी निर्देशिका में निर्यात करना है, और फिर निर्यात किए गए स्नैपशॉट को एक स्थानीय बैकअप पर कॉपी करना है। इसी तरह, स्थानीय बैकअप आयात करने का सबसे आसान तरीका स्थानीय स्नैपशॉट को दूरस्थ होस्ट पर एक अस्थायी निर्देशिका में कॉपी करना है, और फिर वहाँ से उन्हें आयात करना है। हालाँकि, इसमें यह समस्या है कि एन्क्रिप्शन/डिक्रिप्शन पासफ़्रेज़ को दूरस्थ होस्ट से होकर गुजरना पड़ता है, जिसे अविश्वसनीय माना जा सकता है।