নিরাপদে একটি পাসওয়ার্ড সহ একটি প্রোগ্রাম খাওয়ানো


9

কমান্ড লাইনে একটি পাসওয়ার্ড ব্যবহার করে সমস্যাটি বোঝার পরে , আমার কোনও সমস্যা নেই (পাসওয়ার্ডটি কোথাও রেকর্ড করা ছাড়াই) পাসওয়ার্ড সহ একটি প্রোগ্রাম খাওয়ানোর একটি উপায় খুঁজে বের করতে হবে।

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

আমি কীভাবে পাসওয়ার্ডটি প্রকাশ না করে স্ক্রিপ্টটি সম্পূর্ণ স্বয়ংক্রিয় করতে পারি?

সম্পাদনা (9 জুন, 3:55 ইউটিসি):
আমি কমান্ড লাইনে একটি পাসওয়ার্ড দিয়ে ম্যাসকিউএলকে মূলের মাধ্যমে আহ্বান করছি:

root@dor-desktop:/home/dor# PASS=`cat /home/dor/tmpf/pass`
root@dor-desktop:/home/dor# mysql -u root -p"$PASS"
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 6

(আমাদের ক্ষেত্রে PASS = "p4ssw0rd")
এবং আমি ps aux | grep mysqlআমার নিয়মিত ব্যবহারকারীর (ডর) মাধ্যমে চালিত করি , যা আমাকে পাসওয়ার্ডটি দেখায় না !
(কিছু) psআউটপুট হয়:

USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root      3562  0.0  0.0  34156  2864 pts/0    S+   05:53   0:00 mysql -u root -px xxxxxx

কীভাবে সম্ভব?


এছাড়াও unix.stackexchange.com/q/385339/135943 দেখুন , কিন্তু নোট করুন এটি এটি নিরাপদ করে না!
ওয়াইল্ডকার্ড

উত্তর:


11

আপনার আপডেট সম্পর্কিত:

যখন কোনও প্রক্রিয়া শুরু হয় তখন এটির মেমোরির একটি উত্সর্গীকৃত ক্ষেত্র থাকে যেখানে আর্গুমেন্টগুলি সংরক্ষণ করা হয় এবং একটি ইনট যেটি বলে যে কতগুলি আর্গুমেন্ট পাস হয়েছিল।

MEMORY
argc    2
argv[0] program_name
argv[1] foo
argv[2] bar

মাইএসকিউএল পরীক্ষা করে দেখুন যে পাসওয়ার্ড দ্বারা কমান্ড লাইনে পাসওয়ার্ড দেওয়া হয়েছিল -pএবং এটি যদি এটি কোনও নতুন ভেরিয়েবলের সাথে অনুলিপি করা হয় যা দৃশ্যমান নয়, তবে x'এস সহ মেমরির সেই অঞ্চলটি ওভাররাইট করে ।

সরল পদে যেমন:

argc 2
argv[1] -p
argv[2] p4ssw0rd

new_var = copy(argv[2]);
argv[2] = "xxxxx";

আপনি এটি client/mysqladmin.ccউত্স কোডের মধ্যে যেমন খুঁজে পেতে পারেন :

  case 'p':
      ...
      opt_password=my_strdup(argument,MYF(MY_FAE));
      while (*argument) 
          *argument++= 'x';     /* Destroy argument */

যখন psচালানোর এটা যুক্তি স্মৃতির অঞ্চল, (সার্চ argv[N]), এবং এইভাবে এটি xxxx

খুব অল্প সময়ের জন্য পাসওয়ার্ডটি দৃশ্যমান হয় তবে কেবল কয়েকটি সিপিইউ চক্রের জন্য।


আপনি বিশেষ --init-fileবিকল্প এবং পদ্ধতি ব্যবহার করে মাইএসকিউএল পাসওয়ার্ড আপডেট করতে পারেন । C.5.4.1.2। রুট পাসওয়ার্ড পুনরায় সেট করা হচ্ছে: ইউনিক্স সিস্টেমস

mysqld_safe --init-file=/home/me/mysql-init &

সম্পাদনা:

হিসাবে @Gilles বলছি, আপনি যা করতে পারেন echo,printf বা ব্যবহারের hereএকটি স্ক্রিপ্ট থেকে নথি।

আপনি এটিকে .my.cnfআপনার হোম ডিরেক্টরিতে বা একটি ( অস্থায়ী ) ফাইলে যুক্ত করতে পারেন এবং --defaults-extra-fileবিকল্পটি ব্যবহার করতে পারেন । (বিশ্বাস করুন আপনাকে কমান্ড লাইনের প্রথম দিকে সেই বিকল্পটি যুক্ত করতে হবে option) allyচ্ছিকভাবে ব্যবহারকারীকে অন্তর্ভুক্ত করুন। অপশন নামটিতে অতিরিক্তটি নোট করুন যদি না আপনি কেবল সেই ফাইলটি কনফিগারেশন হিসাবে ব্যবহার করতে চান :

[client]
user=foo
password='password!'
shell> chmod 400 my_tmp.cnf
shell> mysql --defaults-extra-file=my_tmp.conf -...

বৈকল্পিকভাবে [client]গোষ্ঠীবদ্ধ তোলে mysqldকনফিগারেশন লাফালাফি।

একটি MYSQL_PWDপরিবেশের পরিবর্তনশীলও ব্যবহার করতে পারে , তবে এটি কখনই পরিবেশ তালিকাভুক্ত করতে ব্যবহার করা উচিত নয় , লিনাক্সের ফাইলগুলিতে অনেকগুলি psপ্রয়োগের মাধ্যমে listps -e/proc/<PID>/environ

tr '\0' '\n' < /proc/<PID>/environ

বিষয়ে আরো এখানে

আপনি মাইএসকিউএল কনফিগারেশন ইউটিলিটিটিও দেখতে চাইতে পারেন যা আপনাকে আপনার হোম ডিরেক্টরিতে একটি এনক্রিপ্ট করা ফাইলটিতে পাসওয়ার্ড সংরক্ষণ করতে সক্ষম করে - .mylogin.cnf


mysql-initব্যাশ ভেরিয়েবলের মধ্যে থাকা পাসওয়ার্ড সহ ফাইলটিতে একটি টোকেন পরিবর্তন করার কোনও উপায় আছে কি ? (প্রকাশ না করে)
ডোর

4
@ ডোর এর মতো echo 'password=p4ssw0rd' >>mysql.cnfকিছু নিরাপদ, কারণ echoএটি একটি অন্তর্নির্মিত, তাই কোনও প্রক্রিয়ার কমান্ড লাইনে পাসওয়ার্ড উপস্থিত হয় না। এখানে একটি নথিও নিরাপদ।
গিলস 'তাই খারাপ হওয়া বন্ধ করুন'

4

সাধারণ সমাধানটি কোনও ফাইল থেকে বা স্ট্যান্ডার্ড ইনপুট থেকে পাসওয়ার্ড পড়তে হয় (বা অন্য কোনও ফাইল বর্ণনাকারীর কাছ থেকে যা প্যারামিটার হিসাবে পাস করতে হবে)।


3

কিছু প্রোগ্রাম ( ftpউদাহরণস্বরূপ কমান্ড লাইন ) পাসওয়ার্ড পড়ে /dev/tty, প্রতি-প্রক্রিয়া বিশেষ ফাইল যা প্রক্রিয়াটির প্রতিনিধিত্ব করে 'টিটিওয়াই নিয়ন্ত্রণ করে। এটি প্রোগ্রামটিকে পাসওয়ার্ডটি আবার স্ক্রিনে প্রতিধ্বনিত করতে দেয় না এবং পাসওয়ার্ডটি কোথা থেকে আসে সে সম্পর্কে আরও কিছুটা নিশ্চয়তা পেতে দেয়।

#!/bin/bash

stty -F /dev/tty -echo 
read PASSWORD < /dev/tty

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