লাইব্রেরি আপগ্রেড করার সময় অ্যাপ্লিকেশনগুলিকে সুরক্ষা দেয় এমন কোনও ব্যবস্থা আছে কি?


10

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

নাকি এটি প্রয়োগ করা যায়?


ln -sfলাইব্রেরিগুলিতে অদলবদল করার সময় আপনার কীভাবে ব্যবহার করা উচিত সে সম্পর্কে একটি লিনাক্স বই পড়ার বিষয়টি মনে রাখবেন , কারণ -fআপনাকে নতুন চিহ্নের সাথে প্রতীকী লিঙ্কের বিদ্যমান গন্তব্যটি "ওভাররাইট" করার অনুমতি দেওয়া হয়েছে, এটি কখনও "ভাঙা" না হয়ে (যদি আপনি rmঅনুসরণ না করেন তবে ভিন্ন) ক ln -s)। কমান্ডের আগে, গ্রন্থাগার.স . পুরানো সংস্করণে নির্দেশ করেছেন, যেমন। গ্রন্থাগার.স.৪. ... কমান্ডের পরে, এটি কেবল গ্রন্থাগারের দিকে নির্দেশ না করে গ্রন্থাগার.সো .5 (বা যাই হোক না কেন) দিকে নির্দেশ করে।
বার্ড কোপ্পেরুদ

উত্তর:


16

@ কুসালানন্দ দ্বারা উল্লিখিত হিসাবে, সাধারণত পুরানো ফাইল মুছে ফেলা এবং একই নামের সাথে একটি নতুন তৈরি করে আপগ্রেড করা হয়। এটি আসলে একটি নতুন ইনোড সহ একটি নতুন ফাইল তৈরি করবে, সিস্টেমটি যতক্ষণ না খোলা থাকবে ততক্ষণ পুরানোটিকে ব্যবহারের জন্য মুক্ত রাখবে।

সরলীকৃত উদাহরণ হিসাবে স্টাফ পছন্দ করে

rm /bin/cat
cp /new/version/of/cat /bin/cat

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


কেউ একই নামের সাথে একটি নতুন তৈরি করার পরিবর্তে স্থানটিতে বাইনারি পরিবর্তনের চেষ্টা করতে পারে। এই ক্ষেত্রে, কমপক্ষে লিনাক্স প্রকৃতপক্ষে ব্যবহারযোগ্য একটি এক্সিকিউটেবলের পরিবর্তন করতে বাধা দেয়:

window 1 # ./cat
window 2 # echo foobar > cat
-bash: cat: Text file busy

যাইহোক, এটি গতিশীল লোড করা লাইব্রেরিগুলির সাথে কাজ করবে বলে মনে হচ্ছে না ...

আমি libc.so.6পরীক্ষার জন্য একটি অনুলিপি তৈরি করেছি এবং এটি ব্যবহারের সময় শূন্যে এটি পূর্ণ করে রেখেছি :

window 1 /tmp/lib# LD_LIBRARY_PATH=/tmp/lib ldd ./cat
    linux-vdso.so.1 (0x00007ffcfaf30000)
    libc.so.6 => /tmp/lib/libc.so.6 (0x00007f1145e67000)
    /lib64/ld-linux-x86-64.so.2 (0x00007f1146212000)

window 1 /tmp/lib# LD_LIBRARY_PATH=/tmp/lib ./cat
foo
foo

Segmentation fault

(ইতিমধ্যে অন্য উইন্ডোতে, fooসেগফল্টের আগে , এর পরে )

window 2 /tmp/lib# dd if=/dev/zero of=libc.so.6 bs=1024 count=2000

আমি এর কোডটি অনলাইনে কার্যকরভাবে সম্পাদনা করার পরে প্রোগ্রামটি নিজেই এর বিরুদ্ধে কিছুই করতে পারে না।

(এটি সম্ভবত সিস্টেম নির্ভর হবে, আমি দেবিয়ান জেসি .5.৫, লিনাক্স ৩.১k..7-সিকিটি 25-2 + ডিবি 833-তে পরীক্ষা করেছি particular


সুতরাং আমি অনুমান করি উত্তরটি হ'ল আপগ্রেডগুলি এমনভাবে করা হয় যা কোনও সমস্যা এড়ায় এবং এটি ফাইল সিস্টেম ইন্টার্নাল দ্বারা সহায়তা করে। তবে (লিনাক্সে) গতিশীল লাইব্রেরিগুলিকে দূষিত করার বিরুদ্ধে কোনও সুরক্ষা বলে মনে হচ্ছে না।


installউপযোগ সাধারণভাবে ভালো কাপড় ব্যবহার করা হয়। আপনার rmগন্তব্য ফাইলটি স্পষ্ট করে বলার দরকার নেই । এছাড়াও এটি বিদ্যমান ফাইলের অনুমতিগুলি সংরক্ষণ করে, ব্যাকআপ নিতে পারে, একটি নতুন মোড সেট করতে পারে ইত্যাদি Example উদাহরণ ব্যবহারের জন্য:install /new/version/of/cat /bin/cat
প্যাট্রিক

অবশ্যই। rm+ + cpএকটি উদাহরণ হিসাবে অভিপ্রেত ছিল। নতুন নামটি একটি নতুন নাম দিয়ে নতুন জায়গায় রেখে দেওয়া স্মার্টও হতে পারে, একটি ছোট উইন্ডো এড়ানো যাতে কোনও সংস্করণ পাওয়া যায় না। (যদিও জিএনইউ installএমনকি এটি করে বলে মনে হচ্ছে না, এইচএমপিএফ)
ইলক্কাচু

2
আমি এই উত্তরে থাকা কিছু পরিষ্কার করতে চাই: ইউনিক্সে যদি কোনও ফাইল খোলা থাকে এবং ( rm) মুছে ফেলা হয় , তবে এটি এখনও মুছে ফেলা হয়নি। এটি ডিস্কে উপস্থিত থাকবে এবং এখনও এটি খোলার সমস্ত প্রক্রিয়া দ্বারা পড়া যেতে পারে। এটি কেবল তখনই মুছে ফেলা হবে যখন এর হার্ড-লিঙ্কের গণনা শূন্যে পৌঁছে যাবে এবং ফাইলটি খোলার সাথে প্রেরেসের সংখ্যা শূন্যে পৌঁছে যাবে।
ctrl-alt-delor

@ পেট্রিক: installইউটিলিটিটি বিশেষত অনিরাপদ! এটি লক্ষ্য ফাইলটি পরমাণুর পরিবর্তে পরিবর্তিত করার পরিবর্তে জায়গায় ওভাররাইট করে। mv(একই ডিরেক্টরিতে উত্স এবং গন্তব্য সহ, উত্স সাধারণত একটি টেম্প ফাইল হয়) ফাইলগুলি ইনস্টল করার একমাত্র নিরাপদ উপায়।
আর .. গীটহাব বন্ধ করুন ICE

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

3

ফাইলগুলি খোলার সময় লিঙ্কযুক্ত থাকলে ফাইলগুলি "সঠিকভাবে মোছা" হবে না। এগুলি বন্ধ হয়ে গেলে, তারা যে ডিস্ক স্থানটি ব্যবহার করেছিল তা আবার "মুক্ত" হিসাবে বিবেচিত হবে। এটি বর্তমানে চলমান অ্যাপ্লিকেশন এবং তাদের ভাগ করা লাইব্রেরিগুলির জন্য যায়।

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

উদাহরণস্বরূপ: অন্য শেল সেশনে vimইনস্টলেশন মুছে ফেলার সময় একটি শেল সেশনে চালানো vim"দুর্নীতিগ্রস্থ" বা বর্তমান চলমান vimঅধিবেশনটি শেষ করতে পারবে না । তবে কিছু জিনিস ব্যর্থ হতে শুরু করবে, উদাহরণস্বরূপ বানান যাচাইয়ের জন্য, যার vimইনস্টলেশনগুলির মধ্যে ফাইলগুলি খোলার প্রয়োজন ।

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