पासवर्ड को लीक करने के लिए नहीं करने के लिए मैं कुछ उत्तर देने योग्य कार्यों की क्रियाशीलता को कैसे कम कर सकता हूं?


12

कभी-कभी मैं किसी कॉन्फ़िगरेशन फ़ाइल में पासवर्ड लिखने के लिए Ansible lineinfileया blockinfileमॉड्यूल का उपयोग करना चाहूंगा । अगर मैं ऐसा करता हूं, तो पूरी लाइन या ब्लॉक, पासवर्ड शामिल है, मेरे में समाप्त होता है syslog

जैसा कि मैं syslogअपने पासवर्ड को संग्रहीत करने के लिए एक सुरक्षित जगह नहीं मानता , मैं कैसे बता सकता हूं कि अंसिबल अपना पासवर्ड लीक न करे syslog? मुझे उम्मीद है कि ऐसा करने का एक तरीका है, अन्यथा मैं इसे अंसिबल में एक बड़ी सुरक्षा समस्या मानूंगा।

आप इसे इस तदर्थ आदेश के साथ उदाहरण के लिए पुन: उत्पन्न कर सकते हैं:

ansible localhost -m blockinfile -a 'dest=/tmp/ansible_password_leak create=yes block="Password = {{password}}"' -e 'password=secret'

यहाँ क्या है syslog:

ansible-blockinfile: Invoked with directory_mode=None force=None remote_src=None insertafter=None owner=None follow=False marker=# {mark} ANSIBLE MANAGED BLOCK group=None insertbefore=None create=True setype=None content=None serole=None state=present dest=/tmp/ansible_password_leak selevel=None regexp=None validate=None src=None seuser=None delimiter=None mode=None backup=False block=Password = secret

उदाहरण के लिए, मैंने एक डिबियन "जेसी" 8 सिस्टम पर आधिकारिक Ansible Ubuntu PPA से Ansible 2.0.0.2 का उपयोग किया ।

जवाबों:


3

no_log विशेषता syslog में खाल डेटा। इसे एक ही कार्य के लिए लागू किया जा सकता है

- name: secret task
  shell: /usr/bin/do_something --value={{ secret_value }}
  no_log: True

या प्लेबुक:

- hosts: all
  no_log: True

सक्रिय होने पर डिबगिंग वास्तव में संभव नहीं है, इसलिए इसे केवल एकल कार्यों के लिए उपयोग करने की अनुशंसा की जाती है। यह सुविधा Ansible के संस्करण 1.5 के बाद से उपलब्ध है । जैसा कि 1.5 रिलीज के लिए रिलीज की घोषणा में कहा गया है:

संवेदनशील कार्यों को रोकने के लिए संवेदनशील कार्यों को रोकने के लिए कार्य अब "no_log = True" विकल्प भी ले सकते हैं। (पासवर्ड की तरह दिखने वाले पैरामीटर पहले से फ़िल्टर किए गए थे)

पासवर्ड को ज्यादातर मामलों में फ़िल्टर किया जाना चाहिए।


यह प्रभावी रूप से पासवर्ड को छुपाता है, syslogलेकिन यह एक ही समय में कंसोल आउटपुट में लॉगिंग आउटपुट को अक्षम कर देता है। क्या इसे बदलने का कोई तरीका है?
एफ़

मुझे माफ कर दो। मुझे इस विषय पर बहुत कम जानकारी मिली। मैं केवल कार्यों के लिए विशेषता सेट करने का सुझाव दूंगा और केवल एक बार जब आप अपने नाटक को डिबग करेंगे। जैसा कि उद्धृत किया गया है कि पहले से ही पासवर्ड की तरह दिखने वाले मापदंडों को फ़िल्टर किया जाना चाहिए। तो शायद यह एक बग है। फिर से मैं नहीं जानता कि कैसे एक पैरामीटर एक पासवर्ड है अगर Ansible निर्धारित करता है। शायद यह छिपाने के लिए एक बग / लापता सुविधा है password = XXX
हेनरिक पिंगल

आपको यह आभास कहां से हुआ कि पासवर्ड्स को डिफॉल्ट रूप से Ansible में छिपाया जाना चाहिए? क्या यह दस्तावेज में कहीं उल्लेख किया गया है?
एफ एफ

मेरे उत्तर में अंतिम उद्धरण (पासवर्ड की तरह दिखने वाले पैरामीटर पहले से ही फ़िल्टर किए गए थे)। लेकिन मुझे उस कार्यक्षमता के लिए कोई अन्य स्रोत नहीं मिला
हेनरिक पिंगल

3

मैंने डिफ़ॉल्ट आउटपुट के लिए पासवर्ड छिपाने के लिए एक कॉलबैक प्लगइन विकसित किया, यह कुंजी के लिए ouput शब्दकोश है जिसमें पासवर्ड होता है , उनमें से प्रत्येक के लिए, यह ******** द्वारा मूल्य को प्रतिस्थापित करता है।

protect_data.pyफ़ोल्डर में एक फ़ाइल बनाएं ।/plugins/callback इस कोड को जोड़ें:

from ansible.plugins.callback.default import CallbackModule as CallbackModule_default
import os, collections

class CallbackModule(CallbackModule_default):
    CALLBACK_VERSION = 2.0
    CALLBACK_TYPE = 'stdout'
    CALLBACK_NAME = 'protect_data'

    def __init__(self, display=None):
        super(CallbackModule, self).__init__(display)

    def hide_password(self, result):
        ret = {}
        for key, value in result.iteritems():
            if isinstance(value, collections.Mapping):
                ret[key] = self.hide_password(value)
            else:
                if "password" in key:
                    ret[key] = "********"
                else:
                    ret[key] = value
        return ret

    def _dump_results(self, result, indent=None, sort_keys=True, keep_invocation=False):
        return super(CallbackModule, self)._dump_results(self.hide_password(result), indent, sort_keys, keep_invocation)

फ़ाइल ansible.cfg में :

  • stdout_callbackइस प्लगइन के साथ अनलिमिनेट लाइन और सेट एक मान ( stdout_callback=protect_data)
  • callback_pluginsमान और सेट मान के साथ पंक्ति./plugins/callback

आउटपुट केवल इस प्लगइन के लिए संशोधित है, यदि आप आउटपुट ( logentries, ...) प्रदर्शित करने के लिए किसी अन्य प्लगइन का उपयोग करते हैं, तो आपको इसके साथ भी ऐसा ही करना होगा


ओह, वाह, यह शानदार है। हालाँकि, इसके लिए मुझे कुंजी नाम 'पासवर्ड' के साथ एक तानाशाही स्थापित करनी होगी जिसमें सब कुछ गुप्त हो। मुझे लगता है कि एक मेटा फ़्लैग करने के लिए मेटा फ्लैग से प्यार होता है, इसके बजाय एक रहस्य होता है, लेकिन धन्यवाद! अन्य प्रश्न: क्या यह आउटपुट के रहस्यों को भी अलग करता है ansible-playbook --diff(फ़ाइल में परिवर्तन होता है)?
gertvdijk

मुझे नहीं पता, मैंने कभी कोशिश नहीं की
नेल्सन जी।

-3

कोई सुझाव दे सकता है कि तिजोरी का उपयोग करने से समस्या का निवारण होगा।


यह प्रश्न का उत्तर नहीं देता है। एक बार आपके पास पर्याप्त प्रतिष्ठा होने के बाद आप किसी भी पोस्ट पर टिप्पणी करने में सक्षम होंगे ; इसके बजाय, ऐसे उत्तर प्रदान करें जिन्हें पूछने वाले से स्पष्टीकरण की आवश्यकता न हो । - समीक्षा से
चूजों

1
वॉल्ट आराम से डेटा को एन्क्रिप्ट करने में मदद करता है, लेकिन जब पासवर्ड उपयोग में होते हैं, तो वे आसानी से लॉग फाइलों में दिखाई दे सकते हैं।
कॉन्स्टेंटिन सुवर्व

@chicks यह एक गलत जवाब की तरह लगता है , न कि एक गैर जवाब के रूप में
माइकल हैम्पटन

मैंने समीक्षा उपकरण में वह विकल्प नहीं देखा। चूंकि यह एक उत्तर की तुलना में अधिक टिप्पणी की तरह है, मुझे लगता है कि मैंने इसे यथोचित रूप से संभाला है।
लड़कियों को

मेरे झंडे को भी अस्वीकार कर दिया गया था, और मुझे अभी भी यह नहीं दिखता है कि उपरोक्त वाक्य कैसे उत्तर देने योग्य क्रियाशीलता को कम करने के बारे में एक उत्तर है । यह किसी अन्य विचार का सुझाव देने वाली अधिकांश टिप्पणी पर है, निश्चित रूप से सवाल का जवाब नहीं है।
पैट्रिक मेवज़ेक
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.