मैं पासवर्ड लिखने से लॉगफ़ाइल्स को कैसे रोक सकता हूं?


22

मैं एक MySQL सर्वर सेट कर रहा हूं और चाहता हूं mysql-rootकि इंस्टॉलेशन के दौरान पासवर्ड सेट किया जाए ।

इंटरनेट की मदद से मैं इस समाधान के साथ आया:

- name: Set MySQL root password before installing
  debconf: name='mysql-server' question='mysql-server/root_password' value='{{mysql_root_pwd | quote}}' vtype='password'
- name: Confirm MySQL root password before installing
  debconf: name='mysql-server' question='mysql-server/root_password_again' value='{{mysql_root_pwd | quote}}' vtype='password'
- name: Install Mysql
  apt: pkg=mysql-server state=latest

mysql_root_pwdएक परिवर्तनीय तिजोरी से भरा हुआ चर है। यह ठीक चलता है, लेकिन अब सर्वर पर लॉग में कई लाइनें हैं:

Apr 10 14:39:59 servername ansible-debconf: Invoked with value=THEPASSWORD vtype=password question=mysql-server/root_password name=mysql-server unseen=None
Apr 10 14:39:59 servername ansible-debconf: Invoked with value=THEPASSWORD vtype=password question=mysql-server/root_password_again name=mysql-server unseen=None

मैं लॉगफ़ाइल्स को स्पष्ट पाठ पासवर्ड लिखने से Ansible को कैसे रोक सकता हूं?

जवाबों:


28

किसी कार्य को गोपनीय जानकारी से लॉग इन होने से रोकने के लिए, syslog या अन्य में, no_log सेट करें: कार्य पर सत्य:

- name: secret stuff
  command: "echo {{secret_root_password}} | sudo su -"
  no_log: true

कार्य का रनिंग अभी भी लॉग इन किया जाएगा, लेकिन कम विवरण के साथ। इसके अलावा, उपयोग किए गए मॉड्यूल को no_log का समर्थन करना है, इसलिए कस्टम मॉड्यूल का परीक्षण करें।

देखें Ansible पूछे जाने वाले प्रश्न अधिक जानकारी के लिए। यह एक पूरी प्लेबुक पर लागू किया जा सकता है, हालांकि आउटपुट "सेंसर" के साथ थोड़ा बुरा हो जाता है! संदेश।


2
अन्य बातों के अलावा, जो यह उत्तर बताती है serverfault.com/a/682823/9517
user9517

9

देखा गया व्यवहार डीबॉन्फ मॉड्यूल में एक बग प्रतीत होता है। मैंने बग रिपोर्ट दर्ज की

Github पर उपयोगकर्ता bcoca ने बताया कि no_log: trueलॉगिंग को रोकने के लिए, व्यक्ति कार्यों में निर्देश का उपयोग कर सकता है, जो पासवर्ड सेट करता है। यह एक वर्कअराउंड है, जो बग फिक्स होने तक मेरे लिए काम करता है।


जब मैं उस निर्देश का उपयोग करता हूं तो मुझे एक त्रुटि मिल रही है .. कोई भी विचार जो मैं गलत कर रहा हूं? ERROR: no_log is not a legal parameter in an Ansible task or handler
बुके वर्स्टिघ

2
पता चला कि मेरे पास एक पुराना संस्करण था! (Ubuntu पर) ठीक करने के लिए: sudo apt-add-repository ppa:ansible/ansible, sudo apt-get update,sudo apt-get install ansible
Bouke Versteegh

मेरे लिए एक ही समस्या है लेकिन मैं n_log नहीं कर सकता: उम्मीद के मुताबिक काम करना सही है। मेरा Ansible संस्करण 1.7.2 है। आपका क्या है ?
jmcollin92 12

@ jmcollin92 मैं वर्तमान में 2.1 का उपयोग करता हूं। स्रोत से नवीनतम संस्करण स्थापित करने के तरीके के बारे में यहां एक मार्गदर्शिका है । मैं उस का उपयोग करता हूं जैसा कि अभी भी परिपक्व हो रहा है।
क्लॉस

2

मैंने अंसिबल संस्करण को 1.6.1 में अपग्रेड करके हल किया

sudo pip install ansible==1.6.1

2

अनंतिम डॉक्स के अनुसार :

log_path

यदि मौजूद और कॉन्फ़िगर किया गया है ansible.cfg, तो Ansible निर्दिष्ट स्थान पर निष्पादन के बारे में जानकारी लॉग करेगा। सुनिश्चित करें कि Ans चल रहे उपयोगकर्ता के पास लॉगफ़ाइल पर अनुमति है:

log_path=/var/log/ansible.log 

यह व्यवहार डिफ़ॉल्ट रूप से नहीं है। ध्यान दें कि इस सेटिंग के बिना, रिकॉर्ड किए गए वसीयतनामे, प्रबंधित मॉड्यूल तर्कों को प्रबंधित मशीनों के सिसलॉग को कहते हैं। पासवर्ड तर्कों को बाहर रखा गया है।

log_pathअपने नियंत्रण नोड पर सेटिंग की तरह लगता है कि गंतव्य नोड्स पर लॉग नहीं होगा ।


वास्तव में मेरे पास स्थानीय dir में ansible.cfg है, जहाँ मैं log_path सेट करके ansible कहलाता हूँ। एक नए रन (लॉगिंग कार्य) के बाद स्थानीय लॉग को ठीक और अपटूडेट बनाया जाता है। ऐसा नहीं है (भले ही डॉक्टर ने कहा था कि आपने वादे किए थे) दूरस्थ मेजबान को लॉगिंग से रोकें। इसके अलावा, "पासवर्ड के तर्क को बाहर रखा गया" कथन 100% सत्य नहीं है? क्या यह बग (या दो भी) है?
क्लॉस

2
@claus "पासवर्ड तर्क बहाना" केवल उन मॉड्यूल पर लागू होता है जहां पासवर्ड तर्क स्पष्ट है। किसी भी तर्क के लिए यह जानने का कोई तरीका नहीं है कि कौन सा तर्क पासवर्ड होगा और जो
डिबेंक

कृपया मेरी आरंभिक प्लेबुक में दाईं ओर स्क्रॉल करें। यह कहता है vtype='password'। यह स्पष्ट होना चाहिए पर्याप्त IMHO? मुझे लगता है कि लॉग संदेश डिबेंक मॉड्यूल द्वारा भी बनाया गया है।
क्लॉस

यह गलत है। दस्तावेज़ को और अधिक सटीक रूप से कहना चाहिए "ध्यान दें कि इस सेटिंग की परवाह किए बिना रिकॉर्ड की गई वसीयत, प्रबंधित मॉड्यूल की sys को रिकॉर्ड मॉड्यूल तर्क।"
उदयपुर

2

सिर्फ no_log: True से बेहतर तरीका है

- name: write in string variables login and password
  set_fact:
    temp_user: "{{ USER_VAR }}"
    temp_pass: "{{ PASSWORD_VAR }}"


- name: Your operation with password in output
  shell: '/opt/hello.sh'
  ignore_errors: True
  no_log: True
  register: myregister

- debug:
    msg: '{{ myregister.stderr | regex_replace(temp_user) | regex_replace(temp_pass) }}'
  when: myregister.stderr != ""

- debug:
    msg: '{{ myregister.stdout | regex_replace(temp_user) | regex_replace(temp_pass) }}'
  when: myregister.stdout != ""

- fail:
    msg: "error shell /opt/hello.sh"
  when: myregister.stderr != ""

जैसा कि आप देख सकते हैं, आपको जोड़ने की आवश्यकता है:

ignore_errors: true
no_log: true

और फिर regex_replace के साथ कमांड के परिणाम का आउटपुट बनाते हैं, जहाँ:

USER_VAR - लॉगिन चर

PASSWORD_VAR - पासवर्ड चर

इस दृष्टिकोण के साथ, आप न केवल पासवर्ड और लॉगिन छिपाएंगे, बल्कि आपके ऑपरेशन का आउटपुट भी प्राप्त करेंगे


1

यह इस सूत्र से TheDESTROS के उत्तर के लिए एक ऐडिटॉन है:

  1. एक टेम्प्लेट लिखें, जो कमांड को गुप्त से लपेटता है:

आवरण-script.sh.j2

echo {{ secret_eg_from_ansible_vault }} | su - "ls -l"
  1. आवरण स्क्रिप्ट को लाएं और इसे एक बार में हटा दें:
- name: create template
  template:
    src: wrapper-script.sh.j2
    dest: /tmp/wrapper-script.sh
    mode: 0700
  no_log: True
- name: invoke command with secret and remove it
  shell: /tmp/wrapper-script.sh; rm -f /tmp/wrapper-script.sh

आपको थोड़ा कम कोड की आवश्यकता होती है और आप अपने लॉग में आदेशों को पूरा कर सकते हैं। केवल एक ही गुफा है, अगर कोई रहस्य आज्ञा में है। यदि आप बाहरी टेम्पलेट से बचना चाहते हैं, copyतो पैरामीटर के साथ मॉड्यूल contentफ्लाई में एक छोटा आवरण स्क्रिप्ट लिखने में मदद कर सकता है।


1

no_log: trueदृष्टिकोण क्योंकि यह कार्य निष्पादन पूरी तरह से अपारदर्शी कर देगा और आप कोई सुराग नहीं होगा जब यह असफल हो अन्य प्रयास विफल अंतिम उपाय के रूप में इस्तेमाल किया जा रहा है।

सुरक्षा प्रथाएं स्टैडेन से क्रेडेंशियल देने की सलाह देती हैं या जब क्रेडेंशियल फाइलों (या यहां तक ​​कि निष्पादन योग्य) का उपयोग करना संभव नहीं होता है।

पासवर्ड को उजागर करने से सुरक्षित पॉडमैन लॉगिन कैसे करें, इस पर एक उदाहरण है:

- name: secured login
  become: true
  command: >
    podman login --username={{ user }} --password-stdin ...
  args:
    stdin: "{{ secret }}"
  register: result

इसके साथ, रहस्य उजागर नहीं किया जाएगा, resultलेकिन आप अभी भी कमांड का आउटपुट देख पाएंगे।

लॉग इन करने की आवश्यकता वाले अधिकांश उपकरण उल्लिखित अधिक सुरक्षित दृष्टिकोणों में से एक को कार्यान्वित करते हैं। कोड में CLI पर क्रेडेंशियल का उपयोग करना 123456आपके बैंक पासवर्ड की तरह है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.