আমি অস্থায়ী ফাইলগুলি তৈরি করা সবচেয়ে ভাল জানি mktemp
, তবে নামযুক্ত পাইপগুলির কী হবে?
আমি জিনিসগুলিকে যতটা সম্ভব পসিক্সের সাথে সঙ্গতিপূর্ণ হতে পছন্দ করি তবে লিনাক্স কেবল গ্রহণযোগ্য। বাশিজম এড়ানো আমার একমাত্র কঠোর মানদণ্ড, যেমন আমি লিখি dash
।
আমি অস্থায়ী ফাইলগুলি তৈরি করা সবচেয়ে ভাল জানি mktemp
, তবে নামযুক্ত পাইপগুলির কী হবে?
আমি জিনিসগুলিকে যতটা সম্ভব পসিক্সের সাথে সঙ্গতিপূর্ণ হতে পছন্দ করি তবে লিনাক্স কেবল গ্রহণযোগ্য। বাশিজম এড়ানো আমার একমাত্র কঠোর মানদণ্ড, যেমন আমি লিখি dash
।
উত্তর:
tmppipe=$(mktemp -u)
mkfifo -m 600 "$tmppipe"
নিয়মিত ফাইল তৈরির বিপরীতে, যা বিদ্যমান ফাইল বা একটি প্রতীকী লিঙ্ক দ্বারা হাইজ্যাক হওয়ার প্রবণতাযুক্ত, নাম পাইপ তৈরি mkfifo
বা অন্তর্নিহিত ফাংশনটির মাধ্যমে নির্দিষ্ট জায়গায় নতুন ফাইল তৈরি হয় বা ব্যর্থ হয়। এর মতো : >foo
কিছু অনিরাপদ কারণ আক্রমণকারী যদি তার ফলাফলের পূর্বাভাস দিতে পারে mktemp
তবে আক্রমণকারী নিজের জন্য লক্ষ্য ফাইলটি তৈরি করতে পারে। তবে mkfifo foo
এমন পরিস্থিতিতে ব্যর্থ হবে।
আপনার যদি পূর্ণ পসিক্স বহনযোগ্যতা দরকার mkfifo -m 600 /tmp/myfifo
হয় তবে হাইজ্যাকিংয়ের বিরুদ্ধে নিরাপদ তবে পরিষেবা অস্বীকারের ঝুঁকিতে রয়েছে; একটি শক্তিশালী এলোমেলো ফাইলের নাম জেনারেটর অ্যাক্সেস ছাড়াই আপনার পুনরায় চেষ্টা প্রচেষ্টা পরিচালনা করতে হবে।
আপনি যদি অস্থায়ী ফাইলগুলির চারপাশে সূক্ষ্ম সুরক্ষা সমস্যার জন্য যত্ন না পান তবে আপনি একটি সাধারণ নিয়মটি অনুসরণ করতে পারেন: একটি ব্যক্তিগত ডিরেক্টরি তৈরি করুন এবং সেখানে সবকিছু রাখুন।
tmpdir=
cleanup () {
if [ -n "$tmpdir" ] ; then rm -rf "$tmpdir"; fi
if [ -n "$1" ]; then kill -$1 $$; fi
}
tmpdir=$(mktemp -d)
trap 'cleanup' EXIT
trap 'cleanup HUP' HUP
trap 'cleanup TERM' TERM
trap 'cleanup INT' INT
mkfifo "$tmpdir/pipe"
trap "rm -rf '$tempdir'" EXIT HUP INT TERM
? এটির নিজস্ব পরিবর্তনশীল প্রসারণ ফাঁদ পেতে পারে?
$tempdir
সময় প্রসারিত হবে trap
, ফাঁদটি ট্রিগার হওয়ার সময় নয়। এই ক্ষেত্রে, এটি কোনও তফাত্ করবে না, আপনার কোডটি ভয়াবহভাবে ভেঙে যায় যদি এর মানটিতে tempdir
একটি কোট থাকে তবে আমার কোড সর্বদা কার্যকর হয়।
$tempdir
স্থানীয়ভাবে আমার ঘোষিত হয়েছিল এবং ফাঁদে এটির অ্যাক্সেস পাওয়ার জন্য এটি অবশ্যই বিশ্বব্যাপী সংজ্ঞায়িত করা উচিত। এখনই বোঝায় ...
$tempdir
মানের কোনও পরিবর্তন হয় না, যা মূলত সমস্ত উদ্দেশ্যেই গ্রহণযোগ্য। একাধিক টেম্প ফাইল /
একটি নিরাপদ বিকল্প হ'ল mktemp
ডিরেক্টরিটি নিরাপদে তৈরি করার জন্য ব্যবহার করা হয়, তারপরে আপনার নামের পাইপটিকে সেই ডিরেক্টরিতে রেখে দিন, rm -R $dir
শেষ পর্যন্ত এটি থেকে মুক্তি পেতে একটি করুন ।
mktemp
ডিরেক্টরিতে ফিফো তৈরির সিদ্ধান্ত নিয়েছিলাম , কারণ এটিই ছিল সত্যিকারের একমাত্র গ্রহণযোগ্য উত্তর, যদি আপনি খেয়াল না করেন, @ গিলিস ইতিমধ্যে এই উত্তরটি গভীরভাবে পোস্ট করেছেন।
"ড্রাই-রান" বিকল্পটি ব্যবহার করুন:
mkfifo $(mktemp -ut pipe.XXX)
-u
বিকল্পটির ব্যবহার "উত্সাহিত নয়"।
-t
, তবে যতক্ষণ না এটি নির্ভরযোগ্যভাবে কাজ করবে আমি ততক্ষণ তা দিয়ে যাব।
-t
নিরুৎসাহিত হয়েছে বলে?
mkstemp()
ফাংশনটি কল করে ( linux.die.net/man/3/mkstemp )। -t
সুইচ নিরুৎসাহিত করা হয় না, তা না হয় -p
, আমার খারাপ।
আপনি mktemp
একটি অস্থায়ী ফাইল তৈরি করতে ব্যবহার করতে পারেন , তারপরে এটি মুছুন এবং একই নামের সাথে একটি নামক পাইপ তৈরি করুন।
উদাহরণ স্বরূপ:
TMPPIPE=$(mktemp -t pipe.XXX) && {
rm -f $TMPPIPE
mkfifo $TMPPIPE
}
$TMPPIPE
আগে কী মুছে ফেলা হবে ? mkfifo
TMPPIPE=`mktemp -u` ; mkfifo $TMPPIPE
mkfifo
শেল থেকে নিয়মিত ফাইল তৈরির বিপরীতে @ টেকজিলা আসলে নিরাপদ। যদি এটি না হয় তবে কোনও ফাইল তৈরি করে তা মুছে ফেলা মোটেই সহায়তা করবে না (প্রকৃতপক্ষে আক্রমণকারীর ফাইলটিকে ফাইলের নামটি অনুমান করার প্রয়োজন নেই তার দ্বারা এটি ব্যাপকভাবে সহায়তা করবে)। সুতরাং কুকুরবাণীর উত্তরটি কাজ করে তবে মধ্যবর্তী ফাইল তৈরি করা একটি অকেজো জটিলতা।
mktemp
ম্যান পেজটি -u
'অনিরাপদ' বিকল্পটিকে ডাকে ?
mktemp -d
আপনি এখনও আপনার ইনপুট জন্য কিছু পয়েন্ট পেয়েছি। আপনার সমস্ত সহায়তার জন্য আপনাকে ধন্যবাদ, আমি সত্যিই এটির প্রশংসা করি!
mktemp -u
নিয়মিত ফাইল তৈরি করার সময় @ টেকজিলা অনিরাপদ, কারণ এটি পরিষেবা অস্বীকারের বিরুদ্ধে সুরক্ষা সরবরাহ করে (এটি যে নামটি উত্পন্ন করে তা যথেষ্ট পরিমাণে অনাকাঙ্ক্ষিত) তবে প্রোগ্রামটির নাকের নীচে আক্রমণকারীকে ফাইল তৈরি করতে বাধা দেয় না। একটি নিয়মিত ফাইলের পরিবর্তে ফিফো তৈরি করা বিরল ব্যবহারের ঘটনা যা ম্যান পৃষ্ঠাটি সম্বোধন করে না।
ব্যবহারের mkfifo
বা mknod
ইউনিক্স, যেখানে দুটি পৃথক প্রক্রিয়ায় নামে নল অ্যাক্সেস করতে পারেন - একজন লেখক হিসেবে অন্যটি প্রক্রিয়া একটি পাঠক হিসাবে এটি খোলার করতে পারেন।
mkfifo my_pipe
gzip -9 -c < my_pipe > out.gz
cat file > my_pipe
নামক পাইপটি যে কোনও ফাইলের মতোই মোছা যাবে:
rm my_pipe
mkfifo --mode=0666 /tmp/namedPipe
gzip --stdout -d file.gz > /tmp/namedPipe
নামযুক্ত পাইপ একবারে কেবল পড়ার জন্য নিয়মিত ফাইল ব্যবহার করা যেতে পারে।
mkfifo
। এটি অস্থায়ী নামের পাইপগুলি সম্পর্কে আমার প্রশ্নের সমাধান করে না , mkdir
অস্থায়ী ডিরেক্টরিগুলি তৈরি করার ঠিকানা ছাড়া আর ।
mktemp
করতে যে বিষয়গুলি সম্বোধন করে এটি কীভাবে এই সমস্যার সমাধান করে ?
mktemp
ফলাফলটি নিজেই নেমপাইপ তৈরি করবে (প্রথমে টেম্প ফাইলটি মোছার পরে অবশ্যই চালানো mkfifo
হবে)। mktemp
একটি অস্থায়ী ডিরেক্টরি তৈরি করতেও ব্যবহার করা যেতে পারে, -t -d
স্যুইচ দিয়ে চেষ্টা করুন ।