কমান্ড লাইন আর্গুমেন্ট হিসাবে পাসওয়ার্ডটি কীভাবে আড়াল করবেন?


43

আমি এমন একটি সফ্টওয়্যার ডিমন চালাচ্ছি যা কিছু বৈশিষ্ট্য আনলক করার জন্য নির্দিষ্ট ক্রিয়াকলাপের জন্য একটি পাসফ্রেজ প্রবেশ করানো প্রয়োজন যা উদাহরণস্বরূপ দেখায়:

$ darkcoind masternode start <mypassphrase>

আমার হেডলেস ডেবিয়ান সার্ভারে এখন আমি কিছু সুরক্ষা উদ্বেগ পেয়েছি।

যখনই আমি আমার বাশের ইতিহাস অনুসন্ধান করি উদাহরণস্বরূপ Ctrl+Rআমি এই সুপার শক্তিশালী পাসওয়ার্ডটি দেখতে পারি। এখন আমি কল্পনা করেছি যে আমার সার্ভারটি আপোস হয়েছে এবং কিছু অনুপ্রবেশকারীর শেল অ্যাক্সেস রয়েছে এবং কেবল Ctrl+Rইতিহাসে আমার পাসফ্রেজটি সন্ধান করতে পারে।

সেখানে পাসফ্রেজ প্রবেশের একটি উপায় ছাড়াই এটি ব্যাশ ইতিহাসে দেখানো হবে তা হল, ps, /procঅন্য যে কোনো স্থানে বা?


আপডেট 1 : ডেমনটিতে কোনও পাসওয়ার্ড না দেওয়ার ফলে ত্রুটি হয়। এটি কোনও বিকল্প নয়।


আপডেট 2 : বিকাশকারীদের ফাঁসি দেওয়ার মতো সফ্টওয়্যার বা অন্যান্য সহায়ক ইঙ্গিতগুলি মুছতে আমাকে বলবেন না। আমি জানি এই একটি সেরা-অনুশীলন উদাহরণ নয় কিন্তু এই সফটওয়্যার উপর ভিত্তি করে তৈরি Bitcoin এবং সব Bitcoin ভিত্তিক ক্লায়েন্ট যা এই কমান্ড এবং তার একটি পরিচিত সুরক্ষা সমস্যা এখনো আলোচনা হচ্ছে (কথা শোনে JSON RPC সার্ভারের কিছু ধরনের একটি , , ) ।


আপডেট 3 : ডিমন ইতিমধ্যে শুরু হয়েছে এবং কমান্ডটি দিয়ে চলছে

$ darkcoind -daemon

করা psকেবল স্টার্টআপ কমান্ডটি দেখায়।

$ ps aux | grep darkcoin
user     12337  0.0  0.0  10916  1084 pts/4    S+   09:19   0:00 grep darkcoin
user     21626  0.6  0.3 1849716 130292 ?      SLl  May02   6:48 darkcoind -daemon

সুতরাং পাসফ্রেজের সাহায্যে কমান্ডগুলি প্রেরণ করা মোটেও psবা কিছুতেই দেখা যায় না /proc

$ darkcoind masternode start <mypassphrase>
$ ps aux | grep darkcoin
user     12929  0.0  0.0  10916  1088 pts/4    S+   09:23   0:00 grep darkcoin
user     21626  0.6  0.3 1849716 130292 ?      SLl  May02   6:49 darkcoind -daemon

ইতিহাসটি কোথায় দেখায় এই প্রশ্নটি ফেলে দেয়? শুধু ভিতরে .bash_history?


1
প্রথম প্রশ্নটি হ'ল: আপনি পাসফ্রেজ আর্গুমেন্ট ছাড়াই ডেমন শুরু করলে কী হয়। এটি কি কেবল এটির জন্য অনুরোধ করে?
ম্যাডহ্যাটার মনিকে

31
আমি মনে করি না এমন কোনও উত্তর আছে যা কার্যকর হবে। পাসফ্রেজের অনুরোধ জানাতে অক্ষমতা ডেমনটিতে একটি বড় ঘাটতি। যদি এটি নিখরচায় সফ্টওয়্যার থাকে তবে কোনও প্রোগ্রামার এনে এটি ঠিক করুন; আপনার পরিবর্তনগুলি প্রকাশ করতে ভুলবেন না যদি এটি মালিকানাধীন সফ্টওয়্যার হয় তবে বিক্রেতাটির সাথে যোগাযোগ করুন এবং তাদেরকে চিৎকার করুন (এটি কোনও কিছুই ঠিক করে না, তবে এটি আপনাকে আরও ভাল বোধ করবে)।
ম্যাডহ্যাটার মনিকে

4
আপনার ডকুমেন্টেশন পরীক্ষা করুন, এটি সিস্টেম এনভায়রনমেন্ট ভেরিয়েবল থেকে সেই পাসওয়ার্ডটি পড়তে সমর্থন করতে পারে।
এলিয়ট ফ্রিচ

3
ডিমনকে কমান্ড লাইনে পাসওয়ার্ড না দেওয়া হলেও, অন্য কোনও কমান্ডের কমান্ড লাইনে এটি দেওয়া এখনও সমস্যাযুক্ত। এটি কেবলমাত্র স্বল্প সময়ের জন্য পিএস আউটপুটে দৃশ্যমান, তবে পটভূমিতে চলমান একটি প্রক্রিয়া এখনও এটিকে নিতে পারে। তবে এটি অবশ্যই পাসওয়ার্ড বাছাই করা আরও শক্ত করে তোলে সার্থক।
ক্যাস্পার্ড

2
এই প্রশ্নের উত্তর দেখুন , তারা ঠিক এই বিষয়টি নিয়ে কাজ করে।
dotancohen

উত্তর:


68

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

সরল ইন্টারপোজার

তবে আপনি অন্যভাবে জিজ্ঞাসা করেছিলেন, তাই এখানে একটি:

#define _GNU_SOURCE
#include <dlfcn.h>

int __libc_start_main(
    int (*main) (int, char * *, char * *),
    int argc, char * * ubp_av,
    void (*init) (void),
    void (*fini) (void),
    void (*rtld_fini) (void),
    void (* stack_end)
  )
{
  int (*next)(
    int (*main) (int, char * *, char * *),
    int argc, char * * ubp_av,
    void (*init) (void),
    void (*fini) (void),
    void (*rtld_fini) (void),
    void (* stack_end)
  ) = dlsym(RTLD_NEXT, "__libc_start_main");
  ubp_av[argc - 1] = "secret password";
  return next(main, argc, ubp_av, init, fini, rtld_fini, stack_end);
}

এটি দিয়ে সংকলন করুন

gcc -O2 -fPIC -shared -o injectpassword.so injectpassword.c -ldl

তারপরে আপনার প্রক্রিয়াটি চালান

LD_PRELOAD=$PWD/injectpassword.so darkcoind masternode start fakepasshrase

mainআপনার অ্যাপ্লিকেশন থেকে ফাংশনটি কার্যকর হওয়ার আগে ইন্টারপোজার লাইব্রেরি এই কোডটি চালাবে । এটি কলটিতে প্রধান আসল পাসওয়ার্ড দ্বারা শেষ কমান্ড লাইন যুক্তিটি প্রতিস্থাপন করবে। মুদ্রিত হিসাবে কমান্ড লাইনটি /proc/*/cmdline(এবং সেইজন্য সরঞ্জামগুলির দ্বারা দেখা ps) এখনও জাল যুক্তিযুক্ত থাকবে। স্পষ্টতই আপনাকে উত্স কোড এবং এটি থেকে সংকলিত গ্রন্থাগারটি কেবল নিজেরাই পঠনযোগ্য করে তুলতে হবে, সুতরাং একটি chmod 0700ডিরেক্টরিতে সেরা পরিচালনা করুন । এবং যেহেতু পাসওয়ার্ডটি আদেশ কমানোর অংশ নয়, আপনার বাশ ইতিহাসও নিরাপদ।

আরও উন্নত ইন্টারপোজার

আপনি যদি আরও বিস্তৃত কিছু করতে চান তবে আপনার মনে রাখতে হবে __libc_start_mainরানটাইম লাইব্রেরিটি সঠিকভাবে শুরু করার আগেই তা কার্যকর করা উচিত । সুতরাং আমি কোনও ফাংশন কলগুলি একেবারে অপরিহার্য না হলে এড়ানো পরামর্শ দিই। আপনি যদি আপনার হৃদয়ের বিষয়বস্তুতে ফাংশনগুলি কল করতে সক্ষম হতে চান তবে নিশ্চিত করুন যে mainসমস্ত সূচনা হওয়ার পরে নিজেই অনুরোধ করার আগে আপনি এটি করছেন। নিম্নলিখিত উদাহরণের জন্য আমাকে গ্রুবারম্যানশকে ধন্যবাদ জানাতে হবে যিনি নির্দেশ করেছিলেন যে কীভাবে কমান্ড লাইন আর্গুমেন্ট হিসাবে পাসওয়ার্ডটি গোপন করা যায় যা getpassআমার নজরে নিয়ে আসে।

#define _GNU_SOURCE
#include <dlfcn.h>
#include <unistd.h>

static int (*real_main) (int, char * *, char * *);

static int my_main(int argc, char * * argv, char * * env) {
  char *pass = getpass(argv[argc - 1]);
  if (pass == NULL) return 1;
  argv[argc - 1] = pass;
  return real_main(argc, argv, env);
}

int __libc_start_main(
    int (*main) (int, char * *, char * *),
    int argc, char * * ubp_av,
    void (*init) (void),
    void (*fini) (void),
    void (*rtld_fini) (void),
    void (* stack_end)
  )
{
  int (*next)(
    int (*main) (int, char * *, char * *),
    int argc, char * * ubp_av,
    void (*init) (void),
    void (*fini) (void),
    void (*rtld_fini) (void),
    void (* stack_end)
  ) = dlsym(RTLD_NEXT, "__libc_start_main");
  real_main = main;
  return next(my_main, argc, ubp_av, init, fini, rtld_fini, stack_end);
}

এটি পাসওয়ার্ডের জন্য অনুরোধ জানায়, তাই আপনাকে আর ইন্টারপোজার লাইব্রেরি গোপন রাখতে হবে না। স্থানধারক যুক্তিটি পাসওয়ার্ড প্রম্পট হিসাবে পুনরায় ব্যবহৃত হয়েছে, সুতরাং এটির মতো অনুরোধ করুন

LD_PRELOAD=$PWD/injectpassword.so darkcoind masternode start "Password: "

অন্য বিকল্পটি কোনও ফাইল বর্ণনাকারীর (যেমন উদাহরণস্বরূপ gpg --passphrase-fd) বা পাসওয়ার্ডগুলি x11-ssh-askpassবা যে কোনও কিছু থেকে পাসওয়ার্ড পড়তে পারে ।


4
যদিও আমি বুঝতে পারছি না এবং কোড পরীক্ষা করতে পারবেন না, আমি তা সারকথা, এবং পেতে এই প্রকৃত উত্তর মত দেখাচ্ছে এবং উপরের উত্তর হওয়া উচিত।
মার্ক হেন্ডারসন

এটা সত্যিই দুর্দান্ত।
ওয়াকার লিম

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

1
পাসওয়ার্ডটি STDIN এ নেওয়া সম্ভব এবং এখনও এই কাজটি থাকা উচিত যা stringsদুর্বলতা দূর করে । দেখুন : টার্মিনালে পাসওয়ার্ড ইনপুট লুকান
গ্রুবারম্যানশ

1
@ mulg0r: স্ট্যান্ডার্ড এক্সটার্নান "সি" এর সাথে সম্পর্কিত ফাংশনের জন্য নাম ম্যাঙ্গালিং দমন করার কৌশলটি করা উচিত __libc_start_main
এমভিজি

28

এটি কেবল ইতিহাস নয়। এটি পিএস আউটপুটে পাশাপাশি দেখাতে চলেছে ।

এই সফ্টওয়্যারটির যে অংশটি লিখেছেন তাকে ঝুলানো উচিত, আঁকতে হবে এবং কোয়ার্টার করতে হবে। যে কোনও সফ্টওয়্যারই হোক না কেন কমান্ড-লাইনে একটি পাসওয়ার্ড সরবরাহ করা একেবারে নন।
ডেমন প্রক্রিয়াটির জন্য এটি আরও বেশি ক্ষমাযোগ্য ...

নিজেই সফ্টওয়্যারটিতে আরএম-এফ ছাড়াও আমি এর কোনও সমাধান জানি না। সততা: কাজ শেষ করতে অন্য সফ্টওয়্যার সন্ধান করুন। এ জাতীয় আবর্জনা ব্যবহার করবেন না।


9
মোটেই সহায়ক না হওয়ার জন্য ধন্যবাদ। এটি একটি দীর্ঘ আলোচিত সুরক্ষা ইস্যু , এখনও নিষ্পত্তিহীন এবং আমার rm -fএখনকার চেয়ে আরও ভাল কাজের প্রয়োজন ।
ওয়াকার লিম

17
আসলে, তিনি খুব সহায়ক হচ্ছে। আপনি যদি একটি তর্ক হিসাবে পাসফ্রেজটি পাস করেন তবে এটি এতে প্রদর্শিত হবে ps। সুতরাং দেব এটি ঠিক করতে না পারলে তিনি অন্য কিছু ব্যবহার করার পরামর্শ দিচ্ছেন।
সাফাদো

3
তারপরে আপনি আরও একটি অপারেটিং সিস্টেম লিখতে শুরু করুন। আমি বর্তমানে অবগত যে অন্য কোন সমাধান নেই। Byশ্বরের কসম আমি এখানে একটি থাকতে ইচ্ছুক। এই সমস্যাটি নিয়ে আপনি কেবল একাই নন।
টনি

8
ভার্টো আপনি কাগজের সামান্য স্লিপে এটি পাস করার কোনও উপায় জিজ্ঞাসা করতে পারেন, তবে এর অর্থ এই নয় যে এই জাতীয় কোনও স্বয়ংক্রিয়ভাবে উপস্থিত রয়েছে। পঠন_এক্স ঠিক আছে, তবে তবুও উদাহরণস্বরূপ পাসফ্রেজটি প্রকাশ করে psতাই এটি rmসমাধানের চেয়ে ভাল better
ম্যাডহ্যাটার মনিকে

7
আপনি সব আগে যান এবং এই-না-উত্তর-উত্তরটির জন্য আরও একটি +1 ছুঁড়ে ফেলার আগে এবং অভিযোগ করা অসম্ভব বলে মনে করেন, আমি আপনাকে নীচে এমভিজির উত্তরটি
মার্ক হেন্ডারসন

19

এটি psআউটপুট সাফ করবে ।

খুব সচেতন থাকুন : এটি অ্যাপ্লিকেশনটি ভেঙে দিতে পারে। আপনাকে যথাযথভাবে সতর্ক করা হয়েছে যে এখানে ড্রাগন থাকুন।

  • বিদেশী প্রক্রিয়াগুলি কোনও প্রক্রিয়া স্মৃতিতে ঘুরপাক খাওয়া উচিত নয়।
  • প্রক্রিয়াটি যদি পাসওয়ার্ডের জন্য এই অঞ্চলে নির্ভর করে তবে আপনি আপনার অ্যাপ্লিকেশনটি ভঙ্গ করতে পারেন।
  • এটি করা আপনার সেই প্রক্রিয়াটিতে থাকা কোনও কার্যকরী ডেটা দূষিত করতে পারে।
  • এটি একটি উন্মাদ হ্যাক।

এখন আপনাকে এই গুরুতর সতর্কতা সম্পর্কে যথাযথভাবে অবহিত করা হবে। এটি প্রদর্শিত আউটপুট সাফ করবে ps। এটি আপনার ইতিহাস সাফ করবে না, বা বাশ কাজের ইতিহাসকে সাফ করবে না (যেমন প্রক্রিয়া চালানোর মতো myprocess myargs &)। তবে psআর যুক্তি প্রদর্শন করবে না।

#!/usr/bin/python
import os, sys
import re

PAGESIZE=4096

if __name__ == "__main__":
  if len(sys.argv) < 2:
    sys.stderr.write("Must provide a pid\n")
    sys.exit(1)

  pid = sys.argv[1]

  try:
    cmdline = open("/proc/{0}/cmdline".format(pid)).read(8192)

    ## On linux, at least, argv is located in the stack. This is likely o/s
    ## independent.
    ## Open the maps file and obtain the stack address.
    maps = open("/proc/{0}/maps".format(pid)).read(65536)
    m = re.search('([0-9a-f]+)-([0-9a-f]+)\s+rw.+\[stack\]\n', maps)
    if not m:
      sys.stderr.write("Could not find stack in process\n");
      sys.exit(1)

    start = int("0x"+m.group(1), 0)
    end = int("0x"+m.group(2), 0)

    ## Open the mem file
    mem = open('/proc/{0}/mem'.format(pid), 'r+')
    ## As the stack grows downwards, start at the end. It is expected
    ## that the value we are looking for will be at the top of the stack
    ## somewhere
    ## Seek to the end of the stack minus a couple of pages.
    mem.seek(end-(2*PAGESIZE))

    ## Read this buffer to the end of the stack
    stackportion = mem.read(8192)
    ## look for a string matching cmdline. This is pretty dangerous.
    ## HERE BE DRAGONS
    m = re.search(cmdline, stackportion)
    if not m:
      ## cause this is an example dont try to search exhaustively, just give up
      sys.stderr.write("Could not find command line in the stack. Giving up.")
      sys.exit(1)

    ## Else, we got a hit. Rewind our file descriptor, plus where we found the first argument.
    mem.seek(end-(2*PAGESIZE)+m.start())
    ## Additionally, we'll keep arg0, as thats the program name.
    arg0len = len(cmdline.split("\x00")[0]) + 1
    mem.seek(arg0len, 1)

    ## lastly overwrite the remaining region with nulls.
    writeover = "\x00" * (len(cmdline)-arg0len)
    mem.write(writeover)

    ## cleanup
    mem.close()

  except OSError, IOError:
    sys.stderr.write("Cannot find pid\n")
    sys.exit(1)

প্রোগ্রামটি সংরক্ষণ করে এটি চালু করুন chmod +xit তারপরে কাজ করা ./whatever <pidoftarget> যদি এটি কাজ করে তবে এটি কোনও আউটপুট উত্পাদন করবে না। যদি এটি ব্যর্থ হয় তবে এটি কোনও কিছুর বিষয়ে অভিযোগ করবে এবং ছেড়ে দেবে।


18
। । । এটি উভয়ই সৃজনশীল এবং ভীতিজনক।
voretaq7

ওহো! এখন আমি ভীত।
জান্নে পিক্কারাইনেন

ইয়িক্কস, এটি কাজ করতে পারে ... আমি নিশ্চিত নই যে এটি অ্যাপআর্মার মতো কিছু এটিকে ধরবে? এছাড়াও ভাইরাস স্ক্যানার সম্ভাব্যভাবে এটি ধরতে পারে এবং আপত্তিজনক অ্যাকাউন্টটি 'রুট' হিসাবে অবরুদ্ধ করে ব্লক করে দিতে পারে। সত্যই ড্রাগন আছে ....
টনি

@ টনি সুরক্ষিত ডোমেনগুলির জন্য, সেলইনাক্স এটি প্রতিরোধ করবে। আপনার বেসিক ইউনিক্স অনুমতি (ডিএসি) এ আচরণ থেকে কোনও সুরক্ষা দেওয়ার জন্য পর্যাপ্ত বিষয় গ্রানুলারটির অভাব রয়েছে (একই ইউআইডি-র মধ্যে প্রক্রিয়াগুলির মেমরির পরিবর্তনের অনুমতি দেয়)। যাইহোক, এটি কোনও বাগ নয় - এটি একটি বৈশিষ্ট্য। আমি বিশ্বাস করি এটি gdbচলমান প্রক্রিয়াগুলির স্মৃতিটিকে কীভাবে সংশোধন করতে পারে (এটির চেয়ে আরও বেশি শল্য চিকিত্সা সহ আমি যুক্ত করতে পারি)।
ম্যাথু ইফি

11

আপনি কেবল একটি রুট বা প্রয়োজনীয় ব্যবহারকারীর দ্বারা অ্যাক্সেসযোগ্য কোনও ফাইল থেকে তর্কটি পাস করতে পারেন?

কনসোলে পাসওয়ার্ড টাইপ করার জন্য এটি একটি বিশাল সংখ্যা নেই, তবে শেষ অবলম্বন ... আপনার লাইনের স্থান দিয়ে শুরু করুন যাতে এটি ইতিহাসে প্রদর্শিত না হয়।


একটি শেল বিকল্প ছিল যা এটি সক্ষম করে, তবে আমি মনে করি এটি ডিফল্টরূপে সক্ষম করা হয়নি।
হেনরিচ 5991

export HISTCONTROL=ignorebothইতিহাসে প্রবেশের জন্য একটি অগ্রণী স্থান সহ নকল এবং লাইন উভয়ই উপেক্ষা করে। এটি আপনার .bashrc বা .bash_profile এ যুক্ত করুন।
Andreas

7

সম্ভবত এটি কাজ করে (?):

darkcoind masternode start `cat password.txt`

3
অথবা এমনকি darkcoind masternode start `head -1`, আপনি নিজে পাসওয়ার্ডটি প্রবেশ করতে চাইলে।
ক্যাস্পারড

14
পাসফ্রেজটি এখনও psএকই জাতীয় উপযোগের মাধ্যমে উপলব্ধ ।
voretaq7

1
একটি প্লেইন পাসওয়ার্ড থেকে মুভিং .bash_historyএকটি প্লেইন পাসওয়ার্ডে password.txtকি লাভ আপনি, ঠিক?
মাইকিবি 3'14

1
@ মাইকিবি: একটি ছোট জয় রয়েছে: আপনার ইতিহাস অনুসন্ধানের সময় কেউ আপনার কাঁধের উপর দিয়ে তাকানোর সময় আপনি এটি সনাক্ত করতে পারবেন না।
এমভিজি

1
@ মাইকিবি, আপনি প্রতিবার সেই ফাইলটি তৈরি এবং মুছে ফেলতে পারেন।
রিয়াড

4

দুর্ভাগ্যক্রমে, যদি আপনার darkcoindকমান্ডটি কমান্ড-লাইন আর্গুমেন্ট হিসাবে পাসওয়ার্ডের প্রত্যাশা করে, তবে এটি যেমন ইউটিলিটিগুলির মাধ্যমে প্রকাশ করা হবে ps। একমাত্র আসল সমাধান হ'ল বিকাশকারীদের শিক্ষিত করা

যদিও psএক্সপোজার অনিবার্য হতে পারে, আপনি অন্তত শেল ইতিহাস ফাইলের মধ্যে আউট লিখিত হওয়া থেকে পাসওয়ার্ড রাখতে পারে।

$ xargs darkcoind masternode start

password

CtrlD

ইতিহাস ফাইলটি কেবল xargs darkcoind masternode startপাসওয়ার্ড নয়, রেকর্ড করা উচিত ।


2
অথবা আপনি কি ব্যাশ ব্যবহার করছেন, করা ignorespaceমধ্যে $HISTCONTROL, এবং তারপরে আপনি প্রতিরোধ করতে পারি কোনো একটি স্পেস দিয়ে কমান্ড prefixing দ্বারা শেল ইতিহাস মধ্যে যাওয়া থেকে কমান্ড।
ডার্বার্ট

3

অন্যরা যেমন বলেছে, ইতিহাস থেকে তথ্য গোপন করার জন্য আপনার শেল ইতিহাসের নিয়ন্ত্রণটি দেখুন।

তবে একটি জিনিস যা এখনও কেউ প্রস্তাব করেনি বলে মনে হচ্ছে তা হল প্যারামিটারটি /procদিয়ে মাউন্ট hidepidকরা। এটির মতো অন্তর্ভুক্ত করতে আপনার /procলাইনটি সংশোধন করার চেষ্টা করুন :/etc/fstabhidepid

# <file system> <mount point>   <type>  <options>       <dump>  <pass>
proc            /proc           proc    defaults,hidepid=2        0       0

2

একটি নতুন শেল প্রক্রিয়া থেকে কমান্ডটি চালিয়ে আপনি পাসওয়ার্ডটি আপনার শেলের ইতিহাসের বাইরে রাখতে পারেন, যা আপনি তত্ক্ষণাত বন্ধ করে দিতে পারেন। উদাহরণ স্বরূপ:

bash$ sh
sh$ darkcoind masternode start 'correct horse battery staple'
sh$ exit
bash$

কোনও ফাইলের ইতিহাস না সংরক্ষণ করার shজন্য কনফিগার করা আছে তা নিশ্চিত করুন।

অবশ্যই এটি অন্যান্য সমস্যার সমাধান করে না, যেমন পাসওয়ার্ডটি দৃশ্যমান ps। আমি বিশ্বাস করি, darkcoindপ্রোগ্রামটি নিজে থেকে তথ্যগুলি আড়াল করার উপায় রয়েছে psতবে এটি কেবল দুর্বলতার উইন্ডোকে সংক্ষিপ্ত করে তোলে।


1
পাসফ্রেজটি এখনও psএকই জাতীয় ইউটিলিটির মাধ্যমে উপলব্ধ ।
voretaq7

3
@ ভোরেটাক 7: হ্যাঁ, আমি আমার উত্তরের শেষ অনুচ্ছেদে স্পষ্টভাবে স্বীকার করেছি।
কিথ থম্পসন 21

3
প্রকৃতপক্ষে - আপনি আমার পক্ষ থেকে অযৌক্তিক কোপাইপাস্টার শিকার হয়েছিলেন :)
voretaq7

2

বিটকয়েনের জন্য, অফিশিয়াল ডেভেলপারের উত্তর হ'ল প্রদত্ত পাইথন র‍্যাপার ইন contrib/bitrpc/bitrpc.py( গিথুব ) ব্যবহার করা:

walletpassphraseউদাহরণস্বরূপ, আপনি যদি কমান্ডটি ব্যবহার করেন তবে এটি সুরক্ষিতভাবে একটি পাসওয়ার্ড চেয়েছে । এতে ইন্টারেক্টিভ কার্যকারিতা যুক্ত করার কোনও পরিকল্পনা নেই bitcoin-cli

এবং:

bitcoin-cli যেমনটি থাকবে তেমনি ইন্টারেক্টিভ কার্যকারিতা অর্জন করবে না।

সূত্র: # 2318

ওয়ালেট আনলক করুন:

$ python bitrpc.py walletpassphrase

পাসফ্রেজ পরিবর্তন করুন:

$ python bitrpc.py walletpassphrasechange

https://github.com/bitcoin/bitcoin/tree/master/contrib/bitrpc

ডার্ককয়েনের জন্য এটি ব্যথায় কাজ করে:

https://github.com/darkcoin/darkcoin/tree/master/contrib/bitrpc

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