পুনঃনির্দেশ ছাড়াই কোনও ফাইলে লিখবেন?


12

আমি একটি নিয়মিত সংকলিত অ্যাপ্লিকেশন লিখছি যা একটি বিশেষ ফাইল তৈরি এবং এটিতে একটি যাদু কুকি লিখতে হবে needs আমি সরাসরি অ্যাপ্লিকেশন থেকে ফাইলটি লিখতে পারি না, সিস্টেম সিকিউরিটি মডেলটির কৌশলটি সম্পাদনের জন্য আমাকে উন্নত সুবিধাসহ একটি সহায়ক সরঞ্জাম চালু করতে হবে। আমি সহায়ক সরঞ্জামে যেকোন যুক্তি সরবরাহ করতে পারি। এখন আমি খুব সহজ কিছু সিস্টেম কমান্ড বেছে নিতে চাই যা সহায়ক সহায়ক হিসাবে কাজ করবে এবং আমার জন্য ফাইলটি তৈরি করবে। এটার মতো কিছু:

/bin/sh -c "/bin/echo -n 'magic' > /some/where/file"

touchফাইলটিতে কুকি লেখার জন্য সরল এটি কাটবে না, echoশেল র‌্যাপার ব্যতীত একটি সরল কাজ করে না কারণ ফাইলটি লেখার জন্য এটি পুনঃনির্দেশ প্রয়োজন needs এ জাতীয় তুচ্ছ কাজ করার জন্য রুট সুবিধাগুলি দিয়ে শেলটি কল করতে আমি স্বাচ্ছন্দ্য বোধ করি না। সত্যিই কি কিছু সরল, সীমাবদ্ধ সিস্টেম কমান্ড আছে যা আমি আমার জন্য ফাইলটি লেখার জন্য কল করতে পারি?


/bin/sh -c 'echo magic > /path/to/magic/file'কাজ না করার কারণ আছে কি ? এটি একটি এক্সিকিউটেবল ফাইল এবং দুটি যুক্তি হবে। আপনার শেষ যুক্তিটি স্ট্রিং হিসাবে তৈরি করতে হবে (স্প্রিন্টফ বা সমমানের সাথে)। কারণ কি এটি আপনার পক্ষে কাজ করবে না? আপনার প্রশ্ন থেকে মনে হচ্ছে doCommandAsRoot () কমান্ডের প্রবাহে ইনপুট নেয় না, সঠিক? অন্যথায় আপনি শেষ যুক্তিটি প্রতিস্থাপন করতে পারেন 'cat > /path/to/magic/file'এবং স্ট্রিং তৈরির পরিবর্তে ডেটা পাস করতে পারেন।
আর্জেজ

শেলের উদাহরণটি কাজ করে, তবে আমি কেবল একটি সরল ফাইল তৈরি করতে রুট সুবিধার সাথে শেলটি কল করতে ঘৃণা করব। লাইব্রেরিটি একটি যোগাযোগ পাইপ যুক্তি (এটির অনুমোদনের এক্সেকিউটভিথপ্রাইভিলিজ ) নেয়, যা কুকি ব্যবহার করে লেখার জন্য ব্যবহৃত হতে পারে tee। ধন্যবাদ!
জুল

আরও দেখুন stackoverflow.com/a/18146890/2032064
Mifeet

উত্তর:


11

এটি সম্পর্কে:

echo -n 'magic' | sudo tee /some/where/file > /dev/null

অবশ্যই এতে পুনর্নির্দেশগুলি রয়েছে তবে কেবল টি শেল হিসাবে নয় root dd of=...খুব কাজ করে।


2
দুঃখিত, ইদানীং নিজেকে ব্যাখ্যা করতে আমার অবশ্যই সমস্যা হচ্ছে। সমস্যাটি হ'ল আমি যখন উন্নত সুবিধাগুলি সহ কিছু চালাতে চাই তখন আমাকে একটি বিশেষ লাইব্রেরি কল (যেমন কিছু doCommandAsRoot) দিয়ে যেতে হবে । এবং এই ফাংশনটি কেবল কমান্ড এবং তার যুক্তিগুলির পথ গ্রহণ করে, তাই এখনই আমার পক্ষে আউটপুট পুনঃনির্দেশ ব্যবহার করার উপায় নেই। আমি শেলটি দিয়ে যেতে পারি (প্রশ্নটিতে দেখানো হয়েছে) তবে আমি সুরক্ষা অনুযায়ী পছন্দ করি না।
জুল

@ জোল: আমি ভেবেছিলাম আপনি শেল স্ক্রিপ্ট লিখছেন। অসমর্থিত প্রক্রিয়াগুলির জন্য অ্যাক্সেসযোগ্য এমন কোনও ফাইলে ম্যাজিক কুকি লেখা কি ঠিক আছে? যদি তা হয় তবে এ জাতীয় ফাইলটিতে কল করুন এবং কল করুন doCommandAsRoot("dd", "if=/tmp/unprotected_file", "of=/some/where/file")
stribika

না, এটি একটি নিয়মিত সংকলিত অ্যাপ্লিকেশন (প্রশ্ন আপডেট হয়েছে)। আমি কেবল সহায়ক হিসাবে কাজ করার জন্য "শেল" কমান্ডগুলি সন্ধান করছি যাতে এটি আমার নিজের লেখা না হয়। হ্যাঁ, কুকি সংবেদনশীল কিছু নয়। ddউদাহরণস্বরূপ প্রশংসনীয় আমি কি চাই পাসে হবে, আপনাকে ধন্যবাদ। আপনি কি আরও সহজ কিছু চিন্তা করতে পারেন?
zoul

অবশ্যই - আপনি cpবা এর mvপরিবর্তে ব্যবহার করতে পারেন dd
ম্যাচটিএম

আমার অনুলিপিটি
হ'ল

9

আউটপুট পুনর্নির্দেশ ছাড়াই, পাইপ ছাড়াই, তবে "এখানে স্ট্রিং" সহ:

dd of=/some/where/file <<<'magic'

এই পদ্ধতির একটি নেতিবাচক দিকটি হল ডিডি স্টাডাউটকে কিছু পরিসংখ্যান লিখে। এগুলিকে আড়াল করতে আপনি> / dev / নাল ব্যবহার করতে পারেন তবে সেই সময়ে আপনি টি ব্যবহার করতে পারেন।
স্টুডিজেক

1
এটি আমার জন্য অস্বাভাবিক পরিস্থিতিতে কাজ করেছিল যেখানে আমি আউটপুট পুনঃনির্দেশ বা পাইপ ব্যবহার করতে পারি না। status=noneজিএনইউ কোর্টিলসের আধুনিক সংস্করণগুলি থেকে অন্য সমস্ত আউটপুট দমন করবে dd
মাইকেল হ্যাম্পটন 21

5

আরেকটি বিবেচনা রয়েছে, যা হ'ল আপনি যাদু কুকির মান কোনও কমান্ড লাইনে রাখতে চান না, যেহেতু এটি অন্যান্য ব্যবহারকারীরা লক্ষ্য রাখতে পারেন। এমনকি প্রোগ্রামটি স্বল্পস্থায়ী হলেও (প্রোগ্রামটি কমান্ড লাইনের স্ট্রিংটি জিরো করে অন্তর্ভুক্ত করে থাকলেও) আক্রমণ করার সুযোগ রয়েছে। সুতরাং, একটি তাত্ত্বিক:

writestringtofile 'magic' /some/where/file

একটি বিপজ্জনক পদ্ধতির। অতএব, আমি @ স্ট্রিবিকার পরামর্শটি সমর্থন করি: একটি অস্থায়ী ফাইলে মান লিখুন এবং এটি জায়গায় কপি করুন। অস্থায়ী ফাইল ( mkstemp()) তৈরি করতে কোনও সুরক্ষিত ফাংশন ব্যবহার করার বিষয়টি নিশ্চিত করুন যাতে সেখানেও কোনও রেসের শর্ত না থাকে।


ধন্যবাদ, এটি একটি দরকারী আলোচনা। ভাগ্যক্রমে "ম্যাজিক কুকি" কোনও সুরক্ষা ডিভাইস নয়, এটি স্পষ্টভাবে যে কেউ দেখতে পাবে।
zou

0

মোরটিলস থেকে স্পঞ্জ করুন - স্ট্যান্ডার্ড ইনপুট ভিজিয়ে রাখুন এবং একটি ফাইলে লিখুন:

echo -n 'magic' | sponge /some/where/file

শেল পুনর্নির্দেশের বিপরীতে, স্পঞ্জ আউটপুট ফাইলটি লেখার আগে তার সমস্ত ইনপুট আপ করে তোলে। যখন সম্ভব হয়, স্পঞ্জ একটি টেম্প ফাইলের স্থানে নতুন নাম রেখে আউটপুট ফাইলটি তৈরি বা আপডেট করে।

আরও দেখুন

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