আমি কীভাবে লগফাইলে পাসওয়ার্ড লিখতে বাড়াতে পারি?


22

আমি একটি মাইএসকিউএল সার্ভার সেট আপ করছি এবং 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উত্তর ভল্ট থেকে লোড করা একটি পরিবর্তনশীল vari এটি সূক্ষ্মভাবে চলে তবে এখন সার্ভারে লগটিতে অনেকগুলি লাইন রয়েছে:

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

আমি লগফাইলে স্পষ্ট পাঠ্য পাসওয়ার্ড লেখার থেকে উত্তরকে কীভাবে থামাতে পারি?

উত্তর:


28

গোপনীয় তথ্য সহ কোনও কাজকে সিসলোগে বা অন্যটিতে লগ হওয়া থেকে রোধ করতে, নো-লগ: কার্যটি সঠিক করুন:

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

টাস্কের চলমানটি এখনও লগ করা হবে, তবে খুব কম বিশদ সহ। এছাড়াও, ব্যবহৃত মডিউলটি no_log সমর্থন করে, তাই কাস্টম মডিউলগুলি পরীক্ষা করে।

আরও তথ্যের জন্য উত্তরযুক্ত FAQ দেখুন । এটি একটি সম্পূর্ণ প্লেবুকে প্রয়োগ করা যেতে পারে, তবে আউটপুটটি "সেন্সরড!" দিয়ে কিছুটা কদর্য হয়! বার্তা।


2
অন্যান্য উত্তরগুলির মধ্যে যা এই উত্তরটি যা বলেছে তা সার্ভারফল্ট.com
a

9

পর্যবেক্ষণ করা আচরণটি ডাবকনফ মডিউলে একটি বাগ বলে মনে হচ্ছে। আমি একটি বাগ রিপোর্ট দায়ের করেছি ।

গিথুব-এ ব্যবহারকারী বিসোকা চিহ্নিত করেছেন যে no_log: trueলগিং প্রতিরোধের জন্য কোনও কাজে নির্দেশিকা ব্যবহার করতে পারে যা পাসওয়ার্ড সেট করে। এটি কার্যকরভাবে কাজ করা, যা বাগ ঠিক না করা অবধি আমার জন্য কাজ করে।


আমি যখন সেই নির্দেশটি ব্যবহার করি তখন আমি একটি ত্রুটি পাচ্ছি .. কোনও ভুল ধারণা যা আমি ভুল করছি? ERROR: no_log is not a legal parameter in an Ansible task or handler
বুক ভার্সটিঘ

2
দেখা যাচ্ছে আমার কাছে উত্তরীয় একটি পুরানো সংস্করণ ছিল! (উবুন্টু দিকে) ঠিক করতে: sudo apt-add-repository ppa:ansible/ansible, sudo apt-get update,sudo apt-get install ansible
Bouke Versteegh

আমার জন্য একই সমস্যা তবে আমি এন_লগ করতে পারি না: প্রত্যাশার মতো কাজ করা সত্য। আমার উত্তরীয় সংস্করণটি 1.7.2। কোনটি তোমার ?
jmcollin92

@ jmcollin92 আমি বর্তমানে ২.১ ব্যবহার করি। উত্স থেকে সর্বশেষতম সংস্করণটি কীভাবে ইনস্টল করা যায় সে সম্পর্কে এখানে একটি গাইড রয়েছে । আমি এটিকে উত্তর হিসাবে এখনও পরিপক্ক হিসাবে ব্যবহার করি।
ক্লজ

2

আমি উত্তরীয় সংস্করণটি 1.6.1 এ আপগ্রেড করে সমাধান করেছি

sudo pip install ansible==1.6.1

2

অনুযায়ী Ansible ডক্স :

log_path

যদি উপস্থিত থাকে এবং এতে কনফিগার করা থাকে তবে ansible.cfgউত্তরীয় নির্ধারিত স্থানে মৃত্যুদন্ড কার্যকর করার তথ্য লগ করবে। নিশ্চিত হয়ে নিন যে উত্তরবাল চালানো ব্যবহারকারীর লগফাইলে অনুমতি রয়েছে:

log_path=/var/log/ansible.log 

এই আচরণটি ডিফল্টরূপে নেই। নোট করুন যে এই সেটিংটি ছাড়াই জবাবদিহি করা হবে, পরিচালিত মেশিনগুলির সিসলোগে ডাকা মডিউল আর্গুমেন্ট। পাসওয়ার্ড আর্গুমেন্ট বাদ দেওয়া হয়।

সেটিং মত শোনাচ্ছে log_pathআপনার নিয়ন্ত্রণ নোড উপর পরিণাম ডেকে আনবে না থাকার গন্তব্য নোড উপর লগ।


লগইনপথটি সেট করে আমার স্থানীয় দিরটিতে আমার একটি উত্তরযোগ্য সিএফজি রয়েছে, যেখানে আমি উত্তরকে কল করি। স্থানীয় লগ একটি নতুন রান (লগিং কাজ) পরে ঠিক এবং uptodate তৈরি করা হয়। এটি (যদিও যে দস্তাবেজটি আপনি এটি প্রতিশ্রুতি দিয়েছিলেন তা সত্ত্বেও) দূরবর্তী হোস্টকে লগিং করা থেকে বিরত রাখে না। এছাড়াও "পাসওয়ার্ড আর্গুমেন্ট বাদ দেওয়া হয়েছে" বিবৃতিটি 100% সত্য বলে মনে হচ্ছে না? এটি কি বাগ (বা দুটি)?
ক্লজ

2
@ ক্লাউস "পাসওয়ার্ড যুক্তি উত্সাহিত" কেবলমাত্র মডিউলগুলিতে প্রযোজ্য যেখানে পাসওয়ার্ড যুক্তি সুস্পষ্ট। কোন যুক্তিটি পাসওয়ার্ড হবে এবং কোনটি সাধারণ কমান্ড যেমন
ডাবকনফ

আমার প্রাথমিক প্লেবুকের ডানদিকে স্ক্রোল করুন। এটা বলে vtype='password'। এটি যথেষ্ট আইএমএইচও করা উচিত? আমি ধরে নিই যে লগ বার্তাটিও ডাবকনফ মডিউল দ্বারা তৈরি হয়েছিল।
ক্লজ

এটি ভুল। ডকুমেন্টেশনে আরও সঠিকভাবে বলা উচিত "নোট করুন যে জবাবদিহি করা উচিত , এই সেটিংটি নির্বিশেষে , পরিচালিত মেশিনগুলির সিসলোগে ডাকা মডিউল আর্গুমেন্টগুলি" "
আগস্ট

2

শুধু ন_লগের চেয়ে আরও ভাল উপায় আছে: সত্য

- 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_replaces, যেখানে:

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

আপনার কিছুটা কম কোড দরকার এবং আপনার লগগুলিতে কমান্ডগুলি চালিয়ে যেতে পারেন। কমান্ড stdout এ যদি একটি গোপনীয়তা থাকে তবে কেবল একটি ক্যাভিয়েট রয়েছে। আপনি যদি বাহ্যিক টেম্পলেটটি এড়াতে চান copyতবে প্যারামিটার সহ মডিউলটি contentফ্লাইতে একটি ছোট র‌্যাপার স্ক্রিপ্ট লিখতে সহায়তা করতে পারে।


1

no_log: trueঅন্যান্য প্রচেষ্টা ব্যর্থ হলে এই পদ্ধতিটি সর্বশেষ-অবলম্বন হিসাবে ব্যবহার করতে হবে কারণ এটি কার্য সম্পাদনকে সম্পূর্ণ অস্বচ্ছ করে তুলবে এবং এটি ব্যর্থ হলে আপনার কোনও চিহ্ন থাকবে না।

সুরক্ষা অনুশীলনগুলি স্টিডিনের কাছ থেকে শংসাপত্র দেওয়ার বা যখন প্রমাণীকরণযোগ্য ফাইলগুলি (বা এমনকি এক্সিকিউটেবল) ব্যবহার করার সময়ও সম্ভব না হয় recommend

এখানে কীভাবে পাসওয়ার্ড প্রকাশ করা এড়িয়ে একটি সুরক্ষিত পোডম্যান লগইন সম্পাদন করা যায় তার একটি উদাহরণ এখানে দেওয়া হয়েছে:

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

এটির সাহায্যে গোপনীয়তা প্রকাশিত হবে না resultতবে আপনি এখনও কমান্ডের আউটপুট দেখতে সক্ষম হবেন।

লগইন প্রয়োজন বেশিরভাগ সরঞ্জাম উল্লেখ করা আরও সুরক্ষিত পদ্ধতির একটি বাস্তবায়ন করে। কোডে সিএলআই-তে শংসাপত্রগুলি ব্যবহার 123456করা আপনার ব্যাঙ্কের পাসওয়ার্ডের মতো।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.